实验五 定时/计数器查询方式应用
一、定时器工作方式0、1、2的应用
(工程文件名:05定时器方式012.DSN)
已知单片机晶体振荡器频率为12MHz,使用定时器编制延时程序,采用查询溢出方式控制红灯D1交替闪烁,将定时器工作方式分别设置为方式0、方式1和方式2,实现上述功能。
1.1定时器工作方式0(文件名:05定时器方式0.ASM,填空并回答问题) P1_0 EQU P1.0 ORG 0000H Main:
CLR P1_0
MOV TMOD,# 00 H ; 定时器0,工作方式0(13位计数值) MOV TH0,#00H ; 计数初值 MOV TL0,#01H
SETB TR0; 启动T0,从1开始增1计数,计满溢出 LP1: JBC TF0, LP2;查询定时器0是否计满溢出,溢出转LP2处理 SJMP LP1
LP2: CPL P1_0 ;溢出P1.0取反,灯明暗变化 MOV TH0,#00H ; 重装定时器计数初值 MOV TL0,#01H SJMP LP1 END
1.2定时器工作方式1(文件名:05定时器方式1.ASM,填空并回答问题) P1_0 EQU P1.0 ORG 0000H Main:
CLR P1_0
MOV TMOD,# 01 H ; 定时器0,工作方式1(16位) MOV TH0,#00H ; 计数初值 MOV TL0,#010H
SETB TR0 ; 启动T0,从16开始增1计数,计满2^16=65536溢出 LP1: JBC TF0, LP2 ;查询定时器0是否计满溢出,若溢出转LP2处理 SJMP LP1 LP2:
CPL P1_0 ; P1.0取反,灯明暗变化 MOV TH0,#00H; 重新赋计数初值 MOV TL0,#010H SJMP LP1 END
1.3定时器工作方式2(文件名:05定时器方式2.ASM,填空并回答问题) P1_0 EQU P1.0 ORG 0000H Main:
CLR P1_0 MOV R1,#250
MOV TMOD,# 02 H ; 定时器0,工作方式2(8位重装初值) MOV TH0,#01H ; 计数初值 MOV TL0,#01H
SETB TR0; 启动T0,定时器0从1开始增1计数,满2^8=256溢出 LP1: JBC TF0, LP2;查询定时器值是否计满溢出,若溢出转JP2处理 SJMP LP1
LP2: DJNZ R1,LP1;有无溢出250次,若没有,继续查询是否溢出
;若有执行下一句,改变灯的明暗 CPL P1_0; 溢出250次P1.0取反,灯明暗变化 SJMP LP1 END
二、计数器工作方式0、1、2的应用(文件名:计数器方式012.DSN)
已知单片机晶体振荡器频率为12MHz,使用计数器编制延时程序,采用查询溢出方式控制红灯D1交替闪烁,将计数器工作方式分别设置为方式0、方式1和方式2,实现上述功能。
2.1计数器工作方式0(文件名:05计数器方式0.ASM,填空并回答问题) P1_0 EQU P1.0 ORG 0000H Main:
CLR P1_0
MOV TMOD,# 40 H ; 计数器1,工作方式0(13位计数值) MOV TH1,#0FFH ; 计数初值1111,1111,0000,0000 MOV TL1,#00H
SETB TR1 ; 启动T1,从#0FF00H开始增1计数,
;终值1111,1111,0001,1111共32个脉冲溢出 LP1: JBC TF1, LP2;查询计数器值是否计满溢出,溢出转LP2 SJMP LP1 LP2:
CPL P1_0 ; P1.0取反,灯明暗变化 MOV TH1,#0FFH ; 重新赋计数初值 MOV TL1,#00H SJMP LP1 END
2.2计数器工作方式1(文件名:05计数器方式1.ASM,填空并回答问题) P1_0 EQU P1.0 ORG 0000H Main:
CLR P1_0
MOV TMOD,# 50 H ; 计数器1工作方式1(16位) MOV TH1,#0FFH ; 计数初值 MOV TL1,#0F0H
SETB TR1; 启动T1,从#FFF0H始增1计数,到#FFFFH溢 LP1: JBC TF1, LP2;查询计数器是否计满溢出,溢出转JP2处理 SJMP LP1
LP2:
CPL P1_0; P1.0取反,灯明暗变化 MOV TH1,#0FFH; 重新赋计数初值 MOV TL1,#0F0H SJMP LP1 END
2.3计数器工作方式2(文件名:05计数器方式2.ASM,填空并回答问题) P1_0 EQU P1.0 ORG 0000H Main:
CLR P1_0
MOV TMOD,# 60 H ; 计数器1,工作方式2(8位重装初值) MOV TH1,#0F0H ; 计数初值 MOV TL1,#0F0H
SETB TR1; 启动T1,从#0F0H始增1计数,到#FFH溢出 LP1: JBC TF1, LP2;查询计数器是否计满溢出,溢出转JP2处理 SJMP LP1 LP2:
CPL P1_0 ; P1.0取反,灯明暗变化 SJMP LP1 END
三、计数器工作方式3的应用(工程文件名:05计数器方式3.DSN)
已知单片机晶体振荡器频率为12MHz,使用定时/计数器编制延时程序,将计数器工作方式设置为方式3,采用查询溢出方式控制D1、D2闪烁,定时器溢出控制P1.0处指示灯D1 ,计数器溢出控制P1.7处指示灯D2。
ORG 0000H ; P1.7定时时间255us*200=51ms Main:
MOV TMOD,# 07 H ;工作方式3:禁用T1,用T0, TH0定时器, TL0定时或计数 ; 因为计数模式,所以TL0计数
MOV TH0,#01H ; 定时器TH0初值,计数255个溢出,P1.0定时时间为255us MOV TL0,#038H ;计数器TL0初值,计数200个溢出,P1.7线51ms变化一次 SETB TR0 ;启动计数器TL0,从#38H始增1计数,计满200个脉冲到#FFH溢出。 SETB TR1;启动定时器TH0,从#01H始增1计数,计满255个脉冲到#FFH溢出 LP1: JBC TF1, LP2;查询定时器TH0值是否溢出,定时器计数周期短,先会溢出 SJMP LP1
LP2: MOV TH0,#01H ;定时器TH0溢出,重置初值 CPL P1.0 ;P1.0红灯明暗变化 CLR P3.4 ;产生T0计数脉冲 NOP NOP
SETB P3.4
JBC TF0, LP3; 查询计数器TL0值是否计满溢出 SJMP LP1
LP3: MOV TL0,#038H;计数器TL0溢出,重置初值 CPL P1.7; 计数器TL0溢出,P1_7取反 SJMP LP1 END
1.1填空并回答问题:P1.0红灯过多久明暗发生变化? 答:t=(2^13-1)*(1/12MHz)*12=8.191ms
1.2填空并回答问题:P1.0红灯过多久明暗发生变化? 答:t=(2^16-2^4)* (1/12MHz)*12=65.520ms
1.3填空并回答问题:TL0自动重装的初值来自哪里?P1.0红灯过多久明暗发生变化? 答:来自TH0, t=250*(2^8-1) * (1/12MHz)*12=63.750ms 2.1填空并回答问题:P1.0红灯过多久明暗发生变化? 答:t=29.4*(2^5) =940.8ms
2.2填空并回答问题:P1.0红灯过多久明暗发生变化? 答:t=29.4* (2^4) =470.4ms
2.3填空并回答问题:P1.0红灯过多久明暗发生变化? 答:t=29.4* (2^4) =470.4ms
3.1填空并回答问题:D1、D2过多久明暗发生变化? 答:D1:t=255 * (1/12MHz)*12=255us
D2: t=255*200 * (1/12MHz)*12=51ms