接口技术.docx
《接口技术.docx》由会员分享,可在线阅读,更多相关《接口技术.docx(11页珍藏版)》请在冰豆网上搜索。
![接口技术.docx](https://file1.bdocx.com/fileroot1/2023-2/21/ebca0d97-bb20-4e78-b68f-b16a57d185f5/ebca0d97-bb20-4e78-b68f-b16a57d185f51.gif)
接口技术
接口技术
课程设计报告书
课程名称:
红绿交通灯
班级:
学号:
姓名:
一.实现方法
利用8255可编程接口的A口(PA7-PA0)、B口(PB7-PB0)、C口(PC7-PC0)控制发光二级管(红、绿灯)的L1-L8和开关KK1-KK2,使发光二级管按照十字路口交通灯的规律交替发光,模拟交通信号灯的工作。
发光二级管(LED)显示电路
8个LEDL1-L8,4个红灯、4个绿灯
L=0LED亮;L=LED灭
开关对交通灯的控制
开关KK2=0红灯皆亮;开关KK2=1绿灯皆亮
开关KK1=0启动交通灯的亮灭;开关KK1=1停止交通灯的亮灭(所有发光二级管皆灭)
交通灯亮灭规律参考
南北方向绿灯亮、东西方向红灯亮20秒
南北方向红灯亮、东西方向绿灯亮20秒
重复上述过程
注:
20秒定时由8253控制
二.总体设计思想
通过并行接口芯片8255A和8086计算机的硬件连接,以及通过8253延时的方法,来实现十字路口交通灯的模拟控制。
系统原理图示
8255的工作方式
方式0---基本输入输出方式;方式1---选通输入输出方式;
方式2---双向选通输入输出方式。
8255的引脚信号
8255A的引脚如图7.5所示,分为数据线、地址线、读/写控制线、输入/输出端口线和电源线。
D7~D0(databus):
三态、双向数据线,与CPU数据总线连接,用来传送数据。
(chipselect):
片选信号线,低电平有效时,芯片被选中。
A1,A0(portaddress):
地址线,用来选择内部端口。
(read):
读出信号线,低电平有效时,允许数据读出。
(write):
写入信号线,低电平有效时,允许数据写入。
RESET(reset):
复位信号线,高电平有效时,将所有内部寄存器(包括控制寄存器)清0。
PA7~PA0(portA):
A口输入/输出信号线。
PB7~PB0(portB):
B口输入/输出信号线。
PC7~PC0(portC):
C口输入/输出信号线。
VCC:
+5V电源。
GND:
电源地线。
8253的工作原理
8253是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每个计数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。
其CLK0~CLK2是计数器0~2的时钟脉冲输入端,GATE0~GATE2是门控脉冲输入端,OUT0~OUT2是输出端。
三.总体框图
CS8253
GATE2
8253CLK2
OUT2
8253
PA0-PA7+5VCS1CS0CLK4KK1KK2KK3
PA0-PA7
PC0
PC1
PC2
PC3
8255CS
8255
PA0-PA7
设置数据段
初始化8255
执行功能1
红灯皆亮,绿灯皆灭
绿灯皆亮,红灯皆灭
执行功能2
南北红灯,东西绿灯,延时20秒
南北绿灯,东西红灯,延时20秒
灯全灭
4.软件设计
所得结果
1)KK3=1时,KK2=0,红灯全亮,绿灯全灭;KK2=1,红灯全灭,绿灯全亮。
(2)KK3=0时,KK1=0,南北方向红灯全亮,东西方向绿灯全亮,延时20秒,南北方向绿灯全亮,东西方向红灯全亮,延时20秒……不断循环,如果在循环过程中使KK1=0,红灯绿灯全灭。
(3)在程序执行过程中,根据KK3的状态可以即时响应以分别实现KK1和KK2的功能。
datasegment;设置数据段,用端口号代替地址
portaequ04b0h
portbequ04b2h
portcequ04b4h
ptcon8255equ04b6h
port0equ04a0h
port1equ04a2h
port2equ04a4h
ptcon8253equ04a6h
dataends;数据段设置完毕
assumecs:
code
codesegmentpublic
org100h;程序从100h处开始执行
start:
movdx,ptcon8255;初始化8255,方式0,A口输出,C口低4位输入
moval,81h
outdx,al
putin1:
movdx,porta
moval,01010101b;红灯皆亮,绿灯皆灭
outdx,al
then1:
movdx,portc
inal,dx
testal,04h
jnzputin1;检测KK2,KK2=1,则执行putin1;否则顺序执行
movdx,porta
moval,10101010b;绿灯皆亮,红灯皆灭
outdx,al
switch:
movdx,portc
inal,dx
testal,08h;检测kk3,kk3=1,执行then1;kk3=0,执行then2
jnzthen1
putin2:
movdx,porta
moval,0ffh;红灯绿灯皆灭
outdx,al
then2:
movdx,portc
inal,dx
testal,01h;检测kk1,kk1=1,执行putin2;kk1=0,顺序执行
jnzputin2
movdx,porta
moval,10100101b;南北方向绿灯亮、东西方向红灯亮
outdx,al
movcx,200
next1:
calldelay;调用延时程序,延时20秒
loopnext1
movdx,porta
moval,01011010b;南北方向红灯亮、东西方向绿灯亮
outdx,al
movcx,200
next2:
calldelay;调用延时程序,延时20秒
loopnext2
jmpswitch;跳回switch,继续查询KK3状态
delay:
movdx,ptcon8253;初始化8253
moval,0b0h
outdx,al
movax,18750;设置初始值
movdx,port2
outdx,al
moval,ah
outdx,al
wait1:
movdx,portc
inal,dx
testal,08h;程序执行过程中检测kk3状态
jnzthen1
testal,01h;程序执行过程中检测kk1状态
jnzputin2
movdx,portc
inal,dx
testal,02h
jzwait1
ret
codeends
endstart;程序结束
end