北邮微机原理硬件实验报告完整版 下载本文

JMP OUTINPUT

;根据判断的按键状态,给al赋相应的偏移值 CASE0:MOV AL,0 JMP OUTINPUT CASE1:MOV AL,1 JMP OUTINPUT CASE2:MOV AL,2 JMP OUTINPUT CASE3:MOV AL,3 JMP OUTINPUT CASE4:MOV AL,4 JMP OUTINPUT CASE5:MOV AL,5 JMP OUTinput CASE6:MOV AL,6 JMP OUTINPUT CASE7:MOV AL,7 JMP OUTINPUT CASE8:MOV AL,8 JMP OUTINPUT CASE9:MOV AL,9 JMP OUTINPUT CASE10:MOV AL,10 JMP OUTINPUT CASE11:MOV AL,11 JMP OUTINPUT CASE12:MOV AL,12 JMP OUTINPUT CASE13:MOV AL,13 JMP OUTINPUT CASE14:MOV AL,14 JMP OUTINPUT CASE15:MOV AL,15 OUTINPUT:RET input ENDP

;主程序

START: MOV AX,DATA MOV DS,AX ;8255初始化 MOV DX,28BH

MOV AL,81H;C口输入 OUT DX,AL CALL DELAY

MOV DX,289H;B口位选数码管 MOV AL,01H OUT DX,AL CALL DELAY ;8254初始化 MOV DX,283H MOV AL,16H OUT DX,AL CALL DELAY

MOV MOV OUT CALL DELAY ;8251 MOV MOV OUT NOP

CALL DELAY MOV OUT MOV OUT CALL DELAY ; MOV MOV INT ;GOON: MOV IN TEST JZ CALL INC MOV OUT JMP RECEIVE CHUSHI: MOV AL,16

MOV OUT DX,280H AL,34H DX,AL 初始化 DX,2B9H AL,40H DX,AL AL,5EH DX,AL AL,37H DX,AL 显示提示语句 AH,09H

DX,OFFSET STRING 21H 发送数据

DX,2B9H ;读状态字 AL,DX AL,01H RECEIVE

input

CMP AL,16 JZ CHUSHI

AL ;加1 DX,2B8H DX,AL

CALL DELAY

DX,2B8H DX,AL

CALL DELAY

JMP RECEIVE ;接收数据

RECEIVE: MOV DX,2B9H ;读状态字 IN AL,DX

TEST AL,02H JZ GOON

MOV DX,2B8H

IN AL,DX ;数码管显示

MOV AH,0

MOV BX,OFFSET TABLE ADD BX,AX MOV AL,[BX]

MOV DX,288H;A口输出 OUT DX,AL

CALL DELAY1

JMP GOON CODE ENDS

END START

五 实验结果

自发自收:键盘输入字符后,加一发送,本机接收后在屏幕显示加一后的字符,按ESC退出。

拓展功能:小键盘输入,接收端数码管显示加1后的结果,可双机通信,支持连续发送。

六 实验总结

在编程时,由于使用的芯片较多,所以在编程顺序上发生了一定的混乱,有一些考虑不周导致的问题。本次实验除了8251A的发送接收外,大多数的知识在之前的实验中有了一定的基础,比如键盘扫描程序等,可以直接从之前的实验中移植过来,但怎样正确地控制好各个芯片有序工作是这个实验的重点。

在单机通信时,起初输入字符后没有反应,后来在每个控制字后添加了延时程序,显示正常。

双机调试花了许多时间,之前是发送后必须接收方按键后数码管才能显示,后来采取的措施是将原本的小键盘扫描程序中循环扫描改成只扫描一次。这样程序可以不断执行GOON和 RECEIVE,不需要接收方再按一次键即可实现连续通信,

数码管实时显示。在发现问题解决问题的过程中还有很多细节问题的改动,在此不再细说。每一次改动都能感觉到代码有了优化,直到最终出现正确的效果。

七 实验收获与心得体会

通过这次实验,我对8251A有了更好的理解。本实验中不止使用了8251,还使用了其他芯片,使我对各芯片的综合使用能力有了一定的提高。在之前课上学习8251A理论知识时,我对这个芯片没有很理解,只知道是串行可编程接口,甚至对某些部分的理解是错误的,经过了自己的实际体验才对之有了较多的理解,明白了它的使用原理。

这次的单机通信很简单,在进行了双机通信后才对8251双机通信的握手问题有了更好的了解。同时感觉到知识的交流很重要,在实验室时,开始时遇到问题就是自己去修改代码,始终没有找到问题的根源,在与老师和做成功的同学交流后才找到问题并最终修改成功。本实验代码中的键盘扫描程序使用了张煜昊的,因为自己的扫描程序解决不了这个问题,只有根本改变算法才行。

通过这四次的微原硬件实验,我的收获很大。虽然通过小学期对汇编语言有了一定的了解,但微原课本中的好多知识都是全新的,不自己去编程、调试很难能够真正去了解这其中的原理。

八 思考题

在实验中,你如何确定RxC,TxC的值,写出计算公式 答:RxC=TxC=8253输出时钟频率=8251波特率*波特率因子