红外控制交通灯.docx
《红外控制交通灯.docx》由会员分享,可在线阅读,更多相关《红外控制交通灯.docx(33页珍藏版)》请在冰豆网上搜索。
红外控制交通灯
合肥学院
计算机科学与技术系
微机原理与接口技术
课程设计报告
2009~2010学年第2学期
课程
微机原理与接口技术
课程设计名称
红外控制交通灯
学生姓名
陈侃
学号
0704012010
专业班级
计算机科学与技术专业(07计本2)
指导教师
龙夏老师,何立新老师
2010年4月
一、题义分析及解决方案
1.题义需求分析:
本程序设计需通过红外通讯控制红、绿、黄发光二极管按十字路口红、绿、黄交通灯形式闪烁。
红外通信,即以红外线作为通信载体,通过红外光在空中的传播来传输数据的通信方式,它由发射端和接收端来完成。
在发射端,发送的数字信号经过适当的调制编码后,送入电光变换电路,经红外发射管转变为红外光脉冲发射到空中;在接收端,红外接收器对接收到的红外光脉冲进行光电变换,解调译码后恢复出原信号。
交通灯的变化规律根据实地查看,各个路口的交通灯的变化规律并不相同,本课程设计为了简化,只考虑了交通灯正常时的变化规律。
模式一(单行线)情况下,首先是东西直行绿灯亮,南北红灯亮,几秒后,东西绿灯闪烁,南北红灯亮,闪烁几次后,东西黄灯亮,而南北红灯亮,再过几秒后,东西红灯亮,南北绿灯亮,几秒后南北绿灯闪烁,最后变成黄灯亮,依此循环下去。
模式二(双行线)情况下,将黄灯当作左转绿灯,第二个红灯当作右转绿灯,首先是东西方向直行绿灯、右转绿灯和左转绿灯亮,南北红灯亮,几秒后,东西方向三个绿灯闪烁,闪烁几次后,变成东西红灯亮,南北方向直行绿灯、右转绿灯和左转绿灯亮,几秒后,南北方向三个绿灯闪烁,依此循环下去。
2.需要解决的问题
对此设计需要解决的问题:
1.绿灯的倒计时时间如何显示,倒计时间用什么来控制。
2.交通灯用什么器材来模拟显示。
3.交通灯用什么接口来连接。
4.交通灯运行状态怎么实现,交通灯状态的切换问题怎么解决。
3.解决问题方法及思路:
(1)硬件部分
针对需求分析中的问题作如下解决:
①交通灯用发光二极管来模拟显示。
②交通灯与8255A的A口相连接,8255A初始化后,A口工作在方式0输出,用程序控制A口的输出即实现对交通灯的亮灭控制。
③开关1与2控制交通灯的模式,用户需要切换模式的时候,调节开关,程序查询开关1和2的电平信息,然后8251A向红外通讯发出相应编码,红外通讯自发自收后,8251A收到红外通讯发回的相应编码后,程序调用相应子程序控制8255A的A口输出,完成对模式的切换。
用8251A与红外通讯相连,8251A能与红外通讯进行串行通信。
用8251A可编程串行接口芯片的发送器TxD端接入到红外通讯的发射in端,将红外通讯设备的out端接入到8251A的接收器RxD端。
⑤用8255A可编程并行接口芯片的A口作为红、绿、黄交通灯的控制输入口,选用8255而不用8279是因为8279可编程芯片是一种通用的键盘/显示器的接口芯片,可对64个开关矩阵组成的键盘进行自动扫描。
8279内部有一个16x8的显示缓冲器,能对8位或16位LED进行自动扫描,使显示缓冲器的内容在LED上显示出来。
8255有三个并行输入输出口,可以方便的对三种颜色的交通灯进行很好的控制,我选择了8255A。
另外,在与红外通讯的连接方面,我选择8251A可编程串行接口芯片,并且8251A的收发时钟也需要统一,我用8253作分频器提供8251A的收发时钟,将8253的OUT0接到8251A的RXC和TXC端。
下面附上8255A与8251A芯片的比较。
8255A芯片
8251A芯片
通信方式
并行
串行
数据传送方式
数据的各位同时传送,
数据一位一位地顺序传送,,
内部组成
8155内有256字节RAM和一个定时计数器。
8255没有
特点
通信线路较8251复杂
通信线路简单,利用电话或电报线路就可实现通信
输入/输出
编程较为灵活
编程较8255不够灵活
应用范围
使用十分方便,传输距离近,成本较高
传输距离远,使用不方便,但传输速度慢,降低成本,
初始化特点
8255A直接位清0/置1功能简化了接口控制
8251在初始化时,必须重新设置模式寄存器的格式.
图18255A与8251A
(2)软件部分
首先,根据硬件需求采用8255A、8251A和8253芯片,为实现对通信和交通灯的控制,采用汇编语言,分别对8255A、8251A和8253进行初始化设置。
然后,程序查询8255A的PC口输入的开关信号,决定8251向红外通讯设备发送的红外编码,即0、1、2、3四种。
最后,程序查询8251的接收缓冲区内的红外编码是多少,根据所得到的编码,调用相应模式子程序,控制交通灯两种模式的转换及交通灯的亮灭规律。
二、硬件设计
1.选择芯片8251A
(1)8251A在本实验中的作用:
通过8251A的TxD向红外通讯设备发送信号,再通过8251A的RxD接收信号,根据8251接收到的红外编码选择交通灯的模式。
(2)8251A的功能分析:
1)用于异步传送,5~8bit/字符,接收/发送时钟频率为通信波特率的16倍
2)产生2个停止位
3)波特率:
DC-19.2Kbps
4)全双工,双缓冲发送和接收器
5)具有奇偶、帧、溢出出错检测电路
CS:
片选信号,低电平有效;
RxC、TxC:
收发时钟;
C/D:
命令/数据;
RXD、TXD:
串行收发。
CLK:
时钟。
图28251A
2.选择芯片8253
(1)8253在本实验中的作用:
8253的主要功能是作分频器提供8251的收发时钟,这样在红外编码的时候不用调用delay子程序;8251是按位进行传输的,有了脉冲时钟,只要设定脉冲时钟的频率,这样每位收发的频率控制就简单多了。
(2)8253功能分析:
本实验中,运用8253的工作方式3,这种方式下,可以从OUT得到对称的方波输出,并且利用计数值达到对时钟脉冲的分频。
当装入的计数值N为偶数时,则前N/2计数过程中,OUT为高电平;后N/2计数过程中OUT为低电平,计数过程连续进行。
若N为奇数,则(N+1)/2计数过程中,OUT保持高电平;而(N-1)/2计数期间,OUT为低电平。
CS:
片选信号,低电平有效;
A0、A1:
地址信号;
图38253引脚接线图
(3)8253A的技术参数:
参数名称
符号
测试条件
最大规范值
最小规范值
输入低电平电压
VIL
0.8V
-0.5V
输入高电平电压
VIA
Vcc+0.5V
2.2V
输出低电平电压
VOL
Vin=Vcc-0V
0.45V
输出高电平电压
VOH
Vout=Vcc-0.45V
2.4V
输入负载电流
IIL
+/-10V
输出浮动漏电流
IOFL
+/-10V
电源电流
Icc
140V
图4 8253A的计数参数
8253A主要参数分析:
输入低电压的范围是-0.5V~0.8V,输出低电压的范围0.45V~2.4V,输入高电压的范围是2.2V~Vcc+0.5V。
而测试条件均为Vin=Vcc-0V,Vout=Vcc-0.45V。
3.选择芯片8255A
(1)8255A在本实验中的作用:
通过8255A的A口与发光二极管相连,控制8个发光二极管的亮灭规律,模拟交通灯的设计。
通过8255A的C口PC0、PC1接收开关信号,决定8251A向红外通讯设备发送的红外编码。
(2)8255A的功能分析:
PA口工作在方式0输出状态,PC口工作在输入状态:
PA0-PA8接8个发光二极管,PC口接逻辑电平开关。
在使用8255A前首先要对它进行初始化。
CS:
片选信号,低电平有效。
IO/M:
高电平,选择I/O口;
低电平,选择数据RAM。
JP75:
PB口;
JP76:
PA口;
JP79:
PC口。
图58255A
方式0的工作特点:
这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。
其功能为:
两个8位通道:
通道A、B。
两个四位通道:
通道C高4位和低四位;任何一个通道可以作输入/输出;输出是锁存的;输入是不锁存的;在方式0时各个通道的输入/输出可有16种不同的组合。
方式0的使用场合:
同步传送是在外设控制过程的各种动作时间为固定,且已知的条件下使用的。
因此,传送中不要应答信号。
输入时,执行程序只要给出IN指令;而输出时,也只给出OUT指令,就能实现数据的输入或输出。
优点是程序简单,接口的硬件开销小。
8255A方式选择控制字说明:
控制字格式如下:
图68255A控制字格式
D7=1工作方式控制标志。
D5D6组合设定A口工作方式:
00~方式0、01~方式1、10/11~方式2。
D4设定A口的输入/输出,D4=1输入,D4=0输出。
D3是C口高位输入/输出选择,D3=1输入,D3=0输出。
D2是B口工作方式选择,D2=1方式1;D2=0方式0。
D1是B口输入/输出选择D1=1输入D1=0输出。
D0设定C口低位输入/输出,D0=1输入,D0=0输出。
(3)8255A技术参数:
参数名称
符号
测试条件
最大规范值
最小规范值
输入低电平电压
VIL
0.8V
-0.5V
输入高电平电压
VIH
Vcc
2.0V
输入低电平电压
(数据总线)
VOL
IOL=2.5MA
0.45V
输入低电平电压
(外部端口)
VOL
IOL=1.7MA
0.45V
输入高电平电压
(数据总线)
VOH
IOH=-400MA
2.4V
输入高电平电压
(外部端口)
VOH
IOH=-200MA
2.4V
达林顿驱动电流
IDAR
REXT=750
VEXT=1.5V
-0.4MA
1.0MA
电源电流
ICC
120MA
输入负载电流
IIL
I=Vcc—0V
+10MA
-10MA
输出浮动电流
IOFL
Vout=Vcc--0
+10MA
-10MA
图78255A技术参数表
图7的主要参数说明:
8255A工作最大电流为120MA,VCC=-5V~+5V,I(DAR)工作电流最大为4MA。
图88255A内部结构
4.选择红外通信设备
(1)红外通信在本实验中的作用:
通过红外发送管,发出载波信号,根据接收到的载波信号,获得红外编码,实现自发自收,程序再根据发回的红外编码控制交通灯模式。
(2)红外通信功能分析:
红外通信,即以红外线作为通信载体,通过红外光在空中的传播来传输数据的通信方式,它由发射端和接收端来完成。
在发射端,发送的数字信号经过适当的调制编码后,送入电光变换电路,经红外发射管转变为红外光脉冲发射到空中;在接收端,红外接收器对接收到的红外光脉冲进行光电变换,解调译码后恢复出原信号。
红外发射端发送数据时,是将待发送的二进制数据调制成一系列的脉冲信号后发射出去。
红外载波为频率38KHz(可调)的方波,采用脉宽调制PWM方式发送,通过待发送二进制数据的“0”或“1”控制两个脉冲之间的时间间隔,及PWM的占空比。
红外载波既可以通过外围硬件电路实现,也可以使用CPU内部的定时器的PWM功能实现。
红外接收端在收到38KHz的载波信号时,会输出低电平,否则输出高电平,从而可以将“时断时续”的红外光信号解调成一定周期的连续方波信号,经处理,便可以恢复出原数据信号。
IN:
串行数据输入
OUT:
串行数据输出
CLK:
载波输入,可接31250(B2区)频率输出
图9红外通讯原理图
信号调制如下图:
图10信号调制波形
先发一段前导码,以检验这组码是否为想要的码。
前导码由一个9ms的高电平和一个4ms的低电平组成。
然后再发32位数据代码,其中高电平为0.5ms,低电平为0.5ms的一个周期为代码“0”;高电平为0.5ms,低电平为1.5ms的一个周期为代码“1”。
HS0038B的典型信号传输关系如下图:
图11HS0038B的信号传输
5.选择发光二极管
(1)发光二极管在本实验中的作用:
本实验中用发光二极管模拟红绿交通灯的亮灭规律及模式转换。
(2)功能分析:
发光二极管采用共阳极接线法,当8255A的PA口相应端输出高电平时,发光二极管不导通,不发光;当输出低电平时,发光二极管导通,发光。
因此,8255A的PA口输出控制着交通灯亮灭的规律。
(3)发光二极管的控制逻辑:
模式一:
单行线模式,8个发光二极管的编码设置如下。
灯0
灯1
灯2
灯3
灯4
灯5
灯6
灯7
东西绿灯
东西黄灯
东西红灯
无用
南北绿灯
南北黄灯
南北红灯
无用
注:
单行无左转二极管设定
图12单行无左转时二极管的设定
二进制编码
交通灯亮灭情况
01111101
东西绿灯亮,南北红灯亮
11111101
东西绿灯灭,南北红灯亮
10111101
东西黄灯亮,南北红灯亮
11010111
东西红灯亮,南北绿灯亮
11011111
东西红灯亮,南北绿灯灭
11011011
东西红灯亮,南北黄灯亮
图13单行无左转时的编码设置
模式二:
双行线模式,8个发光二极管编码如下:
灯0
灯1
灯2
灯3
灯4
灯5
灯6
灯7
东西绿灯
东西左转绿灯
东西红灯
东西左转红灯
南北绿灯
南北左转绿灯
南北红灯
南北左转红灯
注:
双行有左转二极管设定
图14双行有左转时二极管的设定
二进制编码
交通灯亮灭情况
01101100B
东西绿灯亮,东西左转红灯亮;南北红灯亮,左转红灯亮
01111111B
东西绿灯亮,东西左转红灯闪烁;南北红灯闪烁,南北左转红灯闪烁
10011100B
东西红灯亮,东西左转绿灯亮;南北红灯亮,南北左转红灯亮
10111111B
东西红灯闪烁,东西左转绿灯亮;南北绿灯闪烁,南北左转红灯闪烁
11000110B
东西红灯亮,东西左转红灯亮;南北绿灯亮,南北左转红灯亮
11110111B
东西红灯闪烁,东西左转红灯闪烁;南北绿灯亮,南北左转红灯闪烁
11001001B
东西红灯亮,东西左转红灯亮;南北红灯亮,南北左转绿灯亮
11111011B
东西方向直行红灯闪烁,左转红灯闪烁;南北方向直行红灯闪烁,左转绿灯亮
图15双行有左转时的编码设置
6.硬件总逻辑图及其说明:
8086CPU的数据总线和8255A、8251A与8253的数据总线相连,8086的读写控制分别和8255A的读写控制相连。
译码器和8255A、8251A与8253的片选CS相连。
8255A的PA0-PA8接8个发光二极管,PC0-PC8与逻辑电平开关相连。
8251A的TXD与RXD分别和红外通讯的IN与OUT端相连,8253的OUT0端与8251A的TXC和RXC相连。
图16程序硬件原理图
三、控制程序设计
1.程序流程图:
2.程序设计思路:
编写程序,查询来自8255A的PC0、PC1端口输入的开关信号,确定8251A向红外通讯设备发送的红外编码(在此为了简化编码,发送的红外编码就是PC口的编码值),红外通讯设备将这一编码进行自发自收后,发回给8251A,通过程序判断8251A接收红外通讯发回的编码,根据这个编码,调用模式子程序(MODE1和MODE2),并设置红绿灯的亮灭时间。
模式子程序调用一次后,主程序将会再次查询开关信号,因此,改变开关0或1电平可以不断进行交通灯的模式转换。
3.控制程序源代码:
.MODELTINY
PCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,
也为DMA&32BITRAM板卡上的提供基地址)
Vendor_IDEQU10EBH;厂商ID号
Device_IDEQU8376;设备ID号
.STACK100
.DATA
IO_Bit8_BaseAddressDW?
msg0DB'BIOS不支持访问PCI$'
msg1DB'找不到StarPCI9052板卡$'
msg2DB'读位I/O空间基地址时出错$'
msg3DB'红外编码未收到$'
PA_ADDDW00F0H;8255PA口偏移量
PB_ADDDW00F1H;8255PB口偏移量
PC_ADDDW00F2H;8255PC口偏移量
COM_ADDDW00F3H;8255控制口偏移(CS1:
F0H--0FFH)
CTL_8251DW00E1H;8251控制字或状态字(CS2:
E0H--0EFH)
DATA_8251DW00E0H;8251读写数据
W_8253_T0DW00D0H;计数器地址
W_8253_CDW00D3H;控制字(CS3:
0D0H--0DFH)
LED_Data1DB01111101B
DB11111101B
DB10111101B
DB11010111B
DB11011111B
DB11011011B
LED_Data2DB01101100B
DB01111111B
DB10011100B
DB10111111B
DB11000110B
DB11110111B
DB11001001B
DB11111011B
.CODE
START:
MOVAX,@DATA
MOVDS,AX
NOP
CALLInitPCI
CALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址
CALLINIT_8255
CALLINIT_8253
CALLINIT_8251
MOVDX,PA_ADD;灯全熄灭
MOVAL,0ffH
OUTDX,AL
NONE:
MOVDX,PC_ADD;判断输入的开关信号(高电平或低电平)
INAL,DX
CALLSendout
CALLReceivein
CMPAL,0
JZS1
CMPAL,2
JZS2
CMPAL,1
JZS4
CMPAL,3
JZS5
JMPLOST
S1:
MOVsi,20
JMPSM1
S2:
MOVsi,40
SM1:
CALLMODE1
JMPNONE
S4:
MOVsi,20
JMPSM2
S5:
MOVsi,40
SM2:
CALLMODE2
JMPNONE
LOST:
LEADI,msg3
MOVAH,9
INT21H
JMPNONE
;-------------------------------------
SendoutPROCNEAR
PUSHAX
MOVDX,CTL_8251
Sendout1:
INAL,DX
TESTAL,01H;允许数据发送吗?
JZSendout1
DECDX;发送
POPAX
OUTDX,AL;发送给红外通讯
RET
SendoutENDP
ReceiveinPROCNEAR
MOVDX,CTL_8251
Receivein1:
INAL,DX
TESTAL,02H
JZReceivein1;有数据吗?
DECDX
INAL,DX
RET
ReceiveinENDP
MODE1PROCNEAR
MOVDX,PA_ADD
MOVBX,offsetLED_Data1
MOVAL,0
XLAT
OUTDX,AL;东西绿灯,南北红灯
movah,1
CALLsub_mode
calldl_3s
MOVAL,3;东西红灯,南北绿灯
XLAT
OUTDX,AL
movah,4
callsub_mode
calldl_3s
RET
MODE1ENDP
MODE2PROCNEAR
MOVDX,PA_ADD
MOVBX,offsetLED_Data2
MOVAL,0
XLAT
OUTDX,AL
movah,1
callsub_mode
movah,3
callsub_mode
movah,5
callsub_mode
movah,7
callsub_mode1
RET
MODE2ENDP
sub_modeprocnear;子程序,入口参数AH
callsub_mode1
INCAH
MOVAL,AH
XLAT
OUTDX,AL
ret
endp
sub_mode1procnear
MOVCX,SI
sub_MODE_1:
MOVAL,ah
XLAT
OUTDX,AL
CALLDL500ms
decah
MOVAL,ah
XLAT
OUTDX,AL
CALLDL500ms
incah
LOOPsub_MODE_1
ret
endp
INIT_8255PROCNEAR
MOVDX,COM_ADD
MOVAL,89h;A口方式,输出,C口输入
OUTDX,AL
RET
INIT_8255ENDP
INIT_8253PROCNEAR
MOVDX,W_8253_C
MOVAL,37H;定时器,方式
OUTDX,AL
MOVDX,W_8253_T0
MOVAL,26H;BCD码(2000000/26)=16*4800
OUTDX,AL
MOVAL,0
OUTDX,AL
RET
INIT_8253ENDP
INIT_8251PROCNEAR
CALLRESET_8251
MOVDX,CTL_8251
MOVAL,01111110B;异步,波特率系数为,个数据位,一个停止位,偶校验
OUTDX,AL
CALLDLTIME
MOVAL,17H;允许接收和发送发送数据,清错误标志
OUTDX,AL
CALL