1、红外控制交通灯合肥学院计算机科学与技术系微机原理与接口技术课程设计报告20092010学年第2学期课程微机原理与接口技术课程设计名称红外控制交通灯学生姓名陈 侃学号0704012010专业班级计算机科学与技术专业(07计本2)指导教师龙夏老师,何立新老师2010 年 4 月一、题义分析及解决方案1.题义需求分析:本程序设计需通过红外通讯控制红、绿、黄发光二极管按十字路口红、绿、黄交通灯形式闪烁。红外通信,即以红外线作为通信载体,通过红外光在空中的传播来传输数据的通信方式,它由发射端和接收端来完成。在发射端, 发送的数字信号经过适当的调制编码后,送入电光变换电路,经红外发射管转变为红外光脉冲发射
2、到空中;在接收端,红外接收器对接收到的红外光脉冲进行光电变换, 解调译码后恢复出原信号。交通灯的变化规律根据实地查看,各个路口的交通灯的变化规律并不相同,本课程设计为了简化,只考虑了交通灯正常时的变化规律。模式一(单行线)情况下,首先是东西直行绿灯亮,南北红灯亮,几秒后,东西绿灯闪烁,南北红灯亮,闪烁几次后,东西黄灯亮,而南北红灯亮,再过几秒后,东西红灯亮,南北绿灯亮,几秒后南北绿灯闪烁,最后变成黄灯亮,依此循环下去。模式二(双行线)情况下,将黄灯当作左转绿灯,第二个红灯当作右转绿灯,首先是东西方向直行绿灯、右转绿灯和左转绿灯亮,南北红灯亮,几秒后,东西方向三个绿灯闪烁,闪烁几次后,变成东西红
3、灯亮,南北方向直行绿灯、右转绿灯和左转绿灯亮,几秒后,南北方向三个绿灯闪烁,依此循环下去。2.需要解决的问题对此设计需要解决的问题:1.绿灯的倒计时时间如何显示,倒计时间用什么来控制。2.交通灯用什么器材来模拟显示。3.交通灯用什么接口来连接。4.交通灯运行状态怎么实现,交通灯状态的切换问题怎么解决。3.解决问题方法及思路:(1)硬件部分针对需求分析中的问题作如下解决:交通灯用发光二极管来模拟显示。交通灯与8255A的A口相连接,8255A初始化后,A口工作在方式0输出,用程序控制A口的输出即实现对交通灯的亮灭控制。开关1与2控制交通灯的模式,用户需要切换模式的时候,调节开关,程序查询开关1和
4、2的电平信息,然后8251A向红外通讯发出相应编码,红外通讯自发自收后,8251A收到红外通讯发回的相应编码后,程序调用相应子程序控制8255A的A口输出,完成对模式的切换。用8251A与红外通讯相连,8251A能与红外通讯进行串行通信。用8251A可编程串行接口芯片的发送器TxD端接入到红外通讯的发射in端,将红外通讯设备的out端接入到8251A的接收器RxD端。用8255A可编程并行接口芯片的A口作为红、绿、黄交通灯的控制输入口,选用8255而不用8279是因为8279可编程芯片是一种通用的键盘/显示器的接口芯片,可对64个开关矩阵组成的键盘进行自动扫描。8279内部有一个16x8的显示
5、缓冲器,能对8位或16位LED进行自动扫描,使显示缓冲器的内容在LED上显示出来。8255有三个并行输入输出口,可以方便的对三种颜色的交通灯进行很好的控制,我选择了8255A。 另外,在与红外通讯的连接方面,我选择8251A可编程串行接口芯片,并且8251A的收发时钟也需要统一,我用8253作分频器提供8251A的收发时钟,将8253的OUT0接到8251A的RXC和TXC端。下面附上8255A与8251A芯片的比较。8255A芯片8251A芯片通信方式并行串行数据传送方式数据的各位同时传送,数据一位一位地顺序传送,内部组成8155内有256字节RAM和一个定时计数器。8255没有特点通信线路
6、较8251复杂通信线路简单,利用电话或电报线路就可实现通信输入/输出编程较为灵活编程较8255不够灵活应用范围使用十分方便,传输距离近,成本较高传输距离远,使用不方便,但传输速度慢,降低成本 ,初始化特点8255A直接位清0/置1功能简化了接口控制8251在初始化时,必须重新设置模式寄存器的格式.图1 8255A与8251A(2)软件部分首先,根据硬件需求采用8255A、8251A和8253芯片,为实现对通信和交通灯的控制,采用汇编语言,分别对8255A、8251A和8253进行初始化设置。然后,程序查询8255A的PC口输入的开关信号,决定8251向红外通讯设备发送的红外编码,即0、1、2、
7、3四种。最后,程序查询8251的接收缓冲区内的红外编码是多少,根据所得到的编码,调用相应模式子程序,控制交通灯两种模式的转换及交通灯的亮灭规律。二、硬件设计1.选择芯片8251A(1)8251A在本实验中的作用: 通过8251A的TxD向红外通讯设备发送信号,再通过8251A的RxD接收信号,根据8251接收到的红外编码选择交通灯的模式。(2)8251A的功能分析: 1)用于异步传送,58bit/字符,接收/发送时钟频率为通信波特率的16倍2)产生2个停止位3)波特率:DC-19.2Kbps4)全双工,双缓冲发送和接收器5)具有奇偶、帧、溢出出错检测电路 CS: 片选信号,低电平有效;RxC、
8、TxC: 收发时钟;C/D: 命令/数据;RXD、TXD: 串行收发。CLK: 时钟。图2 8251A2. 选择芯片8253(1)8253在本实验中的作用:8253的主要功能是作分频器提供8251的收发时钟,这样在红外编码的时候不用调用delay子程序;8251是按位进行传输的,有了脉冲时钟,只要设定脉冲时钟的频率,这样每位收发的频率控制就简单多了。(2)8253功能分析: 本实验中,运用8253的工作方式3,这种方式下,可以从OUT得到对称的方波输出,并且利用计数值达到对时钟脉冲的分频。当装入的计数值N为偶数时,则前N/2计数过程中,OUT为高电平;后N/2计数过程中OUT为低电平,计数过程
9、连续进行。若N为奇数,则(N1)/2计数过程中,OUT保持高电平;而(N1)/2计数期间,OUT为低电平。CS: 片选信号,低电平有效;A0、A1:地址信号;图3 8253引脚接线图(3) 8253A的技术参数:参数名称符号测试条件最大规范值最小规范值输入低电平电压VIL0.8V-0.5V输入高电平电压VIAVcc+0.5 V2.2V输出低电平电压VOLVin=Vcc-0V0.45 V输出高电平电压VOHVout=Vcc-0.45V2.4V输入负载电流IIL+/-10 V输出浮动漏电流IOFL+/-10 V电源电流Icc140 V图48253A的计数参数8253A主要参数分析:输入低电压的范围
10、是-0.5 V0.8 V,输出低电压的范围0.45 V2.4 V,输入高电压的范围是2.2 VVcc+0.5 V。而测试条件均为Vin=Vcc-0V,Vout=Vcc-0.45V。3. 选择芯片8255A(1)8255A在本实验中的作用:通过8255A的A口与发光二极管相连,控制8个发光二极管的亮灭规律,模拟交通灯的设计。通过8255A的C口PC0、PC1接收开关信号,决定8251A向红外通讯设备发送的红外编码。(2)8255A的功能分析:PA口工作在方式0输出状态,PC口工作在输入状态: PA0PA8接8个发光二极管,PC口接逻辑电平开关。在使用8255A前首先要对它进行初始化。CS:片选信
11、号,低电平有效。IO/M:高电平,选择I/O口;低电平,选择数据RAM。JP75:PB口;JP76:PA口;JP79:PC口。 图5 8255A方式0的工作特点:这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。其功能为:两个8位通道:通道A、B。两个四位通道:通道C高4位和低四位;任何一个通道可以作输入/输出;输出是锁存的;输入是不锁存的;在方式0时各个通道的输入/输出可有16种不同的组合。方式0的使用场合:同步传送是在外设控制过程的各种动作时间为固定,且已知的条件下使用的。因此,传送中不要应答信号。输入时,执行程序只要给出IN指令;而输出时,也只给出
12、OUT指令,就能实现数据的输入或输出。优点是程序简单,接口的硬件开销小。8255A方式选择控制字说明:控制字格式如下:图6 8255A控制字格式D7=1工作方式控制标志。D5D6 组合设定A口工作方式:00方式0、01方式1、1011方式2。D4 设定A口的输入输出,D41输入,D4 0输出。D3 是C口高位输入输出选择,D3 1输入,D3 0输出。D2 是B口工作方式选择,D21方式1;D20方式0。D1 是B口输入输出选择D11输入D10输出。D0设定C口低位输入输出,D01输入,D00输出。(3)8255A技术参数:参数名称符号测试条件最大规范值最小规范值输入低电平电压VIL0.8V-0
13、.5V输入高电平电压VIHVcc2.0V输入低电平电压(数据总线)VOLIOL=2.5MA0.45V输入低电平电压(外部端口)VOLIOL=1.7MA0.45V输入高电平电压(数据总线)VOHIOH=-400MA2.4V输入高电平电压(外部端口)VOHIOH=-200MA2.4V达林顿驱动电流IDARREXT=750VEXT=1.5V-0.4MA1.0MA电源电流ICC120MA输入负载电流IILI=Vcc0V+10MA-10MA输出浮动电流IOFLVout=Vcc-0+10MA-10MA图7 8255A技术参数表图7的主要参数说明:8255A工作最大电流为120MA,VCC=-5V+5V,I
14、(DAR)工作电流最大为4MA。图8 8255A内部结构4.选择红外通信设备(1)红外通信在本实验中的作用:通过红外发送管,发出载波信号,根据接收到的载波信号,获得红外编码,实现自发自收,程序再根据发回的红外编码控制交通灯模式。(2)红外通信功能分析:红外通信, 即以红外线作为通信载体, 通过红外光在空中的传播来传输数据的通信方式, 它由发射端和接收端来完成。在发射端, 发送的数字信号经过适当的调制编码后, 送入电光变换电路, 经红外发射管转变为红外光脉冲发射到空中;在接收端, 红外接收器对接收到的红外光脉冲进行光电变换, 解调译码后恢复出原信号。红外发射端发送数据时, 是将待发送的二进制数据
15、调制成一系列的脉冲信号后发射出去。红外载波为频率38KHz (可调)的方波, 采用脉宽调制PWM方式发送, 通过待发送二进制数据的“0”或“1”控制两个脉冲之间的时间间隔, 及PWM的占空比。红外载波既可以通过外围硬件电路实现, 也可以使用CPU内部的定时器的PWM功能实现。红外接收端在收到38KHz 的载波信号时, 会输出低电平, 否则输出高电平, 从而可以将“时断时续”的红外光信号解调成一定周期的连续方波信号, 经处理, 便可以恢复出原数据信号。IN: 串行数据输入 OUT: 串行数据输出CLK: 载波输入,可接31250(B2区)频率输出图9 红外通讯原理图信号调制如下图:图10 信号调
16、制波形先发一段前导码, 以检验这组码是否为想要的码。前导码由一个9ms 的高电平和一个4ms 的低电平组成。然后再发32 位数据代码, 其中高电平为0.5ms, 低电平为0.5ms的一个周期为代码“0”; 高电平为0.5ms, 低电平为1.5ms 的一个周期为代码“1”。HS0038B的典型信号传输关系如下图:图11 HS0038B的信号传输5选择发光二极管(1)发光二极管在本实验中的作用: 本实验中用发光二极管模拟红绿交通灯的亮灭规律及模式转换。(2)功能分析: 发光二极管采用共阳极接线法,当8255A的PA口相应端输出高电平时,发光二极管不导通,不发光;当输出低电平时,发光二极管导通,发光
17、。因此,8255A的PA口输出控制着交通灯亮灭的规律。(3)发光二极管的控制逻辑: 模式一:单行线模式,8个发光二极管的编码设置如下。灯0灯1灯2灯3灯4灯5灯6灯7东西绿灯东西黄灯东西红灯无用南北绿灯南北黄灯南北红灯无用注:单行无左转 二极管设定图12 单行无左转时二极管的设定二进制编码交通灯亮灭情况01111101东西绿灯亮,南北红灯亮11111101东西绿灯灭,南北红灯亮10111101东西黄灯亮,南北红灯亮11010111东西红灯亮,南北绿灯亮11011111东西红灯亮,南北绿灯灭11011011东西红灯亮,南北黄灯亮图13 单行无左转时的编码设置 模式二:双行线模式,8个发光二极管编
18、码如下:灯0灯1灯2灯3灯4灯5灯6灯7东西绿灯东西左转绿灯东西红灯东西左转红灯南北绿灯南北左转绿灯南北红灯南北左转红灯注:双行有左转 二极管设定图14 双行有左转时二极管的设定二进制编码交通灯亮灭情况01101100B东西绿灯亮,东西左转红灯亮;南北红灯亮,左转红灯亮01111111B东西绿灯亮,东西左转红灯闪烁;南北红灯闪烁,南北左转红灯闪烁10011100B东西红灯亮,东西左转绿灯亮;南北红灯亮,南北左转红灯亮10111111B东西红灯闪烁,东西左转绿灯亮;南北绿灯闪烁,南北左转红灯闪烁11000110B东西红灯亮,东西左转红灯亮;南北绿灯亮,南北左转红灯亮11110111B东西红灯闪烁
19、,东西左转红灯闪烁;南北绿灯亮,南北左转红灯闪烁11001001B东西红灯亮,东西左转红灯亮;南北红灯亮,南北左转绿灯亮11111011B东西方向直行红灯闪烁,左转红灯闪烁;南北方向直行红灯闪烁,左转绿灯亮图15 双行有左转时的编码设置6硬件总逻辑图及其说明:8086CPU的数据总线和8255A、8251A与8253的数据总线相连,8086的读写控制分别和8255A的读写控制相连。译码器和8255A、8251A与8253的片选CS相连。8255A的PA0PA8接8个发光二极管,PC0-PC8与逻辑电平开关相连。8251A的TXD与RXD分别和红外通讯的IN与OUT端相连,8253的OUT0端与
20、8251A的TXC和RXC相连。图16 程序硬件原理图三、控制程序设计1.程序流程图:2.程序设计思路:编写程序,查询来自8255A的PC0、PC1端口输入的开关信号,确定8251A向红外通讯设备发送的红外编码(在此为了简化编码,发送的红外编码就是PC口的编码值),红外通讯设备将这一编码进行自发自收后,发回给8251A,通过程序判断8251A接收红外通讯发回的编码,根据这个编码,调用模式子程序(MODE1和MODE2),并设置红绿灯的亮灭时间。模式子程序调用一次后,主程序将会再次查询开关信号,因此,改变开关0或1电平可以不断进行交通灯的模式转换。3.控制程序源代码: .MODEL TINY P
21、CIBAR3 EQU 1CH ;8位I/O空间基地址(它就是实验仪的基地址, 也为DMA & 32 BIT RAM板卡上的提供基地址) Vendor_ID EQU 10EBH ;厂商ID号Device_ID EQU 8376 ;设备ID号 .STACK 100 .DATA IO_Bit8_BaseAddress DW ? msg0 DB BIOS不支持访问PCI $msg1 DB 找不到Star PCI9052板卡$msg2 DB 读位I/O空间基地址时出错$msg3 DB 红外编码未收到$ PA_ADD DW 00F0H;8255PA口偏移量PB_ADD DW 00F1H;8255PB口偏移
22、量PC_ADD DW 00F2H;8255PC口偏移量COM_ADD DW 00F3H;8255控制口偏移(CS1:F0H-0FFH)CTL_8251 DW 00E1H;8251控制字或状态字(CS2:E0H-0EFH)DATA_8251 DW 00E0H;8251读写数据W_8253_T0 DW 00D0H ;计数器地址W_8253_C DW 00D3H ;控制字(CS3:0D0H-0DFH)LED_Data1 DB 01111101B DB 11111101B DB 10111101B DB 11010111B DB 11011111B DB 11011011B LED_Data2 DB
23、01101100B DB 01111111B DB 10011100B DB 10111111B DB 11000110B DB 11110111B DB 11001001B DB 11111011B .CODE START: MOV AX,DATA MOV DS,AX NOP CALL InitPCI CALL ModifyAddress ;根据PCI提供的基地址,将偏移地址转化为实地址 CALL INIT_8255 CALL INIT_8253 CALL INIT_8251 MOV DX,PA_ADD ;灯全熄灭 MOV AL,0ffH OUT DX,AL NONE: MOV DX,PC_
24、ADD ;判断输入的开关信号(高电平或低电平) IN AL,DX CALL Sendout CALL Receivein CMP AL,0 JZ S1 CMP AL,2 JZ S2 CMP AL,1 JZ S4 CMP AL,3 JZ S5 JMP LOSTS1: MOV si,20 JMP SM1S2: MOV si,40SM1: CALL MODE1 JMP NONE S4: MOV si,20 JMP SM2S5: MOV si,40 SM2: CALL MODE2 JMP NONELOST: LEA DI,msg3 MOV AH,9 INT 21H JMP NONE;-Sendout
25、PROC NEAR PUSH AX MOV DX,CTL_8251Sendout1: IN AL,DX TEST AL,01H ;允许数据发送吗? JZ Sendout1 DEC DX ;发送 POP AX OUT DX,AL ;发送给红外通讯 RETSendout ENDPReceivein PROC NEAR MOV DX,CTL_8251Receivein1: IN AL,DX TEST AL,02H JZ Receivein1;有数据吗? DEC DX IN AL,DX RETReceivein ENDPMODE1 PROC NEAR MOV DX,PA_ADD MOV BX,offs
26、et LED_Data1 MOV AL,0 XLAT OUT DX,AL ;东西绿灯,南北红灯 mov ah,1 CALL sub_mode call dl_3s MOV AL,3 ;东西红灯,南北绿灯 XLAT OUT DX,AL mov ah,4 call sub_mode call dl_3s RET MODE1 ENDPMODE2 PROC NEAR MOV DX,PA_ADD MOV BX,offset LED_Data2 MOV AL,0 XLAT OUT DX,AL mov ah,1 call sub_mode mov ah,3 call sub_mode mov ah,5 ca
27、ll sub_mode mov ah,7 call sub_mode1 RET MODE2 ENDP sub_mode proc near ;子程序,入口参数AH call sub_mode1 INC AH MOV AL,AH XLAT OUT DX,AL ret endp sub_mode1 proc near MOV CX,SIsub_MODE_1: MOV AL,ah XLAT OUT DX,AL CALL DL500ms dec ah MOV AL,ah XLAT OUT DX,AL CALL DL500ms inc ah LOOP sub_MODE_1 ret endpINIT_82
28、55 PROC NEAR MOV DX,COM_ADD MOV AL,89h ;A口方式,输出,C口输入 OUT DX,AL RET INIT_8255 ENDPINIT_8253 PROC NEAR MOV DX,W_8253_C MOV AL,37H ;定时器,方式 OUT DX,AL MOV DX,W_8253_T0 MOV AL,26H ;BCD码(2000000/26)=16*4800 OUT DX,AL MOV AL,0 OUT DX,AL RETINIT_8253 ENDPINIT_8251 PROC NEAR CALL RESET_8251 MOV DX,CTL_8251 MOV AL,01111110B ;异步,波特率系数为,个数据位,一个停止位,偶校验 OUT DX,AL CALL DLTIME MOV AL,17H ;允许接收和发送发送数据,清错误标志 OUT DX,AL CALL
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1