资源描述:
《at89s51单片机试验及实践教程之定时计数器t0作定时应用技术(一)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、AT89S51单片机试验及实践教程之定时计数器T0作定时应用技术(一)
2、第1内容显示中1.实验任务用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。硬件电路如下图所示2.电路原理图500)this.style.ouseg(this)">图4.15.13.系统板上硬件连线•把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.
3、1/AD1对应着b,……,P0.7/AD7对应着h。•把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。4.程序设计内容AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。只要通过设置特殊功能寄存器TMOD,即可完成。定时/计数器何时工作也是通过软件来设定TCON特殊
4、功能寄存器来完成的。现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。对于这20次我们就可以采用软件的方法来统计了。因此,我们设定TMOD=00000001B,即TMOD=01H下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出TH0=(216-50000) /256TL0=(216-50000) MOD
5、256当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄存器中的TF0标志位,如果TF0=1表示定时时间已到。5.程序框图500)this.style.ouseg(this)">图4.15.26.汇编源程序(查询法)SECONDEQU30HTCOUNTEQU31HORG00HSTART:MOVSECOND,#00HMOVTCOUNT,#00HMOVTMOD,#01HMOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256SETBTR0DISP
6、:MOVA,SECONDMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,AMOVA,BMOVCA,A+DPTRMOVP2,AOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256INCTCOUNTMOVA,TCOUNTCJNEA,#20,NEXTMOVTCOUNT,#00HINCSECONDMOVA,SECONDCJNEA,#60,NEXMOVSECOND,#00HNEX:LJMPDISPNEXT:LJMPOD=0x01;TH0=(6553
7、6-50000)/256;TL0=(65536-50000)%256;TR0=1;tcount=0;second=0;P0=dispcode[second/10];P2=dispcode[second%10];ain(void){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;tcount=0;second=0;P0=dispcode[second/10];P2=dispcode[second%10];while(1);}voidt0(
8、void)interrupt1using0{tcount++;if(tcount==20){tcount=0;second++;if(second==60){second=0;}P0=dispcode[second/10];P2=dispcode[second%10];}TH0=(65536-50000)/256;TL0=(65536-50000)%256;}