undefined-0's Blog

历添新岁月 春满旧山河

0%

AT89S52_test4

实验四 定时器实验

注:本实验所用单片机外接晶振频率为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