【四.串行通讯接口8251实验】
实验十六串行通讯8251 一、 实验目的
1、了解串行通讯的基本原理。
2、掌握串行接口芯片8251的工作原理和编程方法。
二、 实验原理和内容
基础功能:
1、按图4-16-1连接好电路,(8251插通用插座)其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。
2、编程: 从键盘输入一个字符,将其ASCII码加 1 后发送出去,再接收回来在屏幕上显示,(或将内存制定区域内存放的一批数据通过8251A的TXD发送出去,然后从RXD接收回来,并在屏幕上或数码管上显示出来。)实现自发自收。 扩展功能:
双机通信,将发送端用小键盘发送数据,接收端用数码管显示接收的数据。
三、 硬件接线图及软件程序流程图
1. 硬件接线图(引用讲义)
2.软件程序流程图(引用讲义)
四、 源程序
DATA SEGMENT
STRING DB 'TRANSLATE ','$' STRING1 DB 'RECEIVE ','$' STRING2 DB 0DH,0AH,'$'
DATA ENDS
STACK SEGMENT STACK 'SATCK' DB 100 DUP(?) STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
;延时子程序
DELAY PROC NEAR PUSH CX
MOV CX,100H WAIT0: LOOP WAIT0 POP CX RET DELAY ENDP ;开始
START: MOV MOV ;8254初始化
MOV MOV OUT CALL DELAY
MOV MOV OUT CALL DELAY 初始化
MOV MOV OUT NOP
CALL DELAY
MOV OUT MOV OUT CALL DELAY
发送数据
GOON: MOV IN TEST JZ
;显示提示语句
MOV MOV INT
MOV AX,DATA DS,AX DX,283H
AL,16H ;0号计数器,读低字节,方式3 DX,AL DX,280H ;计数器地址为280H,计数初值为52 AL,34H DX,AL DX,2B9H ;控制端口 AL,40H ;内部复位命令 DX,AL AL,5EH ;方式控制字(01011110) DX,AL
AL,37H ;命令控制字(00110111) DX,AL DX,2B9H ;读状态字 AL,DX AL,01H
GOON;缓冲区为空显示提示语句否则继续检测 AH,09H
DX,OFFSET STRING 21H AH,01H
;8251; INT 21H ;检测是否为ESC键
CMP AL,1BH JZ EXIT INC AL;加1
MOV DX,2B8H OUT DX,AL
;接收数据
RECEIVE: MOV DX,2B9H IN AL,DX TEST AL,02H JZ RECEIVE
;显示提示语句
MOV AH,09H
MOV DX,OFFSET STRING2 INT 21H MOV AH,09H
MOV DX,OFFSET STRING1 INT 21H
MOV DX,2B8H
IN AL,DX MOV DL,AL
MOV AH,02H ;显示接收的数据 INT 21H MOV AH,09H
MOV DX,OFFSET STRING2 INT 21H
JMP GOON
EXIT: MOV AX,4C00H
INT 21H
CODE ENDS END START
五、 实验结果
键盘输入后加一发送,在屏幕上显示对应输入字符ASCII码加一后的字符,如:输入a显示b,输入1显示2。按ESC键后退出。
六、 实验总结
1.8254初始化选0号计数器,只写读写低8位,选择方式3,计数初值
为二进制;
2.方式控制字的确定如下图,异步方式、1个停止位、奇校验位,、8位数据、波特因子为16,故为5EH;
3.命令控制字的确定重点在于接收和发送都允许;
4.接收和发送数据前先检查状态字,看缓冲区是否为空; 5.单机通信中控制字后需要加入延时程序
七、 实验收获与心得体会
通过本次试验,让我对8251有了更深的了解。可以将书本上的理论应用到实际,更加充分的理解了芯片的原理及其使用。 本次试验中双机通信的扩展内容调试了很长时间,数码管必须等接收方按键后才可显示,无法做到实时显示故没有贴出代码,希望以后能有机会改进。
通过这四次实验,我在编程、调试、实验的过程中对于汇编语言有了更深的了解,对于微原课本上的原理理论也有了更好的理解。
最后,谢谢老师给予的指导,希望有机会能更多的接触此类实验。
八、 思考题
在实验中,你如何确定RxC,TxC的值,写出计算公式
答:RXC=TXC=8253输出时钟频率=8251波特率*波特率因子