实验内容

在 Proteus 环境下搭建如下图所示的电路图:

img

图3.2.1 电路原理图

实验功能为:

仿真实现交通信号灯控制功能。

控制顺序为:

① 南北绿灯亮,同时东西红灯亮 10s;

② 南北黄灯亮,同时东西红灯亮 2s;

③ 南北红灯亮,同时东西绿灯亮 10s;

④ 东西黄灯亮,同时南北红灯亮 2s;

⑤ 重复①~④。

编程思路

①进行初始化工作,包括设置堆栈指针 SP,将两个 373 的输出口所有位均设置为 1,使所有发光二极管全部熄灭。

②分析两个 373 的地址:

假定所有无关地址均定义为 1,那么 U4的锁存地址为:#0FE00H,U5的锁存地址为:#0FD00H。

③分析 4 个状态下两个 373 的输出数据值:

假定“南北绿灯亮,同时东西红灯亮”为状态 1,即:STATUS1;“南北黄灯亮,同时东西红灯亮”为状态 2,即:STATUS2;“南北红灯亮,同时东西绿灯亮”为状态 3,即:STATUS3;“东西黄灯亮,同时南北红灯亮”为状态 4,即:STATUS4。

流程图

image-20220212123922457

实验过程

① 根据上述实验内容,在 Proteus 环境下建立如上电路图所示原理图,并将其保

存为 expandIO_self.DSN 文件。

② 根据编程思路和流程图编写控制源程序,将其保存为 expandIO_self.asm。

③ 将源程序添加到 U1 中,并构造(build)该程序。

④ 执行仿真过程观察各个方向的交通信号灯指示,查看程序功能是否正确。

实验截图:

0s~10s:

南北绿灯亮,东西红灯亮

img

10s~12s:

南北黄灯亮,东西红灯亮

img

12~22s:

南北红灯亮,东西绿灯亮

img

22~24s:

南北红灯亮,东西黄灯亮

img

循环上面四种情况。

实验源程序

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
62
63
64
65
66
67
68
69
    ORG 0000H
   AJMP START

   ORG 0030H
START:
   MOV SP,#60H
   MOV DPTR,#0FE00H ;使DPTR指向U4锁存器
   MOV A,#0FFH
   MOVX @DPTR,A
MOV DPTR,#0FD00H ;使DPTR指向U5锁存器
   MOVX @DPTR,A
   ;以上为对锁存器的初始化

STATUS1:
   MOV A,#0CH
   MOVX @DPTR,A         ;此时DPTR指向U5,控制绿灯
   MOV DPTR,#0FE00H     ;U4高四位控制黄灯,低四位控制红灯
   MOV A,#0F3H
   MOVX @DPTR,A
   MOV R2,#10             ;R2 = 10,为下面延时10s做准备
DELAY1:    
   CALL DELAY
   DJNZ R2,DELAY1

STATUS2:
   MOV A,#0C3H
   MOVX @DPTR,A       ;此时DPTR指向U4,控制黄灯和红灯
   MOV DPTR,#0FD00H       ;使DPTR指向U5控制绿灯
   MOV A,#0FH
   MOVX @DPTR,A    
   MOV R2,#2               ;R2 = 2,为下面延时2s做准备
DELAY2:
   CALL DELAY
   DJNZ R2,DELAY2

STATUS3:
   MOV A,#03H
   MOVX @DPTR,A         ;此时DPTR指向U5,控制绿灯
   MOV DPTR,#0FE00H       ;使DPTR指向U4,控制黄灯和红灯
   MOV A,#0FCH
   MOVX @DPTR,A
   MOV R2,#10             ;R2 = 10,为下面延时10s做准备
DELAY3:
   CALL DELAY
   DJNZ R2,DELAY3

STATUS4:
   MOV A,#3CH
   MOVX @DPTR,A         ;此时DPTR指向U4,控制黄灯和红灯
   MOV DPTR,#0FD00H       ;使DPTR指向U5,控制绿灯
   MOV A,#0FH
   MOVX @DPTR,A        
   MOV R2,#2               ;R2 = 2,为下面延时2s做准备
DELAY4:
   CALL DELAY
   DJNZ R2,DELAY4
AJMP STATUS1

DELAY:  
   MOV R7,#100
DL1:
   MOV R6,#100
DL2:
   MOV R5,#48
   DJNZ R5,$
   DJNZ R6,DL2
   DJNZ R7,DL1
   RET
END