IO接口卡设计2.docx
《IO接口卡设计2.docx》由会员分享,可在线阅读,更多相关《IO接口卡设计2.docx(14页珍藏版)》请在冰豆网上搜索。
IO接口卡设计2
微机原理
课
程
设
计
课题四I/O接口卡设计
(2)
一.设计内容:
设计一块I/O卡,该卡具有3个8位I/O口(A,B,C口),利用该I/O卡控制一个四位LED显示器,该卡插在PC机的IBM—PC扩展总线插槽上。
选用芯片8255接口芯片。
二.设计要求:
a)画出电路原理图。
b)说明工作原理。
c)编写利用该接口卡对键盘上键入的数字进行显示程序。
三.设计思路
I/O卡直接用来插入微机系统的扩展槽中,8255A芯片是接口卡设计中的主芯片,将A
~A
和AEN经过译码作为8255A的片选信号,而
和
分别作为8255A的读写信号。
四位的LED显示器连接成共阴极,将8255A的A端口的8个引脚经过驱动器与LED显示器的a~h相连,用8255A的C端口的低四位来控制选择那个显示器亮。
而由B端口接入的开关则确定键盘上是否键入数字?
若按键没有合上,即PB
=0则继续显示原来的数字。
若合上,就显示输入的数字。
首先由I/O卡的RESET将8255A芯片复位,由微机系统的扩展槽中20根地址线来决定8255A片选信号是否选通,由其工作原理图可知A端口地址0FF00H,B端口地址41H,C端口地址0FF02H,控制口地址43H。
由于是I/O防止地址重叠,从而将20根地址线全部作为译码器的输入,唯一确定I/O卡的地址。
经MS—DOS功能调用从键盘输入一串字符,(调用OAH号功能,其入口参数为DS:
DX,在DX第一个单元存放输入字符的最大允许值,第二个单元存放是实际输入字符的个数,接下来的单元存放输入的字符串),不管输入多少个数,始终只显示最后输入的四个数。
通过软件设计将由键盘输入的四个ASCII码数转换成相应的BCD码,取个位数,将此BCD码转换成字形码,在将字形码送入到8255A的A端口,而将O1H送入C端口,用来控制哪一个显示器亮,并调用10ms延迟程序。
依此类推,取十位,百位,千位进行相同的操作,只是送C端口的数据不同,依次为O3H,O5H,07H。
将键盘输入的数显示完以后,读入B端口的数,看是否再有键输入,若有,开始依据上述步骤显示新数据;若无,则一直显示此数。
四.分工设计
(1)王化荣8255的有关内容和最后整合
MOVAX,DATA
MOVDS,AX;设数据段寄存器的值
MOVAX,STACK
MOVSS,AX;设堆栈段寄存器的值
MOVDX,0FF03
MOVAL,80H
OUTDX,AL;写入模式字
(2)周增强电路设计框图
(3)杜琦伟检测输入字符和数据传送
MOVDI,OFFSETDISP3
MOVAH,09H;显示字符串功能
INT21H;读入路径名
MOVDX,OFFSETDISP2
MOVAH,0AH;从键盘读入字符功能号
INT21H
TESTDX,30H;检查输入数字否
JZNEXT;不为数字则继续取字符
MOVDI,BX
MOVSI,DX
INCSI
MOVAL,[SI];取字符
ANDAL,0FH
MOV[DI],AL
INCSI
MOVAL,[SI]
ANDAL,0FH
MOV[DI+1],AL
INCSI
MOVAL,[SI]
ANDAL,0FH
MOV[DI+2],AL
INCSI
MOVAL,[SI]
ANDAL,0FH
MOV[DI+3],AL
(4)周小波LED显示
MOVAL,[DI+3];取要显示的数字
MOVBX,OFFSETLEDADD;取显示代码表首址
XLAT;将数字转换成显示代码
MOV0FF00H,AL;将显示代码送入A口
MOVDX,0FF02H
MOVDX,01H;将0EH送入C口
CALLDELAY
MOVAL,[DI+2]
MOVBX,OFFSETLEDADD
XLAT
MOV0FF00H,AL
MOVDX,0FF02H
MOVDX,03H
CALLDELAY
MOVAL,[DI+1]
MOVBX,OFFSETLEDADD
XLAT
MOV0FF00H,AL
MOVDX,0FF02H
MOVDX,05H
CALLDELAY
MOVAL,[DI]
MOVBX,OFFSETLEDADD
XLAT
MOV0FF00H,AL
MOVDX,0FF02H
MOVDX,07H
CALLDELAY
DELAYMOVCX,0021H
P1:
MOVDX,0006H
P2:
DECDX
JNZP2
DECCX
JNZP1
RET
LEDADD:
DB40H
DB79H
DB24H
DB30H
DB19H
DB12H
DB02H
DB78H
DB00H
DB10H
CODEENDS
五.软件设计及流程图:
系统初始化
8255A初始化
读字符
是否为数字N
Y
转换为BCD码
取个位数
转化为字形码
字形码送A口
C口←01H
CALLDELAY
取十位数
转化为字形码
字形码送A口
C口←03H
CALLDELAY
取百位数
转化为字形码
字形码送A口
C口←05H
CALLDELAY
取千位数
转化为字形码
字形码送A口
C口←07H
CALLDELAY
读B口
YZF=1N
设计程序:
DATASEGMENT
DISP2DB100DUP(?
)
DISP3DB"pleaseinputchar"
DATAENDS
STACKSEGMENT
TOPEQULENGTHSTA
DW64DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX;设数据段寄存器的值
MOVAX,STACK
MOVSS,AX;设堆栈段寄存器的值
NEXT:
MOVDI,OFFSETDISP3
MOVAH,09H;显示字符串功能
INT21H;读入路径名
MOVDX,OFFSETDISP2
MOVAH,0AH;从键盘读入字符功能号
INT21H
TEXTDX,30H;检查输入数字否
JZNEXT;不为数字则继续取字符
MOVDI,BX
MOVSI,DX
INCSI
MOVAL,[SI];取字符
ANDAL,0FH
MOV[DI],AL
INCSI
MOVAL,[SI]
ANDAL,0FH
MOV[DI+1],AL
INCSI
MOVAL,[SI]
ANDAL,0FH
MOV[DI+2],AL
INCSI
MOVAL,[SI]
ANDAL,0FH
MOV[DI+3],AL
NEXT2:
MOVAL,[DI+3];取要显示的数字
MOVBX,OFFSETLEDADD;取显示代码表首址
XLAT;将数字转换成显示代码
MOV0FF00H,AL;将显示代码送入A口
MOVDX,0FF02H
MOVDX,01H;将01H送入C口
CALLDELAY
MOVAL,[DI+2]
MOVBX,OFFSETLEDADD
XLAT
MOV0FF00H,AL
MOVDX,0FF02H
MOVDX,03H
CALLDELAY
MOVAL,[DI+1]
MOVBX,OFFSETLEDADD
XLAT
MOV0FF00H,AL
MOVDX,0FF02H
MOVDX,05H
CALLDELAY
MOVAL,[DI]
MOVBX,OFFSETLEDADD
XLAT
MOV0FF00H,AL
MOVDX,0FF02H
MOVDX,07H
CALLDELAY
DELAYMOVCX,0500H
P1:
MOVDX,0500H
P2:
DECDX
JNZP2
DECCX
JNZP1
RET
LEDADD:
DB40H
DB79H
DB24H
DB30H
DB19H
DB12H
DB02H
DB78H
DB00H
DB10H
CODEENDS
END
六8255ALED数码显示器原理图
.
七课程设计感想:
以前对书本上的知识掌握得不是很好,缺乏实践。
通过这次的课程设计,我明白了很多以前不懂的地方,我们这一组是设计利用8255A芯片设计I/O接口卡,用LED显示器显示数字。
之前我对这一部分的知识还不太了解,但是开始设计后,通过查阅书籍,还有同组其他同学的帮助,逐渐弄懂该怎样设计。
在这次课程设计中,最开心的就是和同组的其他同学一起合作,各自分工,一起讨论的各个细节,大家合作得很愉快。
总之,从这次课程设计中,我学到了很多东西。
很感谢学校给我们这次课程设计的机会,还有老师对我们的辛勤指导。
希望以后还有这样的机会!
八.参考文献.
《微型计算机原理与接口技术》冯博琴主编清华大学出版