单片机原理与应用(陈桂友)第8章__定时计数器.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:45 大小:464KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

单片机原理与应用(陈桂友)第8章__定时计数器.ppt

单片机原理与应用(陈桂友)第8章__定时计数器.ppt

预览

免费试读已结束,剩余 35 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第8章定时/计数器在计算机控制中可供选择的定时方法8.18051单片机的定时/计数器单片机中的微处理器、寄存器TCON和TMOD与定时/计数器T0、T1之间的关系2、定时/计数器方式和控制寄存器3、定时/计数器的工作方式方式2定时时间为:TC=XTP。其中,TP为机器周期,TC为定时时间。则应装入计数/定时器的初值为系统时钟频率为6MHz时定时器的最大定时能力5、定时/计数器编程举例【例8-l】设计利用定时/计数器T0、T1端作为外部中断源输入线进行外部中断源扩充的程序。解:为了扩充外部中断源,可以利用定时/计数器工作于计数状态时,T0(P3.4)或T1(P3.5)引脚上发生负跳变,计数器增1这一特性,把P3.4、P3.5作为外部中断源请求输入线,使计数器的计数值为-1(即0FFH),则外部T0、T1输入一个脉冲即计数溢出,从而置位相应的中断请求标志,以此来申请中断,则相当于扩充了一根/INT线。编程时,将T0置为方式2计数,计数初值0FFH,计数输入端T0(P3.4)发生一次负跳变,计数器加1并产生溢出标志向CPU申请中断,中断处理程序使累加器A内容减1,送P1口,然后返回主程序。汇编语言程序清单如下:对应的C语言程序如下:#include“REG51.H”unsignedcharcnt;voidtimer0_ISR(void)interrupt1//T0中断函数{cnt=cnt--;//在C语言程序中,使用变量cnt代替汇编语言中的累加器AP1=cnt;}voidmain(void){cnt=0xff;TMOD=0x06;//定时器0工作于方式2TL0=0xff;TH0=0xff;TR0=1;ET0=1;EA=1;while(1);//等待中断}【例8-2】设系统时钟频率为6MHz,利用定时器T0定时,每隔1s将P1.0的状态取反。汇编语言程序代码如下:ORG0000HLJMPMAIN;转主程序ORG000BH;T0中断服务程序入口地址LJMPT0_ISRORG0100HMAIN:MOVSP,#60H;设置堆栈指针MOVTMOD,#01H;T0初始化MOVTL0,#58HMOVTH0,#9EHMOVA,#20;累加器A置20SETBTR0;启动T0计数SETBET0;允外T0中断SETBEA;CPU开中断SJMP$;等待T0_ISR:MOVTL0,#58HMOVTH0,#9EHDECA;累加器A内容减1JNZEXITCPLP1.0MOVA,#20;累加器A重载20EXIT:RETIEND对应的C语言程序如下:#include“reg51.h”//包含8051单片机的头文件sbitP10=P1^0;//声明P1.0的位变量unsignedchari;//声明计数变量。在C语言程序中,不能使用ACCvoidtimer0_ISR(void)interrupt1//定时器T0中断函数{TL0=0x58;//重新装入时间常数TH0=0x9E;i--;//计数变量减1if(i==0){//若减到0,则将P1.0取反P10=!P10;i=20;//重新给计数变量赋值}}voidmain(void){//SP=0x60;//使用C语言设计程序时,可以不设置堆栈指针TMOD=0x01;TL0=0x58;TH0=0x9E;i=20;//计数变量赋初值TR0=1;//启动T0计数ET0=1;//允许T0中断EA=1;//开放总的中断while(1);//等待中断}解:以T0为例,下面列出实现这一方法的关键代码,完整的程序,请读者自行编写。MOVTMOD,#09H;T0初始化,T0工作于方式1、定时、GATE置1MOVTL0,#00HMOVTH0,#00HJNBP3.2,$;等待升高SETBTR0JBP3.2,$;等待下降CLRTR0;关T0MOVA,TL0;T0内容高8位送B,低8位送AMOVB,TH0……;计算脉宽或送显示器显示8.2MSC1211的定时器与脉宽调制1、系统定时器2)毫秒定时器周期为1ms的时钟信号:1ms=(MSECH×256+MSECL+1)×tCLK3)百毫秒定时器5)看门狗定时器【例】毫秒定时器的使用。设系统时钟频率为11.0592MHz,利用毫秒定时器定时,每隔0.5s将P2.4的状态取反。利用该程序模块,可以实现报警指示功能。[电路采用灌电流方式,参考P39图3-3b]解:程序代码如下:#include<REG1211.H>sbitAlarmOUT=P2^4;//报警闪烁显示unsignedcharms_cnt;//ms_cnt用于百毫秒计数voi