完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
51中断系统的组成
定时/计数器的基本原理 逻辑开关闭合后,脉冲信号将对加1计数器充值。若计数器的容量为2 n (n为整数),则当数值达到满计数值后将产生溢出,使中断请求标志TFx(x为0或1)进位为1,同时加1计数器清零。 如果在启动计数之前将TFx清零,并将一个称为计数初值a的整数先置入加1计数器,则当观察到TFx为1时表明已经加入了(2n - a)个脉冲,如此便能计算出脉冲的的到达数量了。
定时/计数器工作原理 系统时钟(系统内部振荡器)经12分频后的脉冲(即机器周期)(12分频为12除以频率)信号和来自外部引脚Tx的脉冲信号,通过逻辑 定时/计数器的结构 由上图可知,T0和T1分别由高8位和低8位两个特殊功能寄存器组成,即
定时/计数器的控制是通过两个特殊功能寄存器实现的,其中,
电路图 要求 D1~D8灯间隔1s闪烁 完整程序 #include unsigned char t; void main() { TMOD=0x01;//0000 00|01| M1=0,M0=1,定时器T0模式1,16位计数器 EA=1;//中断总允许 ET0=1;//定时器T0的中断开关 TR0=1;//启动定时器0 while(1); } void timer() interrupt 1 { //定时时间50000μs=(65536-a)×12/fosc fosc=11.0592≈12 //一个较大的数字分成两部分,分别存入定时器T0的高八位和低八位 //8位最大能表示数字256,高8位和低8位一起可表示一个最大数字256256 //括号内的结果除以256将整数存入定时器T0的高8位TH0 //括号内的结果取余256将余数存入定时器T0的低8位TL0 //TH0=(65536-50000)/256;//得到整数部分存入高8位 60 0011 1100 //TL0=(65536-50000)%256;//得到余数部分存入低8位 176 1011 0000 //2的16次方=65536 ,单位时间50000μs=50ms,2的8次方=256 ,(65536-50000)/256=60 (60)binary=0011 1100 TH0=(65536-50000)/256;//定时器T0的高8位 //(65536-50000)%256=176 (176)binary=1011 0000 TL0=(65536-50000)%256;//定时器T0的低8位 t++;//如果t累加到20,则执行if语句(即t=20时表示1秒) if(t==20) //20个50ms(定时时间)=1s { t=0;//t清零,以便进行下一次计数 P1=~P1;//取反实现led的闪烁 } } 解释部分语句 TH0=(65536-50000)/256; TL0=(65536-50000)%256; 如果你选的单片机的晶振一定,比如12MHZ来说吧,机器周期是1us,就是说每1us产生一次计数,就拿50ms来说,这是你想要的计时,意思是,对机器周期进行50000计数就可以得到我想要的,可T0是一个可以对机器周期能进行65536次计数,也就是说我想要的50MS不能让T0溢出,怎么办?那么先给这个定时器里面放些数,放多少,就是我们想要的50MS在加上一个多少就能等于65536,也就是65536和50000的差值,这个值就是我们说的初值。 为什么除以256,因为我们的计时器是两个8位组成的,那么要把那些差值装进这两个8位,那么低8位最多能装256个机器周期,那么256计满了就用高8位的,就是说低8位满一次高8位加1,那么高8位装多少,低8位就满了几次,算法就是用差值除一下256取其整数,剩下的,就是还剩了小于256次数的就放在低8位,就是差值的余数。如果我要放一个超过256的数,肯定是超过先放高八位,把剩下的部分放在低八位中了,TH0=(65536-50000)/256就是把TL0中放不下的部分放在THO中,再把剩下的部分放在TH0中。 |
|
|
|
只有小组成员才能发言,加入小组>>
3272 浏览 9 评论
2948 浏览 16 评论
3449 浏览 1 评论
8969 浏览 16 评论
4042 浏览 18 评论
1087浏览 3评论
563浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
558浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2295浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1851浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-14 08:13 , Processed in 1.297265 second(s), Total 51, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号