www.ysbm.net > 51单片机定时器定时1秒

51单片机定时器定时1秒

1、先打开我们熟悉的单片机c51编程软件keil,先把主方法写好.2、然后,我们要定义两个变量.3、接着,设定好定时器的工作方式.4、设置中断发生的机制.5、最后,我们要加进这几行代码进行初值的重装.6、最后,把if语句补充完毕就可以了.

参考天祥老师的1ms参考程序 delay_ms(uint z) { uint x,y; for(x=z;y>0;y--) for(y=110;y>0;y--); } 在调用时delay(1000);就是1s了

采用定时器定时很精确的,如果定时时间为1ms,那循环1000次就是1s.定时初值要看你采用的晶振频率了,下面是12M晶振,定时器0的定时1ms程序.timer0() interrupt 1 // 1ms延时(12.0MHz) { TR0=0; ET0=0; TH0=0xfc; TL0=0x18; if(delayTimes1!=0) delayTimes1--; TR0=1; ET0=1; }当要程序中把delayTimes1赋值1000后,等到delayTimes1为0的时候定时1s钟到

你这个程序肯定不行,别说1秒,0.1秒都达不到,我帮你改一下:void delay1(){uchar t = 19;TMOD=0x10;for(t=19;t>0;t--) { TH1=(65536-50000)/256; TL1=(65536-50000)%256; TR1=1; while(!TF1);//等待定时器1溢出标志置位 TF1 = 0;//清0标志位 }}你没有说明晶体振荡器频率,所以定时器初值和循环次数t按原程序

晶振12M void delay1s500ms(void) //误差 0us { unsigned char a,b,c; for(c=127;c>0;c--) for(b=96;b>0;b--) for(a=60;a>0;a--); }

简单,选择一个定时器,设置多少次中断一次.设置一个参数专门计数,计算出多少次中断就可以达到1.5秒.然后参数清零,重复计数

include<regx52.h> int itime,second; void timer0(void) interrupt 1 using 1 /*定时器0中断服务器,用来产生1秒定时*/ { TR0=0; TH0=(65536-50000)/10; TL0=(65536-50000)%10; itime++; if(itime==1200) { second++; if(second==61) second=0;} ] void main { ET0=1; TOMD=0X01; TH0=(65536-50000)/10; TL0=(65536-50000)%10; EA=1; }

#include<reg52.h> unsigned char tt,num; void init() //定时器T0初始化 { EA=1; ET0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; } void main(0 { num=0; tt=0; init(); while(1) { if(tt==20) { tt=0; mm++; if(mm==20) { mm=0; } } } }

^#include <reg51.H>sbit P3_5 =P3^5;void delay(){ unsigned char i,j; for(j=20;j>0;j--) for( i= 250;i>0;i--);}unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};unsigned char

可设定时器于一定的时间响应(例如50ms) , 再用一个变量来计算几次(20) , 当计数到一定的值代表到一秒,之后再另一个寄存器上加一,如此反复到99就好了

友情链接:qyhf.net | bestwu.net | qmbl.net | wwfl.net | rjps.net | 网站地图

All rights reserved Powered by www.ysbm.net

copyright ©right 2010-2021。
www.ysbm.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com