预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共69页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

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

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

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

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

第6章MCS-51的定时器/计数器6.1定时器/计数器的结构定时器/计数器T0、T1的逻辑结构6.1.1工作方式控制寄存器TMOD6.1.2定时器/计数器控制寄存器TCON6.1.3定时器/计数器的操作6.2定时器/计数器的工作方式6.2.1方式06.2.2方式16.2.3方式26.2.4方式3说明:1.工作方式3下的T02.T0工作在方式3下T1的各种工作方式6.3定时器/计数器对输入信号的要求6.4定时器/计数器的编程和应用将X化为十六进制,即X=FEOCH=1111111000001100B。 所以,T0的初值为: TH0=0FEHTL0=0CH (2)初始化程序设计初始化程序包括定时器初始化和中断系统初始化,主要是对寄存器IP、IE、TCON、TMOD的相应位进行正确的设置,并将计数初值送入定时器中。 (3)程序设计 ORG0000H RESET:AJMPMAIN;转主程序 ORG000BH;T0的中断入口地址 AJMPIT0P;转T0中断处理程序IT0P ORG0100H MAIN:MOVSP,#60H;设堆栈指针 MOVTMOD,#01H;设置T0为方式100000001 ACALLPT0M0;调用子程序PT0M0 HERE:AJMPHERE;自身跳转PT0M0:MOVTL0,#0CH;对T0置定时初值(先低后高) MOVTH0,#0FEH SETBTR0;启动T0开始计时 SETBET0;允许T0计数溢出中断 SETBEA;CPU开中断 RET IT0P:MOVTL0,#0CH;T0中断服务子程序,T0置初值 MOVTH0,#0FEH CPLP1.0;P1.0的状态取反 RETI如果CPU不做其它工作,也可以采用查询的方式进行控制,查询方式的参考程序如下:(3)10次计数的实现 对于中断10次计数,可使T0工作在定时方式,采用循环程序的方法实现。 (4)程序设计 ORG0000H RESET:LJMPMAIN;上电,转主程序入口MAIN 0RG000BH;T0的中断入口地址 LJMPIT0P;转T0中断处理程序ITOP ORG1000H MAIN:MOVSP,#60H;设堆栈指针 M0VB,#0AH;设循环次数10次 MOVTMOD,#01H;设T0工作在方式100000001 MOVTL0,#0B0H;给T0设初值(先低后高) MOVTH0,#03CHLOOP:SETBTR0;启动T0开始定时 SETBET0;允许T0中断 SETBEA;CPU开放中断 HERE:SJMPHERE;等待中断 IT0P:MOVTL0,#0B0H;T0中断服务子程序, 重新给T0装入初值 MOVTH0,#3CH DJNZB,LOOP CLRTR0;1s定时时间到,停止T0工作 RETI6.4.2方式2的应用6.4.3方式3的应用(2)初值计算(即TL0、TH0的初值) TL0的初值设为0FFH。因T=1/f=1/5000=200μs,所以5KHZ方波的周期为200μs,因此TH0的定时时间为100μs。 TH0的初值X计算如下:6.4.4门控制位GATE的应用——测量脉冲宽度●参考程序如下: ORG0000H RESET:AJMPMAIN;复位入口转主程序 ORG0100H MAIN:MOVSP,#60H MOVTMOD,#0D0H;设控制字,11010000 T1为方式1计数,GATE=1 MOVTL1,#00H;置T1计数初值为零(从0开始计数) MOVTH1,#00H LOOP:JBP3.3,LOOP;等待低(P3.3=1时转移) SETBTR1;如果P3.3=0,即为低,启动T1开始计数 器(真正计数时=1)LOOP1:JNBP3.3,LOOP1;等待升高(P3.3=0时转移), 高才计数 LOOP2:JBP3.3,LOOP2;等待降低(P3.3=1时转移), 低停止计数 CLRTR1;停止T1计数 MOVA,TL1;T1计数值送A 将A中的T1计数值送显示 缓冲区并转换成可显示的代码 LOOP3:LCALLDIR;调用显示子程序DIR(略)显示T1计数值 AJMPLOOP3 执行以上程序,使引脚上出现的正脉冲宽度以机器周期数的形式显示在显示器上。6.4.5实时时钟的设计参考程序流程如下:ADDA,4lH DAA;“分”单元十进制调整 MOV4lH,A;“分”的BCD码存回“分”单元 CJNEA,#60,RETURN;是否到60分,未到则返回 MOV41H,#00H;计满60分,“分”单元清0 MOVA,#01H;“时”单元增1 ADDA,40H DAA;“时”单元十进制调整 MOV40H,A;“时”的BCD码存回“时”单元 CJNEA,#24,RETURN;是否到24小时,未到则返回 MOV40H,#00H;到24小时,