undefined-0's Blog

历添新岁月 春满旧山河

0%

AT89S52_test3

实验三 外部中断实验

test 3_1

通过外部中断使P1口的开关控制8个发光二极管,开始是P1.0所接的灯亮,以后每中断一次,下一个灯亮,顺序左移,周而复始。

接线方法:P0口接8个LED,P3.2接信号发生器(输出方波)红表笔,任找一低电平接黑表笔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ORG 0000H
AJMP MAIN
ORG 0003H ;INT0入口
AJMP INTERRUPT1
MAIN:
MOV A,#0FEH
MOV P1,A ;P1.0所接的灯亮
SETB IT0 ;边沿触发中断
SETB EX0 ;允许INT0中断
SETB EA ;开中断总开关
SJMP $
INTERRUPT1:
RL A
MOV P1,A
RETI
END

test 3_2

外部中断控制P1口连接的8个发光二极管,同时亮,或同时灭,每中断一次,变反一次

接线方法:P1口接8个LED,P3.2接信号发生器(输出方波)红表笔,任找一低电平接黑表笔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ORG 0000H
AJMP MAIN
ORG 0003H ;INT0入口
AJMP INTERRUPT1
MAIN:
MOV A,#0FFH
MOV P1,A ;开始灯全灭
SETB IT0 ;边沿触发中断
SETB EX0 ;允许INT0中断
SETB EA ;开中断总开关
SJMP $
INTERRUPT1:
CPL A
MOV P1,A
RETI
END

test 3_3

外部中断控制P1口连接的8个发光二极管。
中断第一次,8个发光二极管循环点亮;
中断第二次,8个发光二极管逐个点亮;
中断第三次,8个发光二极管高四位和低四位交替亮灭。
如此循环往复。

接线方法:P1口接8个LED,P3.2接按键

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
59
60
61
ORG 0000H
AJMP MAIN

ORG 0003H ;INT0入口
AJMP INTERRUPT1

ORG 0030H
MAIN:
MOV A,#0FFH
MOV P1,A ;开始灯全灭
SETB IT0 ;边沿触发中断
SETB EX0 ;允许INT0中断
SETB EA ;开中断总开关
RELOAD:MOV R3,#03H ;计数变量
MOV A,#0FEH
MOV P1,A ;点亮P1.0所接的灯

LOOP0:
RL A
MOV P1,A
ACALL DELAY
CJNE R3,#03,LOOP1
SJMP LOOP0

LOOP1:
MOV A,#0FEH
MOV P1,A
MOV R4,#00H
ACALL DELAY
LOOP11:
ADD A,ACC
MOV P1,A
INC R4 ;计算是否满8次
ACALL DELAY
CJNE R3,#02,LOOP2
CJNE R4,#08H,LOOP11 ;不满8次,继续逐个点亮
SJMP LOOP1 ;满8次,重新从全灭开始逐个点亮

LOOP2:
MOV A,#0FH
MOV P1,A
ACALL DELAY
CPL A
MOV P1,A
ACALL DELAY
CJNE R3,#01,RELOAD
SJMP LOOP2

INTERRUPT1:
DEC R3 ;R3减一
RETI

DELAY: MOV R0,#0AH
DELAY1: MOV R1,#00H
DELAY2: MOV R2,#0C3H
DJNZ R2,$
DJNZ R1,DELAY2
DJNZ R0,DELAY1
RET

END