标题:
[微机]建立在8086CPU 8253与8255芯片之上的交通灯控制系统 Proteus仿真
[打印本页]
作者:
likesnow
时间:
2025-1-9 02:39
标题:
[微机]建立在8086CPU 8253与8255芯片之上的交通灯控制系统 Proteus仿真
这是我上个月做的单片机交通灯设计,用了一个星期的时间,
附件里面包含交通灯的单片机源代码,
和proteus(proteus)仿真工程文件以及设计的文档都是自己原创的,
请大家多多指教
最终呈现的结果是:通行时间30s,间隔时间 3s,在间隔时间里黄灯闪烁3次每0.5s闪烁一次
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei截图_20250109023638.png
(607.77 KB, 下载次数: 0)
下载附件
proteus原理图
2025-1-9 02:36 上传
单片机源程序如下:
;8255的地址
PA EQU 08H
PB EQU 0AH
PC EQU 0CH
CONW EQU 0EH
;8253的地址
AD82530 EQU 10H
AD82531 EQU 12H
AD82532 EQU 14H
AD8253CONW EQU 16H
;============================
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
;============================
DATA SEGMENT
;延时
ONE DB 6 ;灯组1延时
TWO_1 DB 1 ;灯组2亮延时
TWO_2 DB 1 ;灯组2灭延时
THREE DB 6 ;灯组3延时
FOUR_1 DB 1 ;灯组4亮延时
FOUR_2 DB 1 ;灯组4灭延时
;闪烁次数
C2 DB 2 ;闪烁3次
C4 DB 2
;灯组定义
TF1 BYTE 081h ;第一组灯
TF2 BYTE 082h ;第二组灯亮(黄灯亮)
TF3 BYTE 080h ;第二组灯灭(黄灯灭)
TF4 BYTE 024h ;第三组灯
TF5 BYTE 044h ;第四组灯亮(黄灯亮)
TF6 BYTE 004h ;第四组灯灭(黄灯灭)
DATA ENDS
;=============================
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
PUSH DS
MOV AX, DATA
MOV DS, AX
;=================
;设置中断向量8253
CLI
MOV AX, 0
MOV ES, AX
MOV SI, 08H
MOV AX, OFFSET TIME_INT
MOV ES:[SI], AX
MOV AX, CS
MOV ES:[SI+2], AX
;=================
;初始化8255A
MOV AL, 80H
OUT CONW, AL
;初始化8253
MOV AL, 36H
OUT AD8253CONW, AL
MOV AX, 32500 ;计数初值,0.5s
OUT AD82530, AL
MOV AL, AH
OUT AD82530, AL
;===============
W:
JMP W ;循环等待中断
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;第一组灯判断
DENG1: MOV AL, ONE
CMP AL, 0 ;中断判断
JNE DENG1ON ;跳转第一组灯
JE DENG2 ;跳转第二组灯判断
DENG1ON:
DEC ONE ;定时减1
MOV DX,PC
MOV AL,TF1 ;第一组灯亮
OUT DX,AL
RET
;第二组灯判断
DENG2:
;第二组灯亮判断
DENG2_1:
MOV AL, TWO_1
CMP AL, 0 ;中断判断
JNE DENG2ON ;跳转第二组灯亮
JE DENG2_2 ;跳转第二组灯灭判断
DENG2ON:
DEC TWO_1 ;定时减1
MOV DX,PC
MOV AL,TF2 ;第二组灯亮
OUT DX,AL
RET
;第二组灯暗判断
DENG2_2:
MOV AL, TWO_2
CMP AL, 0 ;中断判断
JNE DENG2OFF ;跳转第二组灯灭
CMP C2,0 ;判断闪烁次数
JE DENG3 ;跳转第三组灯判断
DENG2OFF:
DEC TWO_2
MOV DX,PC
MOV AL,TF3 ;第二组灯灭
OUT DX,AL
CMP C2,0 ;闪烁次数未到
JNE RE_DENG2 ;重置第二组灯
RET
;第二组灯重置
RE_DENG2:
DEC C2
MOV AL,1
MOV TWO_1,AL
MOV TWO_2,AL
RET
;第三组灯判断
DENG3: MOV AL, THREE
CMP AL, 0 ;中断判断
JNE DENG3ON ;跳转第三组灯
JE DENG4 ;跳转第四组灯
DENG3ON:
DEC THREE
MOV DX,PC
MOV AL,TF4 ;第三组灯亮
OUT DX,AL
RET
;第四组灯判断
DENG4:
DENG4_1:
MOV AL, FOUR_1
CMP AL, 0 ;中断判断
JNE DENG4ON ;跳转第四组灯亮
JE DENG4_2 ;跳转第四组灯灭判断
DENG4ON:
DEC FOUR_1
MOV DX,PC
MOV AL,TF5 ;第四组灯亮
OUT DX,AL
RET
DENG4_2:
MOV AL, FOUR_2
CMP AL, 0 ;中断判断
JNE DENG4OFF ;跳转第四组灯灭
CMP C4,0 ;判断闪烁次数
JE RE_ALL ;重置所有灯组
DENG4OFF:
DEC FOUR_2
MOV DX,PC
MOV AL,TF6 ;第四组灯灭
OUT DX,AL
CMP C4,0 ;闪烁次数未到
JNE RE_DENG4 ;重置第四组灯
RET
;重置第四组灯
RE_DENG4:
DEC C4
MOV AL,1
MOV FOUR_1,AL
MOV FOUR_2,AL
RET
;重置所有灯组
RE_ALL:
MOV AL,6
MOV ONE,AL
MOV THREE,AL
MOV AL,2
MOV C2,AL
MOV C4,AL
MOV AL,1
MOV TWO_1,AL
MOV TWO_2,AL
MOV FOUR_1,AL
MOV FOUR_2,AL
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME_INT: ;定时器中断处理函数
CALL DENG1
IRET
CODE ENDS
END START
复制代码
仿真工程:
交通灯控制系统.rar
(26.93 KB, 下载次数: 0)
2025-1-9 02:38 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1