万福君、潘松峰
MOV TL0,#XXH;设置计数器TL0的计数参数
MOV TH1,#XXH;设置定时器0的定时参数(高位字节:重装用)
MOV TL1,#XXH;(低位字节:)
;以上TH0和TL0参数设置指令,要在中断处理程序的开始重写
;T1参数设置指令,不用在中断处理程序的开始重写,可自
;动重装,除非要改写运行参数
SETB TR0;启动计数器TL0
SETB TR1;启动定时器TH0,并在INT1引脚高电平时启动
三、计数初值的计算
计算公式:使用12MHz晶振
12 12
一个机器周期=------------- = ---------- = 1微秒
晶振频率 12M
定时值计算:因为:定时时间=计数值X*机器周期
定时时间
所以:X= ---------- 而计数器设置初值 Y=2n-X
机器周期
定时时间
因此 Y=2n-(---------)
机器周期
四、 定时器/计数器编程举例:定时器初始化程序
例程∶》1
FFFFH=65536 55536 =D8F0H 65536-55536=10000
T0定时时间=10000*1us=10ms
设晶振频率位12MHz,P1口接八个指示灯,P2.0接一个选择开关,制作流水灯控制器,每0.01秒移动一次或每0.5秒移动一次(画出电路原理图)
方式1,定时,中断
ZDJSQEQU40H;中断计数器
SJSDZ1EQU42H;时间设定值1
SJSDZ2EQU44H;时间设定值2
SCHCQEQU2CH;输出缓冲区
T0BZEQU08H;0.1秒定时标志
YDBZEQU09H;移动标志
ORG 0000H;程序进入地址及转移指令
LJMP START
ORG 0003H;中断向量区
LJMP INTINT0;外部中断0转移指令
ORG 000BH
LJMP INTT0;定时器0中断转移指令
ORG 0013H
LJMP INTINT1;外部中断1转移指令
ORG 001BH
LJMP INTT1;定时器1中断转移指令
ORG 0023H
LJMP INTDX;串行口中断转移指令
ORG 002BH
LJMP INTT2;定时器2中断转移指令
ORG 0030H
START:MOV SP,#60H;初始化程序
MOV TMOD,#01H;00010000
MOV TH0,#0D8H
MOV TL0,#0F0H
SETB EA;开总中断
SETB ET0;开定时器0中断
SETBTR0;启动定时器0工作
MOVSJSDZ1,#1;初始化时间设定值
MOVSJSDZ2,#50;初始化时间设定值
MOVZDJSQ,SJSDZ2;取时间设定值
MOV SCHCQ,#01H
LOOP1:ACALL IOCZ;I/O操作子程序
ACALL BJCX;报警子程序
ACALL ZKCX;主控制程序
SJMP LOOP1
IOCZ:JBCYDBZ,IOZC1;IO操作子程序
RET
IOZC1:MOVA,SCHCQ
RLA
MOVSCHCQ,A
MOVP1,A
CLRYDBZ
RET
ZKCX:JNBT0BZ,ZKCX1;利用0.01秒定时中断
CLRT0BZ
DJNZZDJSQ, ZKCX1;判断延时时间到
JBP2.0,ZKCX2
MOVZDJSQ, SJSDZ1;初始
化时间设定值0.01S
SETBYDBZ
ZKCX1: RET
ZKCX2:MOVZDJSQ, SJSDZ2;初始化时间设定值0.5S
SETBYDBZ
RET
INTT0:PUSHPSW
PUSHACC
MOV TH0,#0D8H;重置定时