红外控制交通灯的设计1.docx
《红外控制交通灯的设计1.docx》由会员分享,可在线阅读,更多相关《红外控制交通灯的设计1.docx(30页珍藏版)》请在冰点文库上搜索。
红外控制交通灯的设计1
合肥学院
计算机科学与技术系
微型计算机原理与接口技术
课程设计报告
2009~2010学年第一学期
课程
微型计算机原理与接口技术
课程设计名称
红外控制交通灯的设计
学生姓名
张飞
学号
0704013008
专业班级
07本(3)班
指导教师
李新路老师
2010年3月
一、题义分析及解决方案
1.题义需求分析:
本程序设计需通过红外通讯控制红、绿、黄发光二极管按十字路口红、绿、黄交通灯形式闪烁。
红外通信,即以红外线作为通信载体,通过红外光在空中的传播来传输数据的通信方式,它由发射端和接收端来完成。
在发射端,发送的数字信号经过适当的调制编码后,送入电光变换电路,经红外发射管转变为红外光脉冲发射到空中;在接收端,红外接收器对接收到的红外光脉冲进行光电变换,解调译码后恢复出原信号。
交通灯的变化规律根据实地查看,各个路口的交通灯的变化规律并不相同,本课程设计为了简化,只考虑了交通灯正常时的变化规律。
模式一(单行线)情况下,首先是东西直行绿灯亮,南北红灯亮,几秒后,东西绿灯闪烁,南北红灯亮,闪烁几次后,东西黄灯亮,而南北红灯亮,再过几秒后,东西红灯亮,南北绿灯亮,几秒后南北绿灯闪烁,最后变成黄灯亮,依此循环下去。
模式二(双行线)情况下,将黄灯当作左转绿灯,第二个红灯当作右转绿灯,首先是东西方向直行绿灯、右转绿灯和左转绿灯亮,南北红灯亮,几秒后,东西方向三个绿灯闪烁,闪烁几次后,变成东西红灯亮,南北方向直行绿灯、右转绿灯和左转绿灯亮,几秒后,南北方向三个绿灯闪烁,依此循环下去。
对此设计模拟交通灯变化规律,需要解决如下问题:
(1)交通灯用什么器材来模拟显示
(2)用什么芯片控制交通灯的亮灭及怎样控制?
(3)交通灯的两种模式之间如何切换?
(4)用什么芯片与红外通讯相连接?
怎样连接?
2.解决问题方法及思路:
(1)硬件部分
针对需求分析中的问题作如下解决:
(1)交通灯用发光二极管来模拟显示。
(2)交通灯与8255A的A口相连接,8255A初始化后,A口工作在方式0输出,用程序控制A口的输出即实现对交通灯的亮灭控制。
(3)开关1与2控制交通灯的模式,用户需要切换模式的时候,调节开关,程序查询开关1和2的电平信息,然后8251A向红外通讯发出相应编码,红外通讯自发自收后,8251A收到红外通讯发回的相应编码后,程序调用相应子程序控制8255A的A口输出,完成对模式的切换。
(4)用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:
时钟。
图18251A
2.选择芯片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口。
图28255A
方式0的工作特点:
这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。
其功能为:
两个8位通道:
通道A、B。
两个四位通道:
通道C高4位和低四位;任何一个通道可以作输入/输出;输出是锁存的;输入是不锁存的;在方式0时各个通道的输入/输出可有16种不同的组合。
方式0的使用场合:
同步传送是在外设控制过程的各种动作时间为固定,且已知的条件下使用的。
因此,传送中不要应答信号。
输入时,执行程序只要给出IN指令;而输出时,也只给出OUT指令,就能实现数据的输入或输出。
优点是程序简单,接口的硬件开销小。
8255A方式选择控制字说明:
控制字格式如下:
图38255A控制字格式
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
表28255A技术参数表
表2的主要参数说明:
8255A工作最大电流为120MA,VCC=-5V~+5V,I(DAR)工作电流最大为4MA。
图48255A内部结构
3.选择芯片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:
地址信号;
图58253引脚接线图
(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
表2 8253A的计数参数
8253A主要参数分析:
输入低电压的范围是-0.5V~0.8V,输出低电压的范围0.45V~2.4V,输入高电压的范围是2.2V~Vcc+0.5V。
而测试条件均为Vin=Vcc-0V,Vout=Vcc-0.45V。
4.选择红外通信设备
(1)红外通信在本实验中的作用:
通过红外发送管,发出载波信号,根据接收到的载波信号,获得红外编码,实现自发自收,程序再根据发回的红外编码控制交通灯模式。
(2)红外通信功能分析:
红外通信,即以红外线作为通信载体,通过红外光在空中的传播来传输数据的通信方式,它由发射端和接收端来完成。
在发射端,发送的数字信号经过适当的调制编码后,送入电光变换电路,经红外发射管转变为红外光脉冲发射到空中;在接收端,红外接收器对接收到的红外光脉冲进行光电变换,解调译码后恢复出原信号。
红外发射端发送数据时,是将待发送的二进制数据调制成一系列的脉冲信号后发射出去。
红外载波为频率38KHz(可调)的方波,采用脉宽调制PWM方式发送,通过待发送二进制数据的“0”或“1”控制两个脉冲之间的时间间隔,及PWM的占空比。
红外载波既可以通过外围硬件电路实现,也可以使用CPU内部的定时器的PWM功能实现。
红外接收端在收到38KHz的载波信号时,会输出低电平,否则输出高电平,从而可以将“时断时续”的红外光信号解调成一定周期的连续方波信号,经处理,便可以恢复出原数据信号。
IN:
串行数据输入
OUT:
串行数据输出
CLK:
载波输入,可接31250(B2区)频率输出
图6红外通讯原理图
信号调制如下图:
图7信号调制波形
先发一段前导码,以检验这组码是否为想要的码。
前导码由一个9ms的高电平和一个4ms的低电平组成。
然后再发32位数据代码,其中高电平为0.5ms,低电平为0.5ms的一个周期为代码“0”;高电平为0.5ms,低电平为1.5ms的一个周期为代码“1”
HS0038B的典型信号传输关系如下图
图8HS0038B的信号传输
5.选择发光二极管
(1)发光二极管在本实验中的作用:
本实验中用发光二极管模拟红绿交通灯的亮灭规律及模式转换。
(2)功能分析:
发光二极管采用共阳极接线法,当8255A的PA口相应端输出高电平时,发光二极管不导通,不发光;当输出低电平时,发光二极管导通,发光。
因此,8255A的PA口输出控制着交通灯亮灭的规律。
(3)发光二极管的控制逻辑:
模式一:
单行线模式,8个发光二极管的编码设置如下。
图98个发光二极管的设定
二进制编码
编码含义
01111101
东西方向直行绿灯亮,南北方向红灯亮
11111101
东西方向绿灯闪烁,南北方向红灯亮
10111101
东西方向黄灯亮,南北方向红灯亮
11010111
东西方向红灯亮,南北方向绿灯亮
11011111
东西方向红灯亮,南北方向绿灯闪烁
11011011
东西方向红灯亮,南北方向黄灯亮
表3模式一的编码设置
模式二:
双行线模式,8个发光二极管编码如下。
图108个发光二极管的设定
编码
编码含义
01101100
东西方向直行绿灯亮,左转红灯亮;南北方向直行红灯亮,左转红灯亮
01111111
方向直行绿灯亮,左转红灯闪烁;南北方向直行红灯闪烁,左转红灯闪烁
10011100
东西方向直行红灯亮,左转绿灯亮;南北方向直行红灯亮,左转红灯亮
10111111
东西方向直行红灯闪烁,左转绿灯亮;南北方向直行绿灯闪烁,左转红灯闪烁
11000110
东西方向直行红灯亮,左转红灯亮;南北方向直行绿灯亮,左转红灯亮
11110111
东西方向直行红灯闪烁,左转红灯闪烁;南北方向直行绿灯亮,左转红灯闪烁
11001001
东西方向直行红灯亮,左转红灯亮;南北方向直行红灯亮,左转绿灯亮
11111011
东西方向直行红灯闪烁,左转红灯闪烁;南北方向直行红灯闪烁,左转绿灯亮
表4模式二的编码设置
图11发光二极管共阳极接线法
6.选择逻辑电平开关
(1)逻辑电平开关在本实验中的作用:
逻辑电平开关在本设计中作为输入器件,通过其输入,决定8251A向红外通讯发送的编码,进而控制交通灯模式的转换。
它与8255A的PC口相连。
(2)逻辑电平开关的功能分析
逻辑电平开关可作为数值的输入器件,也可以表示逻辑值。
具体的是:
当开关拨上去时为输出+5V,代表的是逻辑值“1”,反之,当开关拨下来的时后输出的为0V,此时代表的逻辑值为“0”。
PC0
PC1
模式
交通灯间隔
红外编码
0
0
模式一
20秒
0
0
1
模式一
40秒
2
1
0
模式二
20秒
1
1
1
模式二
40秒
3
7.硬件总逻辑图及其说明:
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相连。
图12程序硬件原理图
三、控制程序设计
1.程序流程图:
2.程序设计思路:
编写程序,查询来自8255A的PC0、PC1端口输入的开关信号,确定8251A向红外通讯设备发送的红外编码(在此为了简化编码,发送的红外编码就是PC口的编码值),红外通讯设备将这一编码进行自发自收后,发回给8251A,通过程序判断8251A接收红外通讯发回的编码,根据这个编码,调用模式子程序(MODE1和MODE2),并设置红绿灯的亮灭时间。
模式子程序调用一次后,主程序将会再次查询开关信号,因此,改变开关0或1电平可以不断进行交通灯的模式转换。
3.控制程序源代码:
.MODELTINY
PCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA&32BITRAM板卡上的8237提供基地址)
Vendor_IDEQU10EBH;厂商ID号
Device_IDEQU8376;设备ID号
.STACK100
.DATA
IO_Bit8_BaseAddressDW?
msg0DB'BIOS不支持访问PCI$'
msg1DB'找不到StarPCI9052板卡$'
msg2DB'读8位I/O空间基地址时出错$'
msg3DB'红外编码未收到$'
PA_ADDDW00F0H;8255PA口偏移量
PB_ADDDW00F1H;8255PB口偏移量
PC_ADDDW00F2H;8255PC口偏移量
COM_ADDDW00F3H;8255控制口偏移(CS1:
0F0H--0FFH)
CTL_8251DW00E1H;8251控制字或状态字(CS2:
0E0H--0EFH)
DATA_8251DW00E0H;8251读写数据
W_8253_T0DW00D0H;计数器0地址
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
JZL1
CMPAL,2
JZL2
CMPAL,1
JZL4
CMPAL,3
JZL5
JMPLOST
L1:
MOVsi,20
JMPL_MODE1
L2:
MOVsi,40
L_MODE1:
CALLMODE1
JMPNONE
L4:
MOVsi,20
JMPL_MODE2
L5:
MOVsi,40
L_MODE2:
CALLMODE2
JMPNONE
LOST:
LEADI,msg3
MOVAH,9
INT21H
JMPNONE
;-------------------------------------
SendoutPROCNEAR
PUSHAX
MOVDX,CTL_8251
Sendout1:
INAL,DX
TESTAL,01H;允许数据发送吗?
JZSendout1
DECDX;发送
POPAX
OUTDX,AL;发送1给红外通讯
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,C