循环灯实验报告与代码文档格式.docx
- 文档编号:20688852
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:15
- 大小:49.58KB
循环灯实验报告与代码文档格式.docx
《循环灯实验报告与代码文档格式.docx》由会员分享,可在线阅读,更多相关《循环灯实验报告与代码文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
每四个灯管一组,间隔2秒循环点亮。
按键盘的“A”,“B”,“C”,“D”分别表示选择的灯管数目(一个一组,两个一组,三个一组,四个一组),按键盘的“E”,“F”,表示选择时间(一秒两秒)。
程序启动时默认按第一种方式进行循环,当按动“A~F”时,根据设定情况随时改变循环方式,当按“0”键退出程序,所有灯管熄灭。
提示:
1:
主程序为键盘输入按’A’~’D’命令分支到各点亮功能程序段,按’0’退出。
2:
定时时间1秒2秒可由8253产生定时中断,通过IPQ2引起中断请求。
8253的定时器工作可参考“定时/计数器:
8253方波”。
3:
在中断服务程序中,通过8255A的端口B的PB4-PB7,端口C的PC0—PC7来设置发光二极管下一组灯点亮,其他灯都暗。
次序可从左到右,也可以从右到左。
4:
8255A输出点亮发光二极管可参考“8255A”并行口实验(三)。
二、设计思想:
使用8259中断服务子程序,来去执行中断,用8253方波计时器来去产生1秒和两秒的时间间隔。
把8253和8259结合正好可以把间隔一秒和两秒的计时器导入程序之中。
利用5255A交通灯的特性,把交通灯按要求轮流点亮。
(一)可编程并行接口芯片8255
系统中的8255线路8255的数据线片选信号线、地址线、读写控制线等分别与系统总线相连,其A、B、C三个端口以排针形式引出供825实验使用。
可编程并行接口Intel8255A,其内部结构如图所示,由以下
4个部分组成:
①数据总线缓冲器。
这是一个三态双向8位缓冲器,它是8255A与CPU系统数据总线的接口。
所有数据的发送与接收,
以及CPU发出的命令字和从8255A来的状态信息都是通过该缓冲器传送的。
②读/写控制逻辑。
读/写控制逻辑由读信号RD,写信号WR,选片信号CS以及端口选择信号A0、A1等组成。
读/写控制逻辑控制了总线的开放、关闭和信息传送的方向,以便把CPU的控制命令或输出数据送到相应的端口;
或把外设的信息或输入数据从相应的端口送到CPU。
8255A的基本操作及在TP86A、PC/TX和扩展板上的端口地址如下表所示。
③输入/输出端口A、B、C。
8255A包括3个8
位输入输出端口(port)。
每个端口都有一个数据输入寄存器和一个数据输出寄存器,输入时端口有三态缓冲器的功能,输出时端口有数据锁存器功能。
在实际应用中,PC口的8位可分为两个4位端口(0
方式下),也可以分成一个5位端口和一个3位端口(2方式下)来使用。
④A组和B组控制电路。
控制A,B,C三个端口的工作方式,A
组控制A口和C-4-口的上半部(PC4-PC7),B组控制B口和C口的下半部(PC0-PC3)的工作方式和输入输出。
A组和B组的命令寄存器还接收按位控制命令,以实现对PC口的按位置位/复位操作。
(二)Intel8253可编程定时/计数器
1片8253内部有3个计数器,分别称为计数器0、1、2,其结构完全,互相之间工作完全独立。
每个计数器有三个引脚和外部联系CLK:
计数脉冲输入,计数器对该引脚出现的信号进行计数,最高计数速率为2.6MHZ。
Gate:
门控输入,用于控制计数器是否对CLK计数。
OUT:
输出信号端。
每个计数器内部都有1个8位的控制寄存器,三个控制寄存器使用同一端口地址,在编程结构图中,画为1个控制寄存器。
每个计数器内部还有1个计数初值寄存器(CR)、1个计数执行部件(CE)和1个输出锁存器(OL),它们都是16位的。
执行部件(CE)是1个16位减法计数器,其起始值等于初值寄存器(CR)的值。
CR的值通过程序设置。
输出寄存器(OL)用来锁存执行部件(CE)的值,以便CPU读出。
原理:
通过Intel8253可编程定时/计数器方式3方波发生器与方式0计数结时产生中断风别产生的方波和中断来计数,配合可编程并行接口芯片8255来控制流水灯的循环点亮,通过键盘扫描来接受外部控制.并通过八段数码管将A,B,C,D显示,并且转入相应的模式执行。
实验连线:
8255A:
PA0-L15PA1-L14PA2-L13PA3-L11
PA4-L10PA5-L9PA6-L7PA7-L6
PB0-L5PB1-L3PB2-L2PB3-L1
8259:
连接138译码输入端A.B.C,其中A连A2,B连A3,C连A4,138使能控制输入端G与总线单元上方的GS相连。
将8259CS插孔与译码单元的Y0相连,中断源IR7与单脉冲单元的SP插孔相连。
用8芯扁平电缆将8259中断控制单元的数据总线插座与数据总线单元任一插座相连。
8253:
将8253CS与译码单元的Y1相连,中断源IR0与8253的OUT0口相连。
用8芯扁平电缆将8251串行通信单元的数据总线插座与数据总线单元任一插座相连。
GATE0与+5V相连,CLK0与频单元T7相连
三、功能流程图:
按键
ABCD
按键按键按键按键
EFEFEFEF
按键0
四、结果讨论:
刚开始使用循环计时来实现倒计时,计时会有误差,改为8253计时器之后,及时秒数比较准确。
因为要求可以随时切换状态,所以将检测有无按键以及按键之后的切换写成一个子程序,在需要切换的地方进行调用。
所有的模块都写成子程序,这样在调用的时候比较方便。
使用8259中断时,要注意关中断和开中断的位置,否则会造成中断脉冲按键不灵。
程序的关键是每个状态的相互切换。
附录:
实验代码:
(完整的源程序)
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE,ES:
CODE
ORG2000H
JMPA
PAEQU0FFD8H
PBEQU0FFD9H
PCEQU0FFDAH
PCTLEQU0FFDBH
OUTSEGEQU0FFDCH;
段控制口
OUTBITEQU0FFDDH;
位控制口/键扫口
IN_KEYEQU0FFDEH;
键盘读入口
ZXKEQU0FFDCH;
字型口
ZWKEQU0FFDDH;
字位口
Port0EQU0FFE4H
Port1EQU0FFE5H
SHOW1DB02H
FLAGDB?
PCC1DB07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH,0FFH,0FFH,0FFH,0FFH
PBC1DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,07FH,0BFH,0DFH,0EFH
PCC2DB03FH,0CFH,0F3H,0FCH,0FFH,0FFH
PBC2DB0FFH,0FFH,0FFH,0FFH,03FH,0CFH
PCC3DB01FH,0E3H,0FCH,0FFH
PBC3DB0FFH,0FFH,07FH,08FH
PCC4DB0FH,0F0H,0FFH
PBC4DB0FFH,0FFH,0FH
;
---------------------8253芯片初始化---------------------------
A:
MOVDX,0FFE3H;
控制口
MOVAL,36H;
计数器0,方式3,二进制计数
OUTDX,AL
MOVDX,0FFE0H
MOVAL,00
MOVAL,4bH
---------------------------------------------------------------
---------------------8255芯片初始化---------------------------
MOVDX,PCTL
MOVAL,80H;
10000000b
MOVDX,PA;
PA置0
MOVAL,0
MOVDX,PB
MOVAL,0FFH
MOVDX,PC
----------------------中断向量地址------------------------------
CLI
MOVAX,OFFSETINT8259
MOVBX,003CH
MOV[BX],AX
MOVBX,003EH
MOVAX,0000H
CALLFOR8259
STI
-----------------------------------------------------------------
JMP_AE
START:
CALLGetKey
CMPAL,0AH
JZNEXTA
CMPAL,0BH
JZNEXTB
CMPAL,0CH
JZNEXTC
CMPAL,0DH
JNZ_D
JMPNEXTD
_D:
CMPAL,00H
JNZSTART
JMPEXIT
NEXTA:
MOVFLAG,0
CMPAL,0EH
JZ_AE
CMPAL,0FH
JZ_AF
JMPNEXTA
_AE:
MOVSI,0
MOVDI,0
CALLE
JMPLAST
_AF:
CALLF
NEXTB:
MOVFLAG,1
JZ_BE
JZ_BF
JMPNEXTB
_BE:
_BF:
NEXTC:
MOVFLAG,2
JZ_CE
JZ_CF
JMPNEXTC
_CE:
_CF:
NEXTD:
MOVFLAG,3
JZ_DWE
JZ_DWF
_DWE:
_DWF:
EXIT:
CALLFINISH
JMPFIN
LAST:
JMPSTART
FIN:
HLT
------------------------------中断服务子程序-----------------------------
INT8259:
CMPFLAG,0
JZLA
CMPFLAG,1
JZLB
CMPFLAG,2
JZLC
JMPLD
LA:
MOVAL,PCC1[SI]
MOVAL,PBC1[DI]
CMPSI,0BH
JZCONA
INCSI
INCDI
JMPFINI
CONA:
MOVSI,00H
MOVDI,00H
LB:
MOVAL,PCC2[SI]
MOVAL,PBC2[DI]
CMPSI,05H
JZCONB
CONB:
LC:
MOVAL,PCC3[SI]
MOVAL,PBC3[DI]
CMPSI,03H
JZCONC
CONC:
LD:
MOVAL,PCC4[SI]
MOVAL,PBC4[DI]
CMPSI,02H
JZCOND
COND:
FINI:
MOVDX,PORT0
MOVAL,20H
IRET
---------------------8259芯片初始化------------------------------
FOR8259:
MOVAL,13H
MOVDX,Port0
MOVAL,08H
MOVDX,Port1
MOVAL,09H
MOVAL,7FH;
IRQ7
RET
------------------------------按键E-----------------------------
E:
MOVDX,PA
MOVAL,01H
MOVAL,4BH
------------------------------按键F-----------------------------
F:
MOVAL,96H
------------------------------按键0-----------------------------
FINISH:
MOVAL,80H
-----------------------键扫子程序------------------------------
GetKey:
;
moval,0ffh;
关显示口
movdx,OUTSEG
outdx,al
movbl,0
movah,0feh
movcx,8
key1:
moval,ah
movdx,OUTBIT
shlal,1
movah,al
nop
movdx,IN_KEY
inal,dx
notal
andal,0fh
jnzkey2
incbl
loopkey1
nkey:
moval,20h
ret
key2:
testal,1
jekey3
moval,0
jmpkey6
key3:
testal,2
jekey4
moval,8
key4:
testal,4
jekey5
moval,10h
key5:
testal,8
jenkey
moval,18h
key6:
addal,bl
cmpal,10h
jncfkey
movbx,offsetKeyTable
xlat
fkey:
KeyTable:
键码定义
db07h,04h,08h,05h,09h,06h,0ah,0bh
db01h,00h,02h,0fh,03h,0eh,0ch,0dh
----------------------------------------------------------------
CODEENDS
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 实验 报告 代码