微型计算机接口技术课程设计双机通信.docx
微型计算机接口技术课程设计报告任课教师: 指导教师: 学生学号: 学生姓名: 所学专业:年月日名目一、设计题目-1二、设计目的-1三、设计原理及方案-11.8251 的根本性能-12.8251 的内部构造及外部引脚13. 8251 在异步方式下的 TXD 信号上的数据传输格式34. 8251 的编程-3四、实现方法-6五、实施结果- -61. 试验程序-62.试验步骤-13六、其他-13七、设计体会-15一、设计题目8251A 串行通信一、设计目的1. 把握 8251 的工作方式及应用;2. 了解有关串口通讯的学问。三、设计原理及方案1.8251 的根本性能8251 是可编程的串行通信接口,可以治理信号变化范围很大的串行数据通信。有以下根本性能:(1) 通过编程,可以工作在同步方式,也可以工作在异步方式;(2) 同步方式下,波特率为 064K,异步方式下,波特率为 019.2K;(3) 在同步方式时,可以用58 位来代表字符,内部或外部同步,可自动插入同步字符;(4) 在异步方式时,也使用 58 位来代表字符,自动为每个数据增加 1 个启动位,并能够依据编程为每个数据增加 1 个、1.5 个或 2 个停顿位;(5) 具有奇偶、溢出和帧错误检测力量;(6) 全双工,双缓冲器发送和接收器。留意:8251 尽管通过了 RS-232 规定的根本掌握信号,但并没有供给规定的全部信号。2.8251 的内部构造及外部引脚8251 的内部构造图如图 1 所示,可以看出,8251 有 7 个主要局部,即数据总线缓冲器、读/写掌握规律电路、调制/解调掌握电路、发送缓冲器、 发送掌握电路、接收缓冲器和接收掌握电路,图中还标识出了每个局部对外的引脚。图 6-18251 内部构造图8251 的外部引脚如图 2 所示,共 28 个引脚,每个引脚信号的输入输出方式如图中的箭头方向所示。图 6-2 8251 外部引脚图3. 8251 在异步方式下的 TXD 信号上的数据传输格式图 3 示意了 8251 工作在异步方式下的 TXD 信号上的数据传输格式。数据位与停顿位的位数可以由编程指定。图 38251 工作在异地方式下 TXD 信号的数据传输格式4. 8251 的编程对 8251 的编程就是对 8251 的存放器的操作,下面分别给出 8251 的几个存放器的格式。(1) 方式掌握字方式掌握字用来指定通信方式及其方式下的数据格式,具体各位的定义如图 4所示。图 48251 方式掌握字(2) 命令掌握字命令掌握字用于指定 8251 进展某种操作如发送、接收、内部复位和检测同步字符等或处于某种工作状态,以便接收或发送数据。图 5 所示的是 8251 命令掌握字各位的定义。图 58251 命令掌握字格式(3) 状态字CPU 通过状态字来了解 8251 当前的工作状态,以打算下一步的操作,8251 的状态字如图 6 所示。图 68251 状态字格式(4) 系统初始化8251 的初始化和操作流程如图 7 所示。a) 芯片复位以后,第一次用奇地址端口写入的值作为模式字进入模式存放器。b) 假设模式字中规定了 8251A 工作在同步模式,c) 由 CPU 用奇地址端口写入的值将作为掌握字送到掌握存放器,而用偶地址端口写入的值将作为数图 78251 初始化流程图四、实现方法8251A 的引脚上有一“掌握/信号”信号 C/D,此信号和“读/写”信号合起来通知8251A 当前读写的是数据还是掌握字.状态字。当 C/D=0进展读写时,读出和写入的是数据。当 C/D=1进展写入时,写入的是掌握字、方式字和同步字符;C/D=1进展读出时,是从状态存放器中读出的状态。那么,在 C/D=1写入时,到底写到哪一个存放器呢?这涉及8251A 初始化的有关商定。这个商定有三条: (1)芯片复位后,第一次用C/D=1写入的值是方式字;(2)假设方式字中规定了同部方式,接着用C/D=1 写入的就是同部字符;(3)在此之后,以 C/D=1写入的都被作为命令字。从原则上来说, 象8251A 这样的8位接口芯片,连接在16位系统时,低8位的数据总写到偶地址, 高8位的数据总写到奇地址. STD5221也遵从这个原则,不将地址总线的最低位 A0连到8251A 的地址线上,而将地址总线 A1作为8251A 的地址最低位地址总线 A0 经过反相后连到8251A 的 C/D 端.(在常见的具有 USART 的PC 系统中,A0是直接连接到8251A 的C/D 端,与STD5221相反,这一点在应用时要留意)。注:据试验结果,在 C/D=1写入的第一个命令字之后,先向数据口写同步字符,才能启动同步发送(在流程图中有标示)。五实施结果2.试验程序OUTBITequ 08002h; 位掌握口OUTSEGequ 08004h; 段掌握口IN_KEYequ 08001h; 键盘读入口CS8251Dequ 09000h;串行通信掌握器数据口地址CS8251Cequ 09001h;串行通信掌握器掌握口地址datasegmentLEDBuf db6 dup(?); 显示缓冲Numdb1 dup(?); 显示的数据DelayT db1 dup(?)RBufdb0TBufdb0LEDMAP:; 八段管显示码db3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hKeyTable:; 键码定义db16h, 15h, 14h, 0ffh db13h, 12h, 11h, 10h db0dh, 0ch, 0bh, 0ah db0eh, 03h, 06h, 09h db0fh, 02h, 05h, 08h db00h, 01h, 04h, 07hcodesegmentassume cs:code, ds:dataDelayprocnearpushax; 延时子程序pushcxmoval, 0movcx,axloop$popcxpopax retDelayendpDisplayLED proc nearmovbx, offset LEDBufmovcl, 6; 共6个八段管movah, 00100000b ; 从左边开头显示DLoop:movdx, OUTBIT moval, 0outdx,al; 关全部八段管moval, bxmovdx, OUTSEG outdx, almovdx, OUTBIT moval, ahoutdx, al; 显示一位八段管pushaxmovah, 1callDelay popaxshrah, 1incbxdeccljnzDLoopmovdx, OUTBIT moval, 0outdx,al; 关全部八段管ret DisplayLED endpTestKey proc nearmovdx, OUTBIT moval, 0outdx, al; 输出线置为0movdx, IN_KEYinal, dx; 读入键状态notalandal, 0fh; 高四位不用ret TestKey endpGetKey proc nearmovch, 00100000b movcl, 6KLoop:Goon_:LoopC:movdx, OUTBITmoval, ch; 找出键所在列notaloutdx, alshrch, 1movdx, IN_KEY inal, dxnotalandal, 0fhjneGoon_; 该列有键入deccljnzKLoopmovcl, 0ffh; 没有键按下, 返回 0ffh jmpExit1decclshlcl, 2; 键值 = 列 X 4 + 行movch, 4testal, 1jnzExit1shral, 1inccldecchExit1:jnzLoopCmovdx, OUTBIT moval, 0outdx, almovch, 0movbx, offset KeyTable addbx, cxmoval, bx; 取出键码movbl, alWaitRelease:movdx, OUTBIT moval, 0outdx, al; 等键释放movah, 10 callDelay callTestKeyjneWaitRelease moval, blret GetKey endpIInitproc near; 8251初始化movdx, CS8251Cmoval, 01001111b; 1停顿位,无校验,8数据位, x64outdx, almov outal, 00010101bdx, al; 清出错标志, 允许发送接收retIInitendpSendproc near; 串口发送movdx, CS8251Cmoval, 00010101b; 清出错,允许发送接收outdx, al WaitTXD:inal, dxtestal, 1; 发送缓冲是否为空jzWaitTXDmoval, TBufmovdx, CS8251D outdx, alpushcxmovcx,0ffffhloop$popcx retmovWaitRXD:dx, CS8251Cinal, dxtestjeal, 2WaitRXD; 是否已收到一个字movdx, CS8251Dinal, dx; 读入movRBuf, alretSendendp Receive proc near; 取要发送的字; 发送; 串口接收Receive endpstartprocnearmovax, datamovds, ax callIInitmovLEDBuf, 0ffh; 显示 8.8.8.8.movLEDBuf+1, 0ffhmovLEDBuf+2, 0ffhmovLEDBuf+3, 0ffhmovLEDBuf+4, 0movLEDBuf+5, 0MLoop:callDisplayLED; 显示movdx, CS8251Cinal, dx; 是否接收到一个字testal, 2jnzRcvDatacallTestKey; 有键入?jeMLoop; 无键入, 连续显示callGetKey; 读入键码andal, 0fh; 显示键码movTBuf, alcallSendjmpRcvData:MLoopcallReceive;读入接收到的字moval, RBufandal, 0fh;只显示低四位movah, 0movbx, offset LEDMAP addbx, axmoval, bx; 转换成显示码movLEDBuf+5, al jmpMLoopStartendpcodeendsend start2.试验步骤(1) 按图 10 连接试验线路;(2) 为两台机器分别编写试验程序,编译、链接后装入系统;(3) 为发送机初始化发送数据;(4) 首先运行接收机上的程序,等待接收数据,然后运行发送机上的程序,将数据发送到串口。(5) 观看接收机端屏幕上的显示是否与发送机端初始的数据一样,验证程序功能。六、改进意见和建议在做这次课程设计时,我就在思考,既然已经实现了两台计算机的通信,那应当如何实现多台计算机的通信那?我会更多的学习接口学问,完成对本次课程设计的改进。七、其他1. 完成设计的关键技术要想顺当完成这次课程设计,首先要对 8251A 芯片有充分的生疏,对其根本性能,内部构造,外部引脚以及它的初始化流程等等要格外清楚。正确的编写两台计算机之间通信的试验员程序代码,并依据试验程序连接电路,是本次课程设计成功完成的关键。2. 程序设计流程图收到中断的程序流程图如图:开始从 8251A 数据口取入一个将此字节显示在微机屏幕上去除 8259A 中 ISR 的标志承受的字节为“!”?YN中断完毕 IRET置 IRQ2 的中断屏蔽位为 1,即制止 IRQ2 中断开中断 STI用 INT 21H 的 4CH 功能调用返回 DOS主程序流程图:开 始置 8253 定时器 1 为模式 3,并赐予其初始值初始化 8251 为 8 个数据位,1 个停顿位,波特率因子为16,无奇偶校验,并处于允许接收和放射状态提示用户:“在主机键盘上输入字符”,将显示在终端屏幕上;键入“!”则完毕发送过程主机从键盘上输入一个字符并存入 BL从 8251 命令端口取状态字节放入 ALN状态字节最低位 TXRDY=1?Y通过 8251 数据口,主机把 BL 中字节送出N该字节为“!”吗?Y显示提示信息:用户在键盘上输入字符,将显示在显示器上,用“!”完毕程序将承受中断效劳程序的入口地址,写入中断矢量表0AH 中断位置开放 IRQ2 对应的中断屏蔽位开中断死循环等待硬件中断3. 在本次课程设计中,我和我们组的同学齐心协力,大家一起努力完成了这一次的课程设计。我和王昊同学完成了一台计算机试验箱的连接,其他三名同学完成另一台的连接。试验程序代码是大家共同编写,修改完成的。七、设计体会课程设计是培育我们综合运用所学学问 ,觉察,提出,分析和解决实际问题,熬炼实践力量的重要环节,是对我们实际工作力量的具体训练和考察过程.随着科学技术进展的日日异,微型计算机已经成为当今计算机应用中空前活泼的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说把握微型计算机的开发技术是格外重要的。通过这次的学习,了解了计算机之间串口通信的原理,以及生疏了 8251A 芯片的功能特性和编程方法。