引言
照例先借下关键字们:PKU 微机实验 实验报告 基于微机的串行通信口扩展 8251A
看了下可怜的浏览量们,或许确实是我用一己之力刷出了这个惨淡博客的所有浏览量…真是有些绝望啊QAQ总觉得自己之前的博客写出来排版奇丑无比,于是尝试了一下markdown编辑器,希望能够变得更加美美美一点啦~哎呀还是要敢于尝试试错的呀,毕竟我还是个好奇宝宝23333
顺便之前由于乱七八糟的期末&期末后的堕落,微机实验系列断更了一段时间【你个傻孩子其实并没有人在追啦…而现在我的微机实验结果已经出来了,所以就顺路写一些课程反馈吧。强烈安利杨延军老师,超级儒雅有风度,有一种神奇的老干部的认真靠谱优雅绅士,同时又像清酒一样干净而美!从之前的各种总结可以想见,我经常出现各种bug改不出的悲剧情况,在濒临下课实验室基本走空的时候,老师就会听我讲下自己的思路,或者是亲身上阵帮我看代码。天惹真的是苏到爆炸!最后给分虽然确实挺惨淡的符合我的真实水平,但是还是十分痛并快乐着的疯狂的学习涨知识见男神的过程啦~
正文
终于啰啰嗦嗦进入正题了。基于微机的串行通信口扩展还是非常难的。基本套路可以参考课程计算机组成里讲的通讯的东西。
6.3.1 自发自收
用8251A 实现串行口异步通信,自发自收,波特率1200bps。采用查询方式发送与接收。从键盘输入发送字符。发送与接收的字符均在屏幕上显示。按ESC键返回DOS。
好处是指定了用查询方式,比起中断就会好些好多。大概的思路就是去初始化8253(前面的与时间有关的芯片),然后复杂的初始化8251。从键盘读入,如果是ESC键就直接跳到退出,否则就是要发送的了。一直等,等到能发送之后发送字符,然后一直等,等到能接收之后接收字符,同时显示。大概的套路就是这样啦,记着之前提到的程序查询的一些要点就好啦~
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AL,00010110B
MOV DX,0E483H
OUT DX,AL
MOV DX,0E480H
MOV AL,52
OUT DX,AL
MOV DX,0E4B9H
MOV AL,0
OUT DX,AL
OUT DX,AL
OUT DX,AL
MOV AL,40H
OUT DX,AL