微机基础原理课设交通信号灯模拟控制系统的设计.doc
-/成绩 南京工程学院通信工程学院课程设计说明书(论文)题 目 交通信号灯模拟控制系统的设计 课 程 名 称 微机原理与接口技术 专 业 班 级 学 生 姓 名 学 号 设 计 地 点 指 导 教 师 设计起止时间:2013年12月23日至2013年12月27日目录1、设计目的.22、设计内容及要求.23、设计原理.23.1、电路接线方案.23.2、定时问题.33.3、工作状态.34、实验元件解释.34.1、 可编程并行通信接口8255A. .34.2、可编程计数器/定时器8253.45、程序流程图及说明.55.1、基本和中级要求的流程图.55.2、高级要求的流程图.65.3、流程图说明.76、实验源代码及解释.77、实际接线图.138、运行结果.139、设计心得与体会.1610、主要参考文献.161、设计目的通过课程设计加深理解课堂教学内容,掌握微机原理的基本应用方法。通过实验熟悉微机基本接口芯片的外型、引脚、编程结构,掌握汇编语言程序设计和微机基本接口电路的设计、应用方法,做到理论联系实际。2、设计内容及要求2.2.1功能要求:1) 假设在一个A道(东西方向)和B道(南北方向)交叉的十字路口安装有自动信号灯。当A道和B道均有车辆要求通过时,A道和B道轮流放行。A道放行7秒钟,B道再放行5秒钟,依次轮流。绿灯转换红灯时黄灯亮1秒钟。2) 一道有车,另一道无车时(实验时用开关K5和K6控制),交通控制系统能立即让有车道放行。3) 有紧急车辆要求通过时,系统要能禁止普通车辆通过,A、B道均为红灯,紧急车由K7开关模拟,有紧急车时另有一红灯闪烁。2.2.2难度要求:4) 基本要求:采用8255输出控制信号灯,8255输入K5、K6、K7控制开关信号,用循环程序软件定时实现功能要求;(60分)5) 中级要求:采用8255输出控制信号灯,8255输入K5、K6、K7控制开关信号,用8253硬件定时,软件查询方式实现功能要求;(80分)6) 高级要求:在中级要求的基础上,增加用8255输出驱动LED数码显示器显示绿灯倒计时秒数,黄灯时不显示时间。(100分)3、设计原理设计任务中的A道代表东西方向,B道代表南北方向。3.1、电路接线方案: 交通信号灯由实验仪的LED发光二极管模拟,由8255-PA输出控制:见下表。带时间显示的交通信号灯模拟控制系统 8255A输入/输出信号一览表(供参考)8255-PB输出方式PCH输入方式8255-PA输出方式PCL输出方式引脚输出信号引脚输入信号引脚输出信号引脚输出信号PB7驱动数码管字型PC7K7PA7紧急车辆闪光PB6PC6K6PA6东西红灯PB5PC5K5PA5东西黄灯PB4PC48253-OUT2PA4东西绿灯PB3PA3PC3PB2PA2南北红灯PC2PB1PA1南北黄灯PC1PB0PA0南北绿灯PC0数码管的位码选择注:1)、8255-PA输出方式可根据实验设备红绿黄灯具体位置改变 2)、采用软件延时,则8255的PC4不用接8253-OUT2。数码管的位码选择 3.2、定时问题用8253#2工作方式0进行500ms定时,CLK2接125kHz时钟信号,GATE2接高电平,OUT2接8255-PC4。主程序通过查询8255-PC4的状态,获知准确的定时信息。也可以采用软件延时,500ms延时子程序参见实验一。3.3、工作状态根据设计任务功能要求,依K5、K6、K7的状态分为四种工作状态:状态0:K5、K6、K7均断开(1电平)或K5、K6均闭合K7断开,A、B道交替通行;状态1:仅K5闭合,A道有车、B道无车;状态2:仅K6闭合,A道无车,B道有车;K5和K6均闭合,A、B道都有车,A、B道交替通行;状态3:K7闭合,有紧急车辆通行。4、实验元件及解释4.1、 可编程并行通信接口8255A8255A的端口地址设为A口0F000H,B口0F001H,C口0F002H,寄存器端口0F003H将LED 灯的D0D7分别与8255A的PC0PC7相连,具体连接如下:D01路口绿灯,D41路口红灯。D12路口绿灯,D52路口红灯。D23路口绿灯,D63路口红灯。D34路口绿灯,D74路口红灯。其中:1、3路口魏东西方向,2,4路口为南北方向。系统中的8255A电路如图(B4区:8255A电路)4.2、可编程计数器/定时器8253用LED(发光二极管)模拟信号灯,8255A实现对信号灯的控制(PC0PC6分别接D0D6),8253的计数器2实现基本单位定时(如10ms)信号的输出;再用8255A的PA口查询定时信号的变化,并统计脉冲数,以实现3min、5s和1s的定时实验系统中8253计数器2的CLK2可接OPCLK,频率为1.19318MHz,GATE2接+VCC,OUT2接8255A的PA0。定时可采用软硬件香结合的方式实现。系统中8253电路如图(C5区:8253电路)8253端口地址:0#计数器0B000H,1#计数器0B001H,2#计数器0B002H,控制寄存器0B003H。5、程序流程图及说明5.1、基本和中级要求的流程图:5.2、高级要求的流程图5.3、流程图说明流程图1设计思想:1、 主程序每0.5秒循环一次,每次查询三个开关状态,及时响应开关状态的变化。其中CNT0和CNT3分别用于记录状态0和状态3工作进程的进程计数器,可以用寄存器或内存变量实现。2、 常用的工作状态0是A、B道交替通行,一个周期用时14秒。用CNT0以0.5秒为单位进行加1计数,从0到27循环计数,CNT0/2就可知本周期进行到第几秒了。根据设计任务功能要求,第0秒,A道红灯、B道黄灯;第17秒,A道绿灯、B道红灯;第8秒,A道黄灯、B道红灯;第913秒,A道红灯、B道绿灯。3、 工作状态3中,CNT3只有2种状态(0和0FFH),用于控制紧急车辆的灯光闪烁。4、 时间显示采用实验仪的数码管显示。只用一个数码显示器显示绿灯通行倒计时,A道显示数=8-CNT0/2,B道显示数=14-CNT0/2。参考流程图2。如果用2个数码显示器分别显示A道、B道的倒计时,则需要用到动态显示扫描技术,难度较大,定为加分项目。在500ms延时子程序中循环调用动态显示扫描子程序,定时器的定时周期应缩短到5ms。参考流程图3。此功能难度较大,定为加分项目。2个数码管的位码选择(低电平有效)有8255的PC3、PC0来确定,接线到数码管选择脚接口JP41(注意JP41的接插方法:JP41只接插一半,用PCL接JP41的1-4引脚。如果PCL与JP41完全连接,PC4对应位会显示倒计时数码)。显示内容由8255的B口接线到数码管段码接口JP42。6、实验源代码及解释源程序如下: .MODEL TINYCOM_ADDR EQU 0B003H ;8253控制寄存器端口地址T0_ADDR EQU 0B000H ;计数器0T1_ADDR EQU 0B001H ;计数器1T2_ADDR EQU 0B002H ;计数器2COM_ADD EQU 0F003H ;8255控制寄存器端口地址PA_ADD EQU 0F000H ;PA口PB_ADD EQU 0F001H ;PB口PC_ADD EQU 0F002H ;PC口.STACK 300.DATALED_DATA DB 10111101B ;东西红灯,南北黄灯 DB 11101011B ;东西绿灯,南北红灯 DB 11011011B ;东西黄灯,南北红灯 DB 10111110B ;东西红灯,南北绿灯 DB 00111011B ;东西红灯,南北黄灯,紧急车辆闪光亮 DB 10111011B ;东西红灯,南北黄灯,紧急车辆闪光灭SHUMA DB 01111111B ;0 DB 00000110B ;1 DB 01011011B ;2 DB 01001111B ;3 DB 01100110B ;4 DB 01101101B ;5 DB 01111101B ;6 DB 00000111B ;7 DB 01111111B ;8CNT0 DB ? ;定义一个字节变量,初始值不定CNT3 DB ?.CODESTART: MOV AX,DATA ;AX=0040H MOV DS,AX MOV DX,COM_ADD ;8255初始化 MOV AL,88H ;AL=1000 1000,A口方式0输出,B口方式0输出,C口高四位输入,低四位输出 OUT DX,AL ;把AL中的内容送入DX端口 MOV DX,COM_ADDR ;8253初始化 MOV AL,0B0H ;AL=1011 0000,通道2,先读/写寄存器低字节,后读/写高字节 OUT DX,AL ;把AL中的内容送入DX端口 MOV DX,PC_ADD ;位码选择 IN AL,DX ;把DX端口的数据送入AL AND AL,0FEH ;逻辑与指令,使最低位清零 OR AL,01H ;逻辑或指令,使 最低位置1 OUT DX,AL ;把AL中的内容送入DX端口 MOV CNT0,0 ;CNT0=0 MOV CNT3,0 ;CNT3=0LP: CALL DL500ms ;调用DL500ms的指令 MOV DX,PC_ADD ;将PC端口地址送给DX IN AL,DX ;把DX端口的数据送入AL TEST AL,80H ;1000 0000 PC7 检查AL的D7=1? JZ K7 ;ZF=1,转移 JMP JMP1 ;无条件转JMP1K7: MOVCH,CNT3 ;紧急情况 CMPCH,0 ;比较CH-0 JZRRS ;ZF=1则转移RRM: MOVAL,5 ;AL=0005H XLAT ;AX=BBH ;Red Red Dark MOVDX,PA_ADD ;DX=0F000H OUTDX,AL ;将AL的值写入DX端口 JMPLAST0 ;跳转到JMP1RRS: MOVAL,4 ;AL=0004H XLAT ;AX=3BH ;Red Red Light MOVDX,PA_ADD ;DX=0F000H OUTDX,AL ;将AL的值送入DX端口 CALLDL500ms ;调用DL500ms指令 MOVAL,5 ;AL=0005H XLAT ;AX=BBH ;Red Red Dark MOVDX,PA_ADD ;DX=0F000H OUTDX,AL ;将AL的值送入DX端口LAST0: MOVDX,PB_ADD ;DX=0F001H MOVAL,00H ;AL=00H OUTDX,AL ;将AL的值写入DX端口 XORCH,0FFH ;异或指令,使操作数的某些位保留(与“0异或”)使某些位取反(与“1异或”) MOVCNT3,CH ;CH=0FFH MOVCNT0,0 ;CNT0=0 JMPLP ;跳转到LP指令JMP1: MOVDX,PC_ADD ;DX=0F002H INAL,DX ;将DX端口的内容赋值给AL TESTAL,20H ;检测(0010 0000) PC5 JNZJMP2 ;ZF=0,转移 MOVDX,PC_ADD ;DX=0F002H INAL,DX ;将DX端口的内容赋值给AL TESTAL,40H ;检测(0100 0000) PC6 JNZK5 ;ZF=0,转移 JMPJMP3 ;无条件跳转JMP3指令K5: MOVAL,1 ;AL=0001XLAT ;00EBH MOVDX,PA_ADD ;DX=0F000H OUTDX,AL ;将AL的值送入DX端口 MOVDX,PB_ADD ;DX=0F001H MOVAL,00H ;AL=00H OUTDX,AL ;将AL的值送入DX端口 MOVCNT0,0 ;CNT0=0 MOVCNT3,0 ;CNT3=0 JMPLP ;无条件跳转LPJMP2: MOVDX,PC_ADD ;DX=0F002H INAL,DX ;将DX端口中的内容赋值给AL TESTAL,40H ;检测(0100 0000) PC6 JZK6 ;ZF=1,则转移 JMPJMP3 ;无条件转移JMP3K6: MOVAL,3 ;AL=0003 XLAT ;DBH MOVDX,PA_ADD ;DX=0F000H OUTDX,AL ;将AL的值送入DX端口 MOVDX,PB_ADD ;DX=0F001H MOVAL,00H ;AL=00H OUTDX,AL ;将AL的值送入DX端口 MOVCNT0,0 ;CNT0=0 MOVCNT3,0 ;CNT3=0 JMPLP ;无条件跳转LP指令LP1: JMPLP ;无条件跳转LP指令JMP3: MOVCNT3,0 ;CNT3=0 MOVCH,CNT0 ;CH=CNT0 SHRCH,1 ;CH=CNT0/2 ,CH右移一位 LEABX,LED_Data ;取源操作地址的偏移量,并把它送到目的操作数所在单元 CMPCH,0 ;比较CH-0 JZRY ;ZF=1,相等则转移 CMPCH,8 ;定时8s JBGR ;CF=1,低于则转移 CMPCH,8 ;定时8s JZYR ;ZF=1,相等则转移 JMPRG ;无条件转移RGRG: MOV AL,3 ;AL=0003 Red Green XLAT ;BEH MOV DX,PA_ADD ;DX=0F000H OUT DX,AL ;将AL的值送入DX端口 PUSH BX ;51S倒计时 LEA BX,SHUMA ;转换字形码 MOV AL,14 SUB AL,CH ;AL=AL-CH/2 XLAT ;表转换 MOV DX,PB_ADD OUT DX,AL POP BX ;显示倒计时LAST: INC CNT0 ;指向下一个元素 CMP CNT0,28 ;一个计时周期28s JNZ LP1 ;ZF=0,则转移 MOV CNT0,0 ;CNT0=0 JMP LP1 ;无条件转移LP1RY: MOV AL,0 ;AL=0000 Red Yellow XLAT ;表转换 MOV DX,PA_ADD ;DX=0F000H OUT DX,AL ;将AL的值送入DX端口 MOV DX,PB_ADD ;DX=0F001H MOV AL,00H ;AL=00H OUT DX,AL ;将AL的值送入DX端口 JMP LAST ;无条件转LAST指令GR: MOV AL,1 ;AL=0001 Green Red XLAT ;表转换 MOV DX,PA_ADD ;AX=0F000H OUT DX,AL ;将AL的值送入DX端口 PUSH BX ;71s倒计时 LEA BX,SHUMA ;转换字形码 MOV DX,PB_ADD ;DX=OF001H MOV AL,8 ;AL=0008 SUB AL,CH ;AL=AL-CH/2 XLAT ;表转换 BDH MOV DX,PB_ADD ;DX=0F001H OUT DX,AL ;将AL的值送入DX端口 POP BX ;显示计时 JMP LAST ;无条件转移LAST指令YR: MOV AL,2 ;AL=0002 XLAT ;表转换 EBH Yello Red MOV DX,PA_ADD ;DX=0F000H OUT DX,AL ;将AL的值送入DX端口 MOV DX,PB_ADD ;DX=0F001H MOV AL,00H ;AL=0000 OUT DX,AL ;将AL的值送入DX端口 JMP LAST ;无条件转移LAST指令DL500ms: PROC NEAR MOV DX,T2_ADDR MOV AL,24H ;62500=F424H OUT DX,AL ;将AL的值送入DX端口 MOV AL,0F4H ;AL=0F4H OUT DX,AL ;将AL的值送入DX端口DELAY: MOV DX,PC_ADD ;DX=0F002H IN AL,DX ;0001 0000 PC4OUT2 TEST AL,10H ;查AL=10H? JZ DELAY ;ZF=1 ,则转移 RET DL500ms ENDP END START ;汇编结束7、实际接线图8、运行结果当系统工作于状态1时,A、B道交替通行当系统工作于状态2时,仅K5闭合,A道有车,B道无车:当系统工作于状态3时,仅K6闭合,A道无车,B道有车:当系统工作于状态4时,K7闭合,有紧急车辆通行:9、设计心得及体会为期一周的课程设计在不知不觉中已经结束了,短短的几天,让我重拾课本中关于并行通信接口8255A和8253计数器/定时器的原理及其应用,抛开我们应该掌握的知识和技能,我还明白了一些做人的道理,让我受益匪浅。验收的时候,老师每个人都看了一遍,第二遍的时候,老师让我们自己选择是否留下来答辩,这个时候,我矛盾了,因为老师说,在答辩的过程中,一旦发现你什么都不会,那这次的课程设计就可能不及格。当时,我的自卑感来作祟了,因为,我觉得自己比不上那些留下来答辩的人,也许有这么几个很水的人留下来浑水摸鱼的,在这方面我很佩服他们。也许就是分分钟的选择吧。老师问留下来答辩的人的问题的时候,我听了两个,我也都会。为了逃避自己当时已经后悔了的事实,我很快逃走了。事后,我反复思考这件事,我知道,人不能盲目地自卑或者自信。这次的教训深深地警醒着我,我!必须相信自己!10、主要参考文献1 李干林. 微机原理及接口技术实验指导书M .北京:北京大学出版社,2010年8月2 周荷琴 冯焕清. 微型计算机原理与接口技术(第5版)中国科学技术大学出版社,2013年1月
收藏
- 资源描述:
-
-/
成绩
南京工程学院
通信工程学院
课程设计说明书(论文)
题 目 交通信号灯模拟控制系统的设计
课 程 名 称 微机原理与接口技术
专 业
班 级
学 生 姓 名
学 号
设 计 地 点
指 导 教 师
设计起止时间:2013年12月23日至2013年12月27日
目录
1、设计目的……………………………………………………………………….2
2、设计内容及要求……………………………………………………………….2
3、设计原理……………………………………………………………………….2
3.1、电路接线方案………………………………………………………………...……...…2
3.2、定时问题………………………………………………………………………….....….3
3.3、工作状态……………………………………………………………………...…….…..3
4、实验元件解释……………………………………………..……………………3
4.1、 可编程并行通信接口8255A…………………………………….……………....... ...3
4.2、可编程计数器/定时器8253…………………………………………………………....4
5、程序流程图及说明…………………………………………..………………....5
5.1、基本和中级要求的流程图………………………………………………..……………5
5.2、高级要求的流程图……………………………………………………………………..6
5.3、流程图说明………………………………………………………………….………….7
6、实验源代码及解释………………………………….………………….…...…7
7、实际接线图……………………………………………………..….………….13
8、运行结果………………………………………………………….……..…….13
9、设计心得与体会…………………………..………………….……………….16
10、主要参考文献………………………………………………………..………16
1、设计目的
通过课程设计加深理解课堂教学内容,掌握微机原理的基本应用方法。通过实验熟悉微机基本接口芯片的外型、引脚、编程结构,掌握汇编语言程序设计和微机基本接口电路的设计、应用方法,做到理论联系实际。
2、设计内容及要求
2.2.1功能要求:
1) 假设在一个A道(东西方向)和B道(南北方向)交叉的十字路口安装有自动信号灯。当A道和B道均有车辆要求通过时,A道和B道轮流放行。A道放行7秒钟,B道再放行5秒钟,依次轮流。绿灯转换红灯时黄灯亮1秒钟。
2) 一道有车,另一道无车时(实验时用开关K5和K6控制),交通控制系统能立即让有车道放行。
3) 有紧急车辆要求通过时,系统要能禁止普通车辆通过,A、B道均为红灯,紧急车由K7开关模拟,有紧急车时另有一红灯闪烁。
2.2.2难度要求:
4) 基本要求:采用8255输出控制信号灯,8255输入K5、K6、K7控制开关信号,用循环程序软件定时实现功能要求;(60分)
5) 中级要求:采用8255输出控制信号灯,8255输入K5、K6、K7控制开关信号,用8253硬件定时,软件查询方式实现功能要求;(80分)
6) 高级要求:在中级要求的基础上,增加用8255输出驱动LED数码显示器显示绿灯倒计时秒数,黄灯时不显示时间。(100分)
3、设计原理
设计任务中的A道代表东西方向,B道代表南北方向。
3.1、电路接线方案:
交通信号灯由实验仪的LED发光二极管模拟,由8255-PA输出控制:见下表。
带时间显示的交通信号灯模拟控制系统 8255A输入/输出信号一览表(供参考)
8255-PB输出方式
PCH输入方式
8255-PA输出方式
PCL输出方式
引脚
输出信号
引脚
输入信号
引脚
输出信号
引脚
输出信号
PB7
驱动数码管字型
PC7
K7
PA7
紧急车辆闪光
PB6
PC6
K6
PA6
东西红灯
PB5
PC5
K5
PA5
东西黄灯
PB4
PC4
8253-OUT2
PA4
东西绿灯
PB3
PA3
PC3
PB2
PA2
南北红灯
PC2
PB1
PA1
南北黄灯
PC1
PB0
PA0
南北绿灯
PC0
数码管的位码选择
注:1)、8255-PA输出方式可根据实验设备红绿黄灯具体位置改变
2)、采用软件延时,则8255的PC4不用接8253-OUT2。数码管的位码选择
3.2、定时问题
用8253#2工作方式0进行500ms定时,CLK2接125kHz时钟信号,GATE2接高电平,OUT2接8255-PC4。主程序通过查询8255-PC4的状态,获知准确的定时信息。也可以采用软件延时,500ms延时子程序参见实验一。
3.3、工作状态
根据设计任务功能要求,依K5、K6、K7的状态分为四种工作状态:状态0:K5、K6、K7均断开(1电平)或K5、K6均闭合K7断开,A、B道交替通行;状态1:仅K5闭合,A道有车、B道无车;状态2:仅K6闭合,A道无车,B道有车;K5和K6均闭合,A、B道都有车,A、B道交替通行;状态3:K7闭合,有紧急车辆通行。
4、实验元件及解释
4.1、 可编程并行通信接口8255A
8255A的端口地址设为A口—0F000H,B口—0F001H,C口—0F002H,寄存器端口—0F003H
将LED 灯的D0~D7分别与8255A的PC0~PC7相连,具体连接如下:
D0—1路口绿灯,D4—1路口红灯。
D1—2路口绿灯,D5—2路口红灯。
D2—3路口绿灯,D6—3路口红灯。
D3—4路口绿灯,D7—4路口红灯。
其中:1、3路口魏东西方向,2,4路口为南北方向。
系统中的8255A电路如图(B4区:8255A电路)
4.2、可编程计数器/定时器8253
用LED(发光二极管)模拟信号灯,8255A实现对信号灯的控制(PC0~PC6分别接D0~ D6),8253的计数器2实现基本单位定时(如10ms)信号的输出;再用8255A的PA口查询定时信号的变化,并统计脉冲数,以实现3min、5s和1s的定时
实验系统中8253计数器2的CLK2可接OPCLK,频率为1.19318MHz,GATE2接+VCC,OUT2接8255A的PA0。定时可采用软硬件香结合的方式实现。系统中8253电路如图(C5区:8253电路)
8253端口地址:0#计数器—0B000H,1#计数器—0B001H,2#计数器—0B002H,控制寄存器—0B003H。
5、程序流程图及说明
5.1、基本和中级要求的流程图:
5.2、高级要求的流程图
5.3、流程图说明
流程图1设计思想:
1、 主程序每0.5秒循环一次,每次查询三个开关状态,及时响应开关状态的变化。其中CNT0和CNT3分别用于记录状态0和状态3工作进程的进程计数器,可以用寄存器或内存变量实现。
2、 常用的工作状态0是A、B道交替通行,一个周期用时14秒。用CNT0以0.5秒为单位进行加1计数,从0到27循环计数,CNT0/2就可知本周期进行到第几秒了。根据设计任务功能要求,第0秒,A道红灯、B道黄灯;第1~7秒,A道绿灯、B道红灯;第8秒,A道黄灯、B道红灯;第9~13秒,A道红灯、B道绿灯。
3、 工作状态3中,CNT3只有2种状态(0和0FFH),用于控制紧急车辆的灯光闪烁。
4、 时间显示采用实验仪的数码管显示。只用一个数码显示器显示绿灯通行倒计时,A道显示数=8-CNT0/2,B道显示数=14-CNT0/2。参考流程图2。
如果用2个数码显示器分别显示A道、B道的倒计时,则需要用到动态显示扫描技术,难度较大,定为加分项目。在500ms延时子程序中循环调用动态显示扫描子程序,定时器的定时周期应缩短到5ms。参考流程图3。此功能难度较大,定为加分项目。2个数码管的位码选择(低电平有效)有8255的PC3、PC0来确定,接线到数码管选择脚接口JP41(注意JP41的接插方法:JP41只接插一半,用PCL接JP41的1-4引脚。如果PCL与JP41完全连接,PC4对应位会显示倒计时数码)。显示内容由8255的B口接线到数码管段码接口JP42。
6、实验源代码及解释
源程序如下:
.MODEL TINY
COM_ADDR EQU 0B003H ;8253控制寄存器端口地址
T0_ADDR EQU 0B000H ;计数器0
T1_ADDR EQU 0B001H ;计数器1
T2_ADDR EQU 0B002H ;计数器2
COM_ADD EQU 0F003H ;8255控制寄存器端口地址
PA_ADD EQU 0F000H ;PA口
PB_ADD EQU 0F001H ;PB口
PC_ADD EQU 0F002H ;PC口
.STACK 300
.DATA
LED_DATA DB 10111101B ;东西红灯,南北黄灯
DB 11101011B ;东西绿灯,南北红灯
DB 11011011B ;东西黄灯,南北红灯
DB 10111110B ;东西红灯,南北绿灯
DB 00111011B ;东西红灯,南北黄灯,紧急车辆闪光亮
DB 10111011B ;东西红灯,南北黄灯,紧急车辆闪光灭
SHUMA DB 01111111B ;0
DB 00000110B ;1
DB 01011011B ;2
DB 01001111B ;3
DB 01100110B ;4
DB 01101101B ;5
DB 01111101B ;6
DB 00000111B ;7
DB 01111111B ;8
CNT0 DB ? ;定义一个字节变量,初始值不定
CNT3 DB ?
.CODE
START: MOV AX,@DATA ;AX=0040H
MOV DS,AX
MOV DX,COM_ADD ;8255初始化
MOV AL,88H ;AL=1000 1000,A口方式0输出,B口方式0输出,C口高四位输入,低四位输出
OUT DX,AL ;把AL中的内容送入DX端口
MOV DX,COM_ADDR ;8253初始化
MOV AL,0B0H ;AL=1011 0000,通道2,先读/写寄存器低字节,后读/写高字节
OUT DX,AL ;把AL中的内容送入DX端口
MOV DX,PC_ADD ;位码选择
IN AL,DX ;把DX端口的数据送入AL
AND AL,0FEH ;逻辑与指令,使最低位清零
OR AL,01H ;逻辑或指令,使 最低位置1
OUT DX,AL ;把AL中的内容送入DX端口
MOV CNT0,0 ;CNT0=0
MOV CNT3,0 ;CNT3=0
LP: CALL DL500ms ;调用DL500ms的指令
MOV DX,PC_ADD ;将PC端口地址送给DX
IN AL,DX ;把DX端口的数据送入AL
TEST AL,80H ;1000 0000 PC7 检查AL的D7=1?
JZ K7 ;ZF=1,转移
JMP JMP1 ;无条件转JMP1
K7: MOV CH,CNT3 ;紧急情况
CMP CH,0 ;比较CH-0
JZ RRS ;ZF=1则转移
RRM: MOV AL,5 ;AL=0005H
XLAT ;AX=BBH ;Red Red Dark
MOV DX,PA_ADD ;DX=0F000H
OUT DX,AL ;将AL的值写入DX端口
JMP LAST0 ;跳转到JMP1
RRS: MOV AL,4 ;AL=0004H
XLAT ;AX=3BH ;Red Red Light
MOV DX,PA_ADD ;DX=0F000H
OUT DX,AL ;将AL的值送入DX端口
CALL DL500ms ;调用DL500ms指令
MOV AL,5 ;AL=0005H
XLAT ;AX=BBH ;Red Red Dark
MOV DX,PA_ADD ;DX=0F000H
OUT DX,AL ;将AL的值送入DX端口
LAST0: MOV DX,PB_ADD ;DX=0F001H
MOV AL,00H ;AL=00H
OUT DX,AL ;将AL的值写入DX端口
XOR CH,0FFH ;异或指令,使操作数的某些位保留(与“0异或”)使某些位取反(与“1异或”)
MOV CNT3,CH ;CH=0FFH
MOV CNT0,0 ;CNT0=0
JMP LP ;跳转到LP指令
JMP1: MOV DX,PC_ADD ;DX=0F002H
IN AL,DX ;将DX端口的内容赋值给AL
TEST AL,20H ;检测(0010 0000) PC5
JNZ JMP2 ;ZF=0,转移
MOV DX,PC_ADD ;DX=0F002H
IN AL,DX ;将DX端口的内容赋值给AL
TEST AL,40H ;检测(0100 0000) PC6
JNZ K5 ;ZF=0,转移
JMP JMP3 ;无条件跳转JMP3指令
K5: MOV AL,1 ;AL=0001
XLAT ;00EBH
MOV DX,PA_ADD ;DX=0F000H
OUT DX,AL ;将AL的值送入DX端口
MOV DX,PB_ADD ;DX=0F001H
MOV AL,00H ;AL=00H
OUT DX,AL ;将AL的值送入DX端口
MOV CNT0,0 ;CNT0=0
MOV CNT3,0 ;CNT3=0
JMP LP ;无条件跳转LP
JMP2: MOV DX,PC_ADD ;DX=0F002H
IN AL,DX ;将DX端口中的内容赋值给AL
TEST AL,40H ;检测(0100 0000) PC6
JZ K6 ;ZF=1,则转移
JMP JMP3 ;无条件转移JMP3
K6: MOV AL,3 ;AL=0003
XLAT ;DBH
MOV DX,PA_ADD ;DX=0F000H
OUT DX,AL ;将AL的值送入DX端口
MOV DX,PB_ADD ;DX=0F001H
MOV AL,00H ;AL=00H
OUT DX,AL ;将AL的值送入DX端口
MOV CNT0,0 ;CNT0=0
MOV CNT3,0 ;CNT3=0
JMP LP ;无条件跳转LP指令
LP1: JMP LP ;无条件跳转LP指令
JMP3: MOV CNT3,0 ;CNT3=0
MOV CH,CNT0 ;CH=CNT0
SHR CH,1 ;CH=CNT0/2 ,CH右移一位
LEA BX,LED_Data ;取源操作地址的偏移量,并把它送到目的操作数所在单元
CMP CH,0 ;比较CH-0
JZ RY ;ZF=1,相等则转移
CMP CH,8 ;定时8s
JB GR ;CF=1,低于则转移
CMP CH,8 ;定时8s
JZ YR ;ZF=1,相等则转移
JMP RG ;无条件转移RG
RG: MOV AL,3 ;AL=0003 Red Green
XLAT ;BEH
MOV DX,PA_ADD ;DX=0F000H
OUT DX,AL ;将AL的值送入DX端口
PUSH BX ;5~1S倒计时
LEA BX,SHUMA ;转换字形码
MOV AL,14
SUB AL,CH ;AL=AL-CH/2
XLAT ;表转换
MOV DX,PB_ADD
OUT DX,AL
POP BX ;显示倒计时
LAST: INC CNT0 ;指向下一个元素
CMP CNT0,28 ;一个计时周期28s
JNZ LP1 ;ZF=0,则转移
MOV CNT0,0 ;CNT0=0
JMP LP1 ;无条件转移LP1
RY: MOV AL,0 ;AL=0000 Red Yellow
XLAT ;表转换
MOV DX,PA_ADD ;DX=0F000H
OUT DX,AL ;将AL的值送入DX端口
MOV DX,PB_ADD ;DX=0F001H
MOV AL,00H ;AL=00H
OUT DX,AL ;将AL的值送入DX端口
JMP LAST ;无条件转LAST指令
GR: MOV AL,1 ;AL=0001 Green Red
XLAT ;表转换
MOV DX,PA_ADD ;AX=0F000H
OUT DX,AL ;将AL的值送入DX端口
PUSH BX ;7~1s倒计时
LEA BX,SHUMA ;转换字形码
MOV DX,PB_ADD ;DX=OF001H
MOV AL,8 ;AL=0008
SUB AL,CH ;AL=AL-CH/2
XLAT ;表转换 BDH
MOV DX,PB_ADD ;DX=0F001H
OUT DX,AL ;将AL的值送入DX端口
POP BX ;显示计时
JMP LAST ;无条件转移LAST指令
YR: MOV AL,2 ;AL=0002
XLAT ;表转换 EBH Yello Red
MOV DX,PA_ADD ;DX=0F000H
OUT DX,AL ;将AL的值送入DX端口
MOV DX,PB_ADD ;DX=0F001H
MOV AL,00H ;AL=0000
OUT DX,AL ;将AL的值送入DX端口
JMP LAST ;无条件转移LAST指令
DL500ms: PROC NEAR
MOV DX,T2_ADDR
MOV AL,24H ;62500=F424H
OUT DX,AL ;将AL的值送入DX端口
MOV AL,0F4H ;AL=0F4H
OUT DX,AL ;将AL的值送入DX端口
DELAY: MOV DX,PC_ADD ;DX=0F002H
IN AL,DX ;0001 0000 PC4~OUT2
TEST AL,10H ;查AL=10H?
JZ DELAY ;ZF=1 ,则转移
RET
DL500ms ENDP
END START ;汇编结束
7、实际接线图
8、运行结果
当系统工作于状态1时,A、B道交替通行
当系统工作于状态2时,仅K5闭合,A道有车,B道无车:
当系统工作于状态3时,仅K6闭合,A道无车,B道有车:
当系统工作于状态4时,K7闭合,有紧急车辆通行:
9、设计心得及体会
为期一周的课程设计在不知不觉中已经结束了,短短的几天,让我重拾课本中关于并行通信接口8255A和8253计数器/定时器的原理及其应用,抛开我们应该掌握的知识和技能,我还明白了一些做人的道理,让我受益匪浅。
验收的时候,老师每个人都看了一遍,第二遍的时候,老师让我们自己选择是否留下来答辩,这个时候,我矛盾了,因为老师说,在答辩的过程中,一旦发现你什么都不会,那这次的课程设计就可能不及格。当时,我的自卑感来作祟了,因为,我觉得自己比不上那些留下来答辩的人,也许有这么几个很水的人留下来浑水摸鱼的,在这方面我很佩服他们。也许就是分分钟的选择吧。老师问留下来答辩的人的问题的时候,我听了两个,我也都会。为了逃避自己当时已经后悔了的事实,我很快逃走了。
事后,我反复思考这件事,我知道,人不能盲目地自卑或者自信。这次的教训深深地警醒着我,我!必须相信自己!
10、主要参考文献
[1] 李干林. 微机原理及接口技术实验指导书[M] .北京:北京大学出版社,2010年8月
[2] 周荷琴 冯焕清. 微型计算机原理与接口技术(第5版)中国科学技术大学出版社,2013年1月
展开阅读全文