实验内容
在 Proteus 环境下搭建如下图所示的电路图:

图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。
流程图

实验过程
① 根据上述实验内容,在 Proteus 环境下建立如上电路图所示原理图,并将其保
存为 expandIO_self.DSN 文件。
② 根据编程思路和流程图编写控制源程序,将其保存为 expandIO_self.asm。
③ 将源程序添加到 U1 中,并构造(build)该程序。
④ 执行仿真过程观察各个方向的交通信号灯指示,查看程序功能是否正确。
实验截图:
0s~10s:
南北绿灯亮,东西红灯亮

10s~12s:
南北黄灯亮,东西红灯亮

12~22s:
南北红灯亮,东西绿灯亮

22~24s:
南北红灯亮,东西黄灯亮

循环上面四种情况。
实验源程序
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
|