1,TH00xFC和TL00x67怎么理解在51单片机定时1ms怎么得前面的数值百

频率是12M时,需计数的脉冲个数是1000,因此定时器初值是(65536-1000)。其中高8位代表的是有多少个256,低8位是不足256部分。1 mS 应该用TH0=(65536-1000)/256; // 定时时间 1mSTL0=(65536-1000)%256;(65536-1000) 与 -1000 不是一个概念(65536-1000) = 64536 十六进制 为 0xFC18-1000 为负1000 编译后的 十六进制 会变成 0xFB18扩展资料:定时设置完成后,应按“设定”键检查多次定时设定情况是否与实际情况一致。如有异,请按时间需要进行调整或重新设定。注:如果每天不需要设定20组,而其他组已设定,必须按“清除”键,将多余各组的时间程序清除。如设置的时间程序是跨天的,需要逐一将“开”与“关”时间程序相对应的星期模式对应好。参考资料来源:百度百科-定时器

TH00xFC和TL00x67怎么理解在51单片机定时1ms怎么得前面的数值百

2,单片机控制倒计时定时器

哥们 我做的定时器 的程序 这个是正的 你该一下吧 #include<reg52.h>#define uint unsigned int #define uchar unsigned char uchar code du[]=uchar code da[]=display(uchar,uchar,uchar,uchar);uchar x=0;uchar n=0;uchar flag=0;uchar second=0,minute=0;sbit K1=P3^0;sbit K2=P3^1;uchar temp=0;delay(uchar x) uchar a,b; for(a=x;a>0;a--) for(b=25;b>0;b--) ;} display(uchar m1,uchar m,uchar s1,uchar s) P0=du[m1]; P2=0xfe; delay(10); P0=da[m]; P2=0xfd; delay(10); P0=du[s1]; P2=0xfb; delay(10); P0=du[s]; P2=0xf7; delay(10);}void main() EA=1; ET1=1; TMOD=0x10; TH0=(65536-50000)/256; TL0=(65536-50000)%256; while(1) P3=0XFF; if(K1==0) delay(10); if(K1==0) TR1=1; if(K2==0) delay(10); if(K2==0) TR1=0; if(flag==20) flag=0; second++; if(second==60) second=0; minute++; if(minute==60) minute=0; } } } display(minute/10,minute%10,second/10,second%10); }} void tim1() interrupt 3 TR1=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR1=1; flag++;}

单片机控制倒计时定时器

3,单片机定时计数的问题下面这段程序是什么意思啊是8052最好能逐行解

#include<reg52.h> 头文件#define uchar unsigned char 宏定义懂吧 以后unsigned char就用uchar表示了uchar code table[]=uchar seconds,minute,count1; 定义变量/**********初始化函数***************/void init() P0=0xff; 这个有电路图才好说 不过好像是让端口都为高电平 P0=0x00; // 初始化关显示 seconds=0; minute=0; count1=0; TMOD=0x11; //选择计数器T1模式1 TH1=(65536-46080)/256; 这是定时器的设置 计算初值 改变那个被减数可以改变每次的时间 TL1=(65536-46080)%256; //定时器1实现50MS定时 同上 EA=1; //开总中断 ET1=1; //开定时器1中断 TR1=1; //定时器1开始计数} /******定时器1中断函数*********/ void t1() interrupt 3 //定时器1中断级别为3 TH1=(65536-46080)/256;//数据重载 “/”这符号是求模 TL1=(65536-46080)%256; ”%“这符号是求余 count1++; if(count1==20) 这个20乘以上面的那个50毫秒就是1秒钟 count1=0; 计20次重新归零 seconds++; 每计20次秒数加一 if(seconds>59) seconds=0; }minute++; 当秒数>59时秒数归零 分加1 我个人觉得这应该设置为>60 如果设置为59的话 seconds=59的时候就归零了 就是说59可能就不会显示了 } }/*******延时函数***************/ void delay(uchar xms) char x,y; for(x=xms;x>0;x--) for(y=110;y>0;y--); 这是根据程序仿真算的时间 每110次大概就是一毫秒 设置X等于几就是几毫秒 }/************显示函数***********/void display(uchar temp) uchar qian,bai,shi,ge; 定义变量 temp=seconds; 把seconds的值传递给temp qian=minute/10; 对10取模 bai=minute%10; 对10取余 shi=temp/10; 对10取模 ge=temp%10; 对10取余 P0=0xff; //消隐 这个没什么大用 去掉也可以 P2=0xdf;//第一个数码管选中 这个值得看你那电路图 P0=table[ge]; 对P0赋值 从table中调取 delay(1); 调用延迟函数 延迟一毫秒 P0=0xff;//消隐 P2=0xef;//第二个数码管选中 看电路图赋值 P0=table[shi]; 同上 delay(1); P0=0xff;//消隐 P2=0xf7;//第三个数码管选中 P0=table[bai]; delay(1); P0=0xff;//消隐 P2=0xfb;//第四个数码管选中 P0=table[qian]; delay(1);}/************主函数***********/void main() init(); 初始化函数 while(1) 大循环 display(seconds); 让数码管开始显示 计秒 }}这是一个计时器程序 没有小时 是计秒 然后还有分钟 我也是初学者 有什么问题我们可以再讨论 我的邮箱snowleopard331@163.com 有问题发邮件给我一起讨论

单片机定时计数的问题下面这段程序是什么意思啊是8052最好能逐行解


文章TAG:定时定时器0xf7定时多少秒  TH00xFC和TL00x67怎么理解在51单片机定时1ms怎么得前面的数值百  
下一篇