河北科技大学课程设计报告学生姓名:学号:专业班级:课程名称:微型计算机原理及应用技术学年学期:2 0 1 2 —2 0 1 3 学年第一学期指导教师:2 0 13 年1 月课程设计成绩评定表目录一、设计题目 (1)二、设计目的 (1)三、设计原理及方案 (1)1、8251A的基本性能 (1)2、8251A的内部结构 (1)3、8251外部引脚图 (2)4、8251A的编程 (2)5、8251A的初始化 (3)四、实现方法 (5)1、程序流程图如下: (5)2、连线图 (5)3、8251A操作过程流程图 (7)4、试验程序(见附录) (7)五、实施结果 (7)六、改进意见及建议 (7)七、个人所做贡献 (8)八、设计体会 (8)九、同组成员名单 (8)十、附录 (9)一、设计题目双机通过两台试验箱串行通讯二、设计目的1、掌握8088/86实验串行口通信的方法。
2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
3、学习串行口通讯程序编写方法。
三、设计原理及方案1、8251A的基本性能8251A是可编程的串行通信接口芯片,基本性能有:(1).两种工作方式:同步方式,异步方式。
同步方式下,波特率为064K,异步方式下,波特率为0~19.2K。
(2).同步方式下的格式每个字符可以用5、6、7或8位来表示,并且内部能自动检测同步字符,从而实现同步。
除此之外,8251A也允许同步方式下增加奇/偶校验位进行校验。
(3).异步方式下的格式每个字符也可以用5、6、7或8位来表示,时钟频率为传输波特率的1、16或64倍,用1位作为奇/偶校验。
1个启动位。
并能根据编程为每个数据增加1个、1.5个或2个停止位。
可以检查假启动位,自动检测和处理终止字符。
(4).全双工的工作方式(5).提供出错检测2、8251A的内部结构发送器由发送缓冲器和发送控制电路两部分组成。
接收器由接收缓冲器和接收控制电路两部分组成。
数据总线缓冲器,读/写控制电路,调制解调控制电路。
8251A内部结构图3、8251外部引脚图8251的外部引脚下图所示,共28个引脚,每个引脚信号的输入输出方式如图中的箭头方向所示。
8251外部引脚图4、8251A的编程编程的内容包括两大方面:一是由CPU发出的控制字,即方式选择控制字和操作命令控制字;二是由8251A向CPU送出的状态字。
(1)、方式选择控制字(模式字)方式选择控制字的格式如图所示。
(2)、操作命令控制字(控制字)操作命令控制字的格式如下:(3)、状态字状态字的格式如下:5、8251A的初始化8251的初始化和操作流程下图所示。
8251初始化流程图a)芯片复位以后,第一次用奇地址端口写入的值作为模式字进入模式寄存器。
b)如果模式字中规定了8251A工作在同步模式,c)由CPU用奇地址端口写入的值将作为控制字送到控制寄存器,而用偶地址端口写入的值将作为数据送到数据输出缓冲寄存器。
四、实现方法1、程序流程图如下:2、连线图3、8251A操作过程流程图8251A操作过程流程图4、试验程序(见附录)五、实施结果双机串行通信实现了数据的双项收发。
两台试验箱A,B可相互发送、接受数据。
在一台小键盘键入字符,由8251A的发送端发送给另一台的8251A的接收端接收,然后在另一台LED 数码显示器上显示出来。
同样另一台也可做发送端发送字符。
六、改进意见及建议本次课程设计是通过8251的收发功能将两个试验箱实现串行通讯,我们组顺利实现了两台机箱的同时发送和接收数据的双机通讯。
而在本次试验中发送的一直都是一个字符而不能发送多位字符,我希望改进的是可以发送任意长短的字符,由用户自己定义。
七、个人所做贡献在本次试验中我负责程序的编写、修改和调试,我们在网上查找,在本机实验程序中查找,修改,在一条一条指令的研究后,在询问了别人意见后,最后定下了附录里的这段程序。
八、设计体会学生学习完理论后就要进行课程设计,因为理论课程学习是让学生学习基本理论知识,对课程内容和原理有比较深刻的理解,只要从理论上理解,不用考虑实际的可行性,而课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,不仅需要在理论上能实现而且还要考虑实际的可行性,不能纸上谈兵。
随着科学技术发展的日新日异,微型计算机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握微型计算机的开发技术是十分重要的。
尤其是在现在这个金融危机的时刻,找工作越来越难,只有加强自身的能力才能有一席立足之地。
回顾起此次接口课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说8251A芯片的使用,软件的应用技巧,对汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
九、同组成员名单十、附录OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN_KEY equ 08001h ; 键盘读入口CS8251D equ 09000h ; 串行通信控制器数据口地址CS8251C equ 09001h ; 串行通信控制器控制口地址data segmentLEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)RBuf db 0TBuf db 0LEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h KeyTable: ; 键码定义db 16h, 15h, 14h, 0ffhdb 13h, 12h, 11h, 10hdb 0dh, 0ch, 0bh, 0ahdb 0eh, 03h, 06h, 09hdb 0fh, 02h, 05h, 08hdb 00h, 01h, 04h, 07hcode segmentassume cs:code, ds:dataDelay proc nearpush ax ; 延时子程序push cxmov al, 0mov cx,axloop $pop cxpop axretDelay endpmov bx, offset LEDBufmov cl, 6 ; 共6个八段管mov ah, 00100000b ; 从左边开始显示DLoop:mov dx, OUTBITmov al, 0out dx,al ; 关所有八段管mov al, [bx]mov dx, OUTSEGout dx, almov dx, OUTBITmov al, ahout dx, al ; 显示一位八段管push axmov ah, 1call Delaypop axshr ah, 1inc bxdec cljnz DLoopmov dx, OUTBITmov al, 0out dx,al ; 关所有八段管retDisplayLED endpTestKey proc nearmov dx, OUTBITmov al, 0out dx, al ; 输出线置为0mov dx, IN_KEYin al, dx ; 读入键状态not aland al, 0fh ; 高四位不用retTestKey endpGetKey proc nearmov ch, 00100000bKLoop:mov dx, OUTBITmov al, ch ; 找出键所在列not alout dx, alshr ch, 1mov dx, IN_KEYin al, dxnot aland al, 0fhjne Goon_ ; 该列有键入dec cljnz KLoopmov cl, 0ffh ; 没有键按下, 返回0ffhjmp Exit1Goon_:dec clshl cl, 2 ; 键值= 列X 4 + 行mov ch, 4LoopC:test al, 1jnz Exit1shr al, 1inc cldec chjnz LoopCExit1:mov dx, OUTBITmov al, 0out dx, almov ch, 0mov bx, offset KeyTableadd bx, cxmov al, [bx] ; 取出键码mov bl, alWaitRelease:mov dx, OUTBITmov al, 0out dx, al ; 等键释放call Delaycall TestKeyjne WaitReleasemov al, blretGetKey endpIInit proc near ; 8251初始化mov dx, CS8251Cmov al, 01001111b ; 1停止位,无校验,8数据位, x64out dx, almov al, 00010101b ; 清出错标志, 允许发送接收out dx, alretIInit endpSend proc near ; 串口发送mov dx, CS8251Cmov al, 00010101b ; 清出错,允许发送接收out dx, alWaitTXD:in al, dxtest al, 1 ; 发送缓冲是否为空jz WaitTXDmov al, TBuf ; 取要发送的字mov dx, CS8251Dout dx, al ; 发送push cxmov cx,0ffffhloop $pop cxretSend endpReceive proc near ; 串口接收mov dx, CS8251CWaitRXD:in al, dxtest al, 2 ; 是否已收到一个字je WaitRXDmov dx, CS8251Din al, dx ; 读入mov RBuf, alretstart proc nearmov ax, datamov ds, axcall IInitmov LEDBuf, 0ffh ; 显示8.8.8.8.mov LEDBuf+1, 0ffhmov LEDBuf+2, 0ffhmov LEDBuf+3, 0ffhmov LEDBuf+4, 0mov LEDBuf+5, 0MLoop:call DisplayLED ; 显示mov dx, CS8251Cin al, dx ; 是否接收到一个字test al, 2jnz RcvDatacall TestKey ; 有键入?je MLoop ; 无键入, 继续显示call GetKey ; 读入键码and al, 0fh ; 显示键码mov TBuf, alcall Sendjmp MLoopRcvData:call Receive ; 读入接收到的字mov al, RBufand al, 0fh ; 只显示低四位mov ah, 0mov bx, offset LEDMAPadd bx, axmov al, [bx] ; 转换成显示码mov LEDBuf+5, aljmp MLoopStart endpcode endsend start。