实验四 定时器实验
注:本实验所用单片机外接晶振频率为11.059MHz
test 4_1
采用定时器控制从P1.0口输出1000Hz方波信号,占空比为1/4。
接线方法:P1.0接示波器红表笔,任找一低电平接黑表笔。
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
| ORG 0000H SJMP MAIN ORG 000BH ;T0中断服务程序入口 SJMP T0_ISR ORG 0030H MAIN: CLR P1.0 ;设P1.0、P1.1初始为低电平 MOV TMOD,11H ;0000 0001:设置T0为定时器,工作在方式1 MOV TH0,#0FFH ;开启后立即进入中断 MOV TL0,#0FEH SETB ET0 ;允许T0中断 SETB TR0 ;启动T0 SETB EA ;开中断总开关 SJMP $
;T0中断服务程序 T0_ISR: CLR TR0 ;停止T0 CPL P1.0 ;反转P1.0 JNB P1.0, T0_CHANGE_TIME ;如果P1.0为低电平,设置T0为低电平持续时间 MOV TH0, #0FFH ;重装载(250μs,高电平持续时间) MOV TL0, #01AH SETB TR0;重新启动T0 RETI
T0_CHANGE_TIME: MOV TH0, #0FDH ;重装载(750μs,低电平持续时间) MOV TL0, #4DH SETB TR0 ;重新启动T0 RETI END
|
test 4_2
采用定时器控制从P1.0和P1.1分别输出周期为3ms占空比为1/3的方波和周期为为500μs占空比为1/5的方波。
接线方法:P1.0接示波器红表笔(CH1),任找一低电平接黑表笔
P1.1接示波器红表笔(CH2),任找一低电平接黑表笔
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| ORG 0000H SJMP MAIN ORG 000BH ;T0中断服务程序入口 SJMP T0_ISR ORG 001BH ;T1中断服务程序入口 SJMP T1_ISR ORG 0050H MAIN: CLR P1.0 ;设P1.0、P1.1初始为低电平 CLR P1.1 MOV TMOD,#11H ;0001 0001:设置T1、T0都为定时器,都工作在方式1 MOV TH0,#0FFH ;开启后立即进入中断 MOV TL0,#0FEH MOV TH1,#0FFH MOV TL1,#0FEH SETB ET0 ;允许T0中断 SETB ET1 ;允许T1中断 SETB TR0 ;启动T0 SETB TR1 ;启动T1 SETB EA ;开中断总开关 SJMP $
;T0中断服务程序 T0_ISR: CLR TR0 ;停止T0 CPL P1.0 ;反转P1.0 JNB P1.0, T0_CHANGE_TIME ;如果P1.0为低电平,设置T0为低电平持续时间 MOV TH0, #0FCH ;重装载(1ms,高电平持续时间) MOV TL0, #066H SETB TR0;重新启动T0 RETI
T0_CHANGE_TIME: MOV TH0, #0F8H ;重装载(2ms,低电平持续时间) MOV TL0, #0CDH SETB TR0 ;重新启动T0 RETI
;T1中断服务程序 T1_ISR: CLR TR1 ;停止T1 CPL P1.1 ;反转P1.1 JNB P1.1, T1_CHANGE_TIME ;如果P1.1为低电平,设置T1为低电平持续时间 MOV TH1, #0FFH ;重装载(100μs,高电平持续时间) MOV TL1, #0A4H SETB TR1;重新启动T1 RETI
T1_CHANGE_TIME: MOV TH1, #0FEH ;重装载(400μs,低电平持续时间) MOV TL1, #8FH SETB TR1 ;重新启动T1 RETI END
|
来自其他人的一种更好的写法:
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 40 41 42 43 44 45 46 47 48
| ;采用定时器控制从P1.0和P1.1分别输出周期为3ms占空比为1/3的方波和周期为500微秒占空比为1/5的方波。 ;11.0592MHz,1.085069微秒 ORG 0000H AJMP MAIN ORG 000BH AJMP TIMER0_ISR ORG 001BH AJMP TIMER1_ISR ORG 0100H MAIN:MOV TMOD, #00010010H ; 设置定时器0为模式1、定时器1为模式2 (16位定时器、8位定时器) MOV TH0, #0FCH ; 设置定时器0初始值 (1ms) MOV TL0, #03FH MOV TH1, #0A4H ; 设置定时器1初始值 (100微秒) MOV TL1, #0A4H MOV R0, #2 ; 计数2(低电平2ms) MOV R1, #4 ; 计数4(低电平400微秒) CLR P1.0 ; 低电平 CLR P1.1 ; 低电平 SETB ET0 ; 使能定时器0中断 SETB ET1 ; 使能定时器1中断 SETB EA ; 使能全局中断 SETB TR0 ; 启动定时器0 SETB TR1 ; 启动定时器1 LOOP: SJMP LOOP ; 无限循环
TIMER0_ISR: MOV TH0, #0FCH ; 重装载定时器0初始值 MOV TL0, #03FH DJNZ R0, EXIT ; R0=0 P1.0=1 CPL P1.0 JB P1.0, CYCLE1 ; P1.0=1->CYCLE1&P1.0=0->R0=2 MOV R0, #2 SJMP EXIT CYCLE1: MOV R0, #1 SJMP EXIT
TIMER1_ISR: MOV TH1, #0A4H ; 重装载定时器1初始值 MOV TL1, #0A4H DJNZ R1, EXIT ; R1=0 P1.0=1 CPL P1.1 JB P1.1, CYCLE2 ; P1.1=1->CYCLE2&P1.1=0->R1=4 MOV R1, #4 SJMP EXIT CYCLE2: MOV R1, #1 SJMP EXIT EXIT:RETI END
|