实验五 计数器实验
test 5_1
采用定时器与计数器相结合的方法使P1.7所接的发光二极管亮1秒、灭1秒,周而复始。
用三种组合实现:①查询方式+中断方式;②查询方式+查询方式;③中断方式+中断方式。
接线方法:P1.7接一LED,P3.5(T1输入)接P1.0(周期为100ms的方波输出)
①查询方式+中断方式
T1计数10,T0计时50ms
T1采用查询,T0采用中断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| ORG 0000H SJMP MAIN ORG 000BH ;T0中断服务程序入口 SJMP T0_ISR ORG 0030H MAIN: CLR P1.0 ;设P1.0初始为低电平(为输出周期为100ms的方波做准备) CLR P1.7 ;设P1.7初始为低电平(LED点亮) MOV TMOD,#61H ;0110 0001:设置T1为计数器,方式2;设置T0为定时器,方式1 MOV TH0,#4CH MOV TL0,#01H MOV TH1,#0F6H MOV TL1,#0F6H SETB ET0 ;允许T0中断 ;SETB ET1 ;允许T1中断 SETB TR0 ;启动T0 SETB TR1 ;启动T1 SETB EA ;开中断总开关 CHECK: ;查询T1是否有中断溢出请求 JBC TF1,HANDLE ;若中断请求标志位TF1为1,则将其清零并跳转到处理程序 SJMP CHECK HANDLE: ;若T1有中断溢出请求,则取反P1.7 CPL P1.7 SJMP CHECK
;T0中断服务程序 T0_ISR: CPL P1.0 MOV TH0,#4CH ;重装载 MOV TL0,#01H RETI END
|
test 5_2
②查询方式+查询方式
T1、T0皆采用查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| ORG 0000H SJMP MAIN ORG 0030H MAIN: CLR P1.7 ;设P1.7初始为低电平(LED点亮) SETB P1.0 ;设P1.0初始为高电平(为输出周期为100ms的方波做准备) MOV TMOD,#61H ;0110 0001:设置T1为计数器,方式2;设置T0为定时器,方式1 MOV TH1,#0F6H MOV TL1,#0F6H SETB TR1 ;启动T1(定时) LABEL1: CPL P1.7 LABEL2: MOV TH0,#4CH MOV TL0,#01H SETB TR0 ;启动T0(计数) LABEL3: JBC TF0,LABEL4 ;若50ms到了,则将中断请求标志位TF0清零并跳转LABEL4(翻转P1.0) SJMP LABEL3 ;50ms未到,继续查询中断请求标志位TF0状态 LABEL4: CPL P1.0 JBC TF1,LABEL1 ;若1s到了,则将中断请求标志位TF1清零并跳转LABEL1(翻转P1.7) AJMP LABEL2 ;某一个50ms到了,但1s没到,回到LABEL2对T0进行重装载 END
|
test 5_3
③中断方式+中断方式
T1、T0皆采用中断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| ORG 0000H SJMP MAIN ORG 000BH ;T0中断服务程序入口 SJMP T0_ISR ORG 001BH ;T1中断服务程序入口 SJMP T1_ISR ORG 0030H MAIN: CLR P1.0 ;设P1.0初始为低电平(为输出周期为100ms的方波做准备) CLR P1.7 ;设P1.7初始为低电平(LED点亮) MOV TMOD,#61H ;0110 0001:设置T1为计数器,方式2;设置T0为定时器,方式1 MOV TH0,#4CH MOV TL0,#01H MOV TH1,#0F6H MOV TL1,#0F6H SETB ET0 ;允许T0中断 SETB ET1 ;允许T1中断 SETB TR0 ;启动T0 SETB TR1 ;启动T1 SETB EA ;开中断总开关 SJMP $
;T0中断服务程序 T0_ISR: CPL P1.0 MOV TH0,#4CH ;重装载 MOV TL0,#01H RETI
;T1中断服务程序 ; T1采用方式2,无需重装载 T1_ISR: CPL P1.7 RETI END
|
test 5_4
输入计数脉冲,将计数脉冲的个数显示出来(小于15次),循环往复
接线方法:P1口接八个LED,P3.5(T1输入)接按钮(按下一次,产生一个脉冲)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| ;采用T1进行计数
ORG 0000H SJMP MAIN ORG 001BH ;T1中断服务程序入口 SJMP T1_ISR ORG 0030H MAIN: CLR A CPL A MOV P1,A CPL A MOV TMOD,#60H ;0110 0000:设置T1为计数器,方式2 MOV TH1,#0FFH ;按下一次按钮,进入一次中断 MOV TL1,#0FFH SETB ET1 ;允许T1中断 SETB TR1 ;启动T1 SETB EA ;开中断总开关 SJMP $
;T1中断服务程序 ; T1采用方式2,无需重装载 T1_ISR: CJNE A,#0FH,INCA ;若脉冲个数未到15个,则A直接加1 MOV A,#0 ;若脉冲个数已到15个,则从零开始计数 INCA:INC A CPL A MOV P1,A CPL A RETI END
|