华电电气微机原理综合交通灯设计.docx
《华电电气微机原理综合交通灯设计.docx》由会员分享,可在线阅读,更多相关《华电电气微机原理综合交通灯设计.docx(47页珍藏版)》请在冰豆网上搜索。
华电电气微机原理综合交通灯设计
微机原理与接口技术实验报告
综合实验红绿灯仿真及实现
专业:
电力系班级:
电气1409
学号:
************姓名:
WAY
预习报告成绩实验成绩:
实验日期及时间:
(1)2017/5/13机位号:
(2)2017/5/20机位号:
B11
*******
综合实验项目基本要求(任务书):
设计实现交通信号灯系统。
设A车道与B车道交叉组成十字路口,A是主道,B是支道,直接对车辆进行交通管理,基本要求如下:
(1)用发光二极管模拟交通信号灯;
(2)正常情况下,A、B两车道轮流放行,A车道放行绿灯亮,其中3秒用于警告(黄灯亮);B车道放行绿灯亮,其中3秒用于警告(黄灯亮);A、B车道放行、禁止通行时间自己定义;
(3)有紧急车辆通过时,按下某开关使A、B车道均为红灯,紧急情况解除后,恢复正常控制。
注意:
除上述基本要求外,其它各种功能,可以自由发挥。
一实验一:
在Proteus仿真实现交通信号灯系统。
(1)交通信号灯系统设计描述(实现内容)
用发光二极管模拟交通信号灯;
正常情况下,A、B两车道轮流放行。
A车道绿灯放行,直行箭头亮,人行道红灯亮,B道红灯亮,直行红箭头亮,人行道绿灯亮延时10秒;A车道绿灯闪烁两次B车道红灯禁止放行,然后A车道延时3秒用于警告(黄灯亮);A车道红灯亮,A车道左转箭头亮,延时5秒;B车道绿灯,直行箭头亮,人行道红灯亮,A车道禁止放行红灯亮直行红箭头亮,人行道绿灯亮延时10秒,B车道绿灯闪烁2次,A车道禁止放行红灯亮,然后3秒用于警告(黄灯亮);B车道红灯亮,B车道左转箭头亮,延时5秒;恢复到初始状态.
有紧急车辆通过时,按下某开关使A、B车道均为红灯,紧急情况延时5秒;
A道有特种车辆通过时,按下某开关使A车道为绿灯B车道为红灯,延时5秒;
用数码管显示绿灯通行、黄灯等待时间;
(2)Proteus中实现原理图
下图为矢量图可以放大看
(3)源程序清单
;8253的端口地址
A1_PORTEQU220H;0#
B1_PORTEQU222H;1#
C1_PORTEQU224H;2#
CT1_PORTEQU226H;CONTROL
;8255#1端口地址
A_PORTEQU200H
B_PORTEQU202H
C_PORTEQU204H
CT_PORTEQU206H
;8255#2(A道LED)端口地址
A2_PORTEQU230H
B2_PORTEQU232H
C2_PORTEQU234H
CT2_PORTEQU236H
;8255#3(B道LED)端口地址
A3_PORTEQU228H
B3_PORTEQU22AH
C3_PORTEQU22CH
CT3_PORTEQU22EH
;8255#4(A、B道左转LED)端口地址
A4_PORTEQU238H
B4_PORTEQU23AH
C4_PORTEQU23CH
CT4_PORTEQU23EH
;8259A的端口地址
O_ADREQU212H;奇地址
E_ADREQU210H;偶地址
DATASSEGMENT
;七段码
ORG0F0000H
TABDB00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H,13H,14H,15H
AB_FLAGDB0;0表示A道,1表示B道
ORG6000H
;人行道段码表
ROW1DB01H,02H,04H,08H,10H,20H,40H,80H
CEL1DB0F7H,0F7H,0F7H,0F7H,0E7H,0DBH,0BDH,7EH
;箭头段码表
CEL2DB0E7H,0C3H,0A5H,66H,0E7H,0E7H,0E7H,0E7H
UNABLEDB7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EH
ALFTDB0F3H,0F9H,0H,79H,73H,7FH,7FH,7FH
DATASENDS
CODESEGMENTPUBLIC'CODE'
ASSUMECS:
CODE,DS:
DATAS
ORG2000H
START:
;Writeyourcodehere
PUSHDS
CLI
;8253计数器0的初始化
MOVAL,36H;控制字00110110B,计数器0,方式3,二进制
MOVDX,CT1_PORT
OUTDX,AL;送控制端口
;8253计数器1的初始化
MOVAL,70H;控制字01110000B,计数器1,方式0,二进制
MOVDX,CT1_PORT
OUTDX,AL;送控制端口
;8259A的初始化
;00010011,ICW1,边沿触发,无从片,写ICW4
MOVAL,13H
MOVDX,E_ADR;偶地址
OUTDX,AL
;ICW2,IR0中断向量码为08H
MOVAL,08H
MOVDX,O_ADR;奇地址
OUTDX,AL
MOVAL,0FH
MOVDX,O_ADR;奇地址
OUTDX,AL
;ICW4,CPU为80X86系列,非自动结束,无缓冲,全嵌套方式
MOVAL,01H
OUTDX,AL
MOVAL,7EH
OUTDX,AL;OCW1,只允许IR0开放
;中断向量表的初始化
MOVAX,0000H
MOVDS,AX
MOVSI,08H*4
MOVAX,OFFSETIR0
MOVBX,SEGIR0
MOV[SI],AX
MOV[SI+2],BX
;IR7中断向量
MOVSI,0FH*4
MOVAX,OFFSETIR7
MOVBX,SEGIR7
MOV[SI],AX
MOV[SI+2],BX
;8255#1初始化
MOVAL,88H;正定控制字1000,1000,方式0,A口输出,C口输入
MOVDX,CT_PORT
OUTDX,AL
;8255#2初始化
MOVAL,80H;正定控制字1000,1000,方式0,A口、B、C输出
MOVDX,CT2_PORT
OUTDX,AL
;8255#3初始化
MOVAL,80H;正定控制字1000,1000,方式0,A口、B、C输出
MOVDX,CT3_PORT
OUTDX,AL
;8255#4初始化
MOVAL,80H;正定控制字1000,1000,方式0,A口、B、C输出
MOVDX,CT4_PORT
OUTDX,AL
;A道绿灯,B道红灯,延时10s,默认是A道,即AB_FLAG=0
LP:
PUSHDS
CLI
STI;开中断
POPDS
MOVAL,0F3H
MOVDX,A_PORT;A道绿灯,B道红灯
OUTDX,AL
;延时10S
MOVCX,10
YS1:
CALLNORMALDELAY1S
LOOPYS1
;A道绿灯闪烁,B道红灯禁止,闪两次
MOVAL,0F7H
MOVDX,A_PORT;A道绿灯灭,B道红灯禁止,第一次
OUTDX,AL
CALLNORMALDELAY1S
MOVAL,0F3H
MOVDX,A_PORT;A道绿灯亮,B道红灯禁止,第一次
OUTDX,AL
CALLNORMALDELAY1S
MOVAL,0F7H
MOVDX,A_PORT;A道绿灯灭,B道红灯禁止,第二次
OUTDX,AL
CALLNORMALDELAY1S
MOVAL,0F3H
MOVDX,A_PORT;A道绿灯亮,B道红灯禁止,第二次
OUTDX,AL
CALLNORMALDELAY1S
;A道黄灯亮,B道红灯禁止,延时3s
MOVAL,0F5H
MOVDX,A_PORT;A道黄灯亮,B道红灯禁止
OUTDX,AL
;延时3S
MOVCX,3
YS2:
CALLNORMALDELAY1S
LOOPYS2
;A道直行红灯亮,左转绿灯,人行道红灯亮,B道红灯,延时5秒
MOVCX,5
AZZYS1:
CALLAZZDELAY1S
LOOPAZZYS1
;B道绿灯放行,A道红灯禁止,延时10s,修改标志为B道
MOVAL,AB_FLAG
INCAL
MOVAB_FLAG,AL
MOVAL,0DEH
MOVDX,A_PORT;B道绿灯放行,A道红灯禁止
OUTDX,AL
;延时10S程序
MOVCX,10
YS3:
CALLNORMALDELAY1SS
LOOPYS3
;B道绿灯闪烁,A道红灯禁止,闪两次
MOVAL,0FEH
MOVDX,A_PORT;B道绿灯灭,A道红灯禁止,第一次
OUTDX,AL
CALLNORMALDELAY1SS
MOVAL,0DEH
MOVDX,A_PORT;B道绿灯亮,A道红灯禁止,第一次
OUTDX,AL
CALLNORMALDELAY1SS
MOVAL,0FEH
MOVDX,A_PORT;B道绿灯灭,A道红灯禁止,第二次
OUTDX,AL
CALLNORMALDELAY1SS
MOVAL,0DEH
MOVDX,A_PORT;B道绿灯亮,A道红灯禁止,第二次
OUTDX,AL
CALLNORMALDELAY1SS
;B道黄灯亮,A道红灯禁止,延时3s
MOVAL,0EEH
MOVDX,A_PORT;B道黄灯亮,A道红灯禁止
OUTDX,AL
;延时3S程序
MOVCX,3
YS4:
CALLNORMALDELAY1SS
LOOPYS4
;B道直行红灯亮,左转绿灯,A道红灯,延时5秒
MOVCX,5
BZZYS1:
CALLBZZDELAY1S
LOOPBZZYS1
;修改标志为A道
MOVAL,AB_FLAG
DECAL
MOVAB_FLAG,AL
JMPLP
IR0PROC
CLI
PUSHCX
MOVAL,0F6H;A道B道红灯禁止
MOVDX,A_PORT
OUTDX,AL
MOVCX,6
ZDYS1:
CALLUNNORMALDELAY1S
LOOPZDYS1
POPCX
MOVAL,20H
MOVDX,E_ADR
OUTDX,AL;OCW2发结束命令EOI=1
TESTAB_FLAG,1
JZLIA
JMPLIB
LIA:
MOVAL,0F3H
MOVDX,A_PORT;A道绿灯,B道红灯
OUTDX,AL
JMPDONE
LIB:
MOVAL,0DEH
MOVDX,A_PORT;B道绿灯放行,A道红灯禁止
OUTDX,AL
DONE:
STI
IRET
IR0ENDP
IR7PROC
CLI
PUSHCX
MOVAL,0F3H;A道绿灯,B道红灯禁止
MOVDX,A_PORT
OUTDX,AL
MOVCX,5
ZDYS2:
CALLNORMALDELAY1S
LOOPZDYS2
POPCX
MOVAL,20H
MOVDX,E_ADR;偶地址
OUTDX,AL;OCW2发结束命令EOI=1
TESTAB_FLAG,1
JZLIA
JMPLIB
LIA:
MOVAL,0F3H
MOVDX,A_PORT;A道绿灯,B道红灯
OUTDX,AL
JMPDONE
LIB:
MOVAL,0DEH
MOVDX,A_PORT;B道绿灯放行,A道红灯禁止
OUTDX,AL
DONE:
STI
IRET
IR7ENDP
;1s精确延时
NORMALDELAY1SPROC
MOVAL,AB_FLAG
CMPAL,0
JZAPATH
;设置PC0为高
MOVAL,1
MOVDX,C_PORT
OUTDX,AL
JMPSEC_DIS
APATH:
;设置PC0为低
MOVAL,0
MOVDX,C_PORT
OUTDX,AL
SEC_DIS:
;保存所余秒数
MOVBX,CX
;从PB口输出剩余秒数到LED
LEASI,TAB
ADCBX,SI
MOVAX,DS:
[BX]
MOVDX,B_PORT
OUTDX,AL
;设置计数器0的初值
MOVAX,1000
MOVDX,A1_PORT
OUTDX,AL
MOVAL,AH
OUTDX,AL
;设置计数器1的初值
MOVAX,1000
MOVDX,B1_PORT
OUTDX,AL
MOVAL,AH
OUTDX,AL
;判断计数时间是否达到1s
PUSHSI
PUSHDI
PUSHBX
PUSHCX
N:
MOVCX,8
LEASI,ROW1
LEADI,CEL1
LEABX,CEL2
LOOP2:
MOVAL,[SI]
MOVDX,A2_PORT
OUTDX,AL
MOVAL,[BX]
MOVDX,C2_PORT
OUTDX,AL
MOVAL,[SI]
MOVDX,A2_PORT
OUTDX,AL
MOVAL,[DI]
MOVDX,B2_PORT
OUTDX,AL
INCSI
INCDI
INCBX
PUSHCX
MOVCX,150
LOOP$
POPCX
LOOPLOOP2
MOVDX,C_PORT
INAL,DX
ANDAL,80H
CMPAL,80H
JNZN
DONE1:
POPCX
POPBX
POPDI
POPSI
RET
NORMALDELAY1SENDP
NORMALDELAY1SSPROC
MOVAL,AB_FLAG
CMPAL,0
JZAPATH
;设置PC0为高
MOVAL,1
MOVDX,C_PORT
OUTDX,AL
JMPSEC_DIS
APATH:
;设置PC0为低
MOVAL,0
MOVDX,C_PORT
OUTDX,AL
SEC_DIS:
;保存所余秒数
MOVBX,CX
;从PB口输出剩余秒数到LED
LEASI,TAB
ADCBX,SI
MOVAX,DS:
[BX]
MOVDX,B_PORT
OUTDX,AL
;设置计数器0的初值
MOVAX,1000
MOVDX,A1_PORT
OUTDX,AL
MOVAL,AH
OUTDX,AL
;设置计数器1的初值
MOVAX,1000
MOVDX,B1_PORT
OUTDX,AL
MOVAL,AH
OUTDX,AL
;判断计数时间是否达到1s
PUSHSI
PUSHDI
PUSHBX
PUSHCX
N:
MOVCX,8
LEASI,ROW1
LEADI,CEL1
LEABX,CEL2
LOOP2:
MOVAL,[SI]
MOVDX,A3_PORT
OUTDX,AL
MOVAL,[BX]
MOVDX,C3_PORT
OUTDX,AL
MOVAL,[SI]
MOVDX,A3_PORT
OUTDX,AL
MOVAL,[DI]
MOVDX,B3_PORT
OUTDX,AL
INCSI
INCDI
INCBX
PUSHCX
MOVCX,150
LOOP$
POPCX
LOOPLOOP2
MOVDX,C_PORT
INAL,DX
ANDAL,80H
CMPAL,80H
JNZN
POPCX
POPBX
POPDI
POPSI
RET
NORMALDELAY1SSENDP
;中断1调用延时
UNNORMALDELAY1SPROC
MOVAL,AB_FLAG
CMPAL,0
JZAPATH
;设置PC0为高
MOVAL,1
MOVDX,C_PORT
OUTDX,AL
JMPSEC_DIS
APATH:
;设置PC0为低
MOVAL,0
MOVDX,C_PORT
OUTDX,AL
SEC_DIS:
;保存所余秒数
MOVBX,CX
;从PB口输出剩余秒数到LED
LEASI,TAB
ADCBX,SI
MOVAX,DS:
[BX]
MOVDX,B_PORT
OUTDX,AL
;设置计数器0的初值
MOVAX,1000
MOVDX,A1_PORT
OUTDX,AL
MOVAL,AH
OUTDX,AL
;设置计数器1的初值
MOVAX,1000
MOVDX,B1_PORT
OUTDX,AL
MOVAL,AH
OUTDX,AL
;判断计数时间是否达到1s
PUSHSI
PUSHDI
PUSHBX
PUSHCX
N:
MOVCX,8
LEASI,ROW1
LEADI,UNABLE
LEABX,UNABLE
LOOP2:
MOVAL,[SI]
MOVDX,A3_PORT
OUTDX,AL
MOVAL,[BX]
MOVDX,C3_PORT
OUTDX,AL
MOVAL,[SI]
MOVDX,A3_PORT
OUTDX,AL
MOVAL,[DI]
MOVDX,B3_PORT
OUTDX,AL
INCSI
INCDI
INCBX
PUSHCX
MOVCX,150
LOOP$
POPCX
LOOPLOOP2
MOVDX,C_PORT
INAL,DX
ANDAL,80H
CMPAL,80H
JNZN
POPCX
POPBX
POPDI
POPSI
RET
UNNORMALDELAY1SENDP
AZZDELAY1SPROC
MOVAL,0DEH
MOVDX,A_PORT;B道绿灯放行,A道红灯禁止
OUTDX,AL
MOVAL,AB_FLAG
CMPAL,0
JZAPATH
;设置PC0为高
MOVAL,1
MOVDX,C_PORT
OUTDX,AL
JMPSEC_DIS
APATH:
;设置PC0为低
MOVAL,0
MOVDX,C_PORT
OUTDX,AL
SEC_DIS:
;保存所余秒数
MOVBX,CX
;从PB口输出剩余秒数到LED
LEASI,TAB
ADCBX,SI
MOVAX,DS:
[BX]
MOVDX,B_PORT
OUTDX,AL
;设置计数器0的初值
MOVAX,1000
MOVDX,A1_PORT
OUTDX,AL
MOVAL,AH
OUTDX,AL
;设置计数器1的初值
MOVAX,1000
MOVDX,B1_PORT
OUTDX,AL
MOVAL,AH
OUTDX,AL
;判断计数时间是否达到1s
PUSHSI
PUSHDI
PUSHBX
PUSHCX
N:
MOVCX,8
LEASI,ROW1
LEADI,ALFT
LEABX,UNABLE
LOOP2:
MOVAL,[SI]
MOVDX,A4_PORT
OUTDX,AL
MOVAL,[BX]
MOVDX,C4_PORT
OUTDX,AL
MOVAL,[SI]
MOVDX,A4_PORT
OUTDX,AL
MOVAL,[DI]
MOVDX,B4_PORT
OUTDX,AL
INCSI
INCDI
INCBX
PUSHCX
MOVCX,150
LOOP$
POPCX
LOOPLOOP2
MOVDX,C_PORT
INAL,DX
ANDAL,80H
CMPAL,80H
JNZN
POPCX
POPBX
POPDI
POPSI
RET
AZZDELAY1SENDP
BZZDELAY1SPROC
MOVAL,0F3H
MOVDX,A_PORT;A道绿灯,B道红灯
OUTDX,AL
MOVAL,AB_FLAG
CMPAL,0
JZAPATH
;设置PC0为高
MOVAL,1
MOVDX,C_PORT
OUTDX,AL
JMPSEC_DIS
APATH:
;设置PC0为低
MOVAL,0
MOVDX,C_PORT
OUTDX,AL
SEC_DIS:
;保存所余秒数
MOVBX,CX
;从PB口输出剩余秒数到LED
LEASI,TAB
ADCBX,SI
MOVAX,DS:
[BX]
MOVDX,B_PORT
OUTDX,AL
;设置计数器0的初值
MOVAX,1000
MOVDX,A1_PORT
OUTDX,AL
MOVAL,AH
OUTDX,AL
;设置计数器1的初值
MOVAX,1000
MOVDX,B1_PORT