《微机接口 8251串口实验报告.doc》由会员分享,可在线阅读,更多相关《微机接口 8251串口实验报告.doc(13页珍藏版)》请在三一办公上搜索。
1、浙江工业大学计算机学院实 验 报 告实验名称 8251串行接口 姓 名 学 号 班 级 教 师 日 期 一、实验内容与要求1.1 实验内容了解串行通信接口的工作原理和工作过程,掌握编写初始化程序和通信程序的方法。设计实验电路,编写实验程序,使实现从键盘输入“a”到“z”范围的字母,将其ASCII码加四后串行发送出去,再从串行口接收回来在屏幕上显示(若输入“w”、“x”、“y”、“z”,则分别显示“a”、“b”、“c”、“d”),实现自发自收。1.2 实验要求(1) 具有一定的汇编编程的基础,实验前能根据实验要求画出实验流程图,同时写出其所对应代码;(2) 要了解8251A中断控制器的内部结构和
2、外部引脚,理解芯片的工作原理和工作过程。熟悉8251A芯片的命令字,能对其进行编程;(3) 了解8253A定时/计数器,知道如何通过其计数器产生发送和接收时钟;(4) 熟悉实验平台TPC-USB了解各个接口的名称与功能,进行实验时能快速并正确地连接好实验电路;(5) 连接PC与TPC-USB平台,用微机实验软件运行程序。在屏幕上显示提示信息“Please input a letter!”,从键盘输入“a”到“z”范围的字母,将其ASCII码加四后串行发送出去,再从串行口接收回来在屏幕上显示。若输入“w”“x”、“y”、“z”,则分别显示“a”、“b”、“c”、“d”;若输入Esc,则退出程序。
3、二、实验原理与硬件连线2.1 实验原理(1)8251A的内部结构:图1 8251的内部结构图发送器: 发送缓冲器 + 发送移位寄存器 + 发送控制电路。发送控制电路用来控制和管理发送过程。在其控制下,发送缓冲器将来自CPU的并行数据串行化,通过TxD发送出去。 异步方式:控制电路在数据帧中加上起始、校验和停止位。 同步方式:控制电路在数据帧中插入同步字符和校验位。 同步方式发送过程中,两字符间不允许有间隔。若CPU未及时提供新字符,则控制电路自动补上同步字符。接收器: 接收缓冲器 + 接收移位寄存器 + 接收控制电路。接收控制电路用来控制和管理接收过程。在其管理下,接收器从RxD上接收串行数据
4、,并行化后存入接收缓冲器。 异步方式:8251监视RxD线。当发现时,开始接收一帧数据。经校验后剔除起始位和停止位等,将有效信息转换为并行数据存入接收缓冲器。 同步方式:8251监视RxD线,依次对数据移位。每收到一位,都将接收寄存器与同步字符比较。若不等,则移入下一位继续比较;若相等,则表示搜索到同步字符,SYNDET=1。这时在RxC的同步下移位RxD上的数据,并将其组装成并行数据,送入接收缓冲器。数据总线缓冲器: 8位三态双向缓冲区,用于在CPU与8251之间传送数据、状态和控制信息。读/写控制逻辑: 对CS, RD, WR, C/D等信号进行译码,以确定8251的操作。Modem控制:
5、 在远距离通信时,该电路提供了与Modem联络的信号;在近距离串行通信时,该电路提供了与外设联络的应答信号。(2)8251A的编程:方式命令字:指定8251A的通信方式 (同步、异步)及其约定的数据帧格式。初始化时使用。实验时的方式控制字为:MOV AL,01001110B=4eH 操作命令字: 指定8251A进行何种操作(发送、接收、内部复位等); 设置某种工作状态,以便接收和发送数据。实验时的操作命令字为:MOV AL,00100111B=27H状态字:报告8251A何时可发送和接收数据,以及接收的数据有无错误。实验中通过:IN AL,DX 读取8251的状态字,再由TEXT AL,0Xh
6、来检验某些位是否达到要求。(3)8251A的初始化编程:注意:在接通电源是,8251A能通过硬件电路自动进入复位状态,但不能保证总是正确地复位。为了保证在设置方式字和命令字之前已经正确复位,一般可以先向8251A的控制口连续写入3个全0,然后再向该端口写入一个是D6位为1的复位命令字(40H),使8251A可靠复位。2.2 硬件连线 实验连线图如下图2所示:图2 TPC-USB平台串行实验连接图三、设计思路、步骤和程序流程图3.1 设计思路本实验要求从键盘输入“a”到“z”范围的字母,将其ASCII码加四后串行发送出去,再从串行口接收回来在屏幕上显示(若输入“w”、“x”、“y”、“z”,则分
7、别显示“a”、“b”、“c”、“d”),实现自发自收。所以要采用一个8251A串行接口芯片。而在串行通信中,无论发送还是接收数据,都必须有时钟脉冲信号对传送的数据进行定位和同步控制。所以还需要8253计数器用来产生8251的发送和接收时钟。了解了两个芯片的工作原理和编程,掌握串行通信接口的工作原理和工作过程后,画出程序流程图,根据流程图编写出程序,最后连接好实验电路,运行程序,观察实验结果是否与预期的一样。3.2 实验步骤(1) 按图2连接好电路(8251插在通用板上)。 其中8253计数器用来产生8251的发送和接收时钟,TxD和RxD连在一起。图示电路8251的控制口地址为2B9H,数据口
8、地址为2B8H。8253计数器初值=时钟频率/(波特率*波特率因子),这里的时钟频率为1MHz,波特率若选1200,波特率因子若选为16,则计数器初值为52。(2) 根据实验流程图,编程并运行。(3) 从键盘输入字符,观察屏幕显示的结果。3.3 程序流程图图3 TPC-USB平台串行实验流程图四、程序清单与执行结果4.1 程序清单DATA SEGMENT MESS1 DB Please input a word!, 0AH,0DH,$ MESS2 DB Please input the word between a and z,0AH,0DH,$DATA ENDSCODE SEGMENT AS
9、SUME CS:CODE,DS:DATASTART: MOV AX,DATA ;将DS指向输出端 MOV DS,AX MOV DX,283H ;8253初始化 MOV AL,16H ;设置8253计数器0工作在方式3 OUT DX,AL MOV DX,280H MOV AL,52 OUT DX,AL ;送计数初值到计数器0的端口 MOV DX,2B9H ;8251初始化 MOV BL,3 MOV AL,00HLL: OUT DX,AL ;向8251控制口连续发送3个0 DEC BL JNZ LL MOV AL,40H ;向8251控制口送复位命令字 OUT DX,AL MOV AL,4eH ;
10、向8251控制口送方式控制字 OUT DX,AL MOV AL,27H ;向8251控制口送操作命令字 OUT DX,AL MOV DX,OFFSET MESS1 ;显示提示 MOV AH,09H INT 21HWAIT1: MOV DX,2B9H ;从8251控制口读状态字 IN AL,DX TEST AL,01 ;测试AL中第0位是否为0 JZ WAIT1 ;为0则跳转 L1: MOV AH,01 ;从键盘上读入一个字符 INT 21H CMP AL,27 ;若为ESC,则结束(ESC的ASCII码为27) JZ EXIT CMP AL,97 ;判断是否小于“a” JB L2 CMP AL
11、,123 ;判断是否大于“z” JAE L2 CMP AL,119 ;判断是否大于“w” JAE L3 MOV DX,2B8H ADD AL,4 OUT DX,AL ;将加4后的ASCII码发送到8251数据端口 MOV CX,40HDELAY: LOOP DELAY ;延时WAIT2: MOV DX,2B9H ;从8251控制口读状态字 IN AL,DX TEST AL,02 ;测试AL中第1位是否为0 JZ WAIT2 ;为0则跳转 MOV DX,2B8H ;从8251数据口接收数据 IN AL,DX MOV DL,AL MOV AH,02 ;在屏幕上显示接收的字符 INT 21H JMP
12、 WAIT1EXIT: MOV AH,4CH ;退出 INT 21HL2: MOV DX,OFFSET MESS2 ;显示提示信息 MOV AH,09 INT 21H JMP L1L3: MOV DX,2B8H ;若为w,x,y,z,ASCII码减22,变为a,b,c,d SUB AL,22 OUT DX,AL JMP WAIT2CODE ENDSEND START4.2 执行结果(1)电路连线图:图4 实验电路连线图(2)实验结果截图:图5 实验截图五、程序调试说明和实验感想5.1 调试说明(1)因为这次实验的连线特别多,而且复杂,再加上我在连线的时候比较粗心(因为以前实验的连线都比较简单,
13、导致自己一直对实验的连线不太在意)导致我把8251的端口地址连错了,所以我在实验刚开始输出的时候输出的是一些完全没有规律的字符,后来在尝试了所有代码可能错误的情况以及找助教帮忙仍然没有结果时,我再认真看了一遍书上的实验指导之后,无意间瞄到电路连线的端口地址接错了,在重新确认连线是否有误之后,重新运行程序,实验结果才比较正常。(2)因为实验之前老师没有和我说清楚在输入不同范围的字符时,要分开处理。所以我一开始只按照书上的流程图来写的代码。到开始实验时,我才按照老师的要求来改代码,不过因为是临时插入的,我把判断语句放的位置不大对,先加4了,再开始判断,导致在关键位置进行输出变换时老是出错。后来在同组同学提醒下,才发现是我把简单的事搞复杂了。5.2 实验感想与收获在做硬件实验时,实验电路连线十分重要,不能因为书上的实验指导已经给出答案就粗心大意,电路连线是一个实验的基础,如果连线出错,那这个实验注定是要失败的。通过这次实验,我对于8251A的工作原理以及串行通信的原理有了更进一步的了解,掌握了8251A的初始化编程,同时我的汇编编程能力也在稳步提升。5.3 实验特色不再是书上的简单的加1输出,实现了在某一范围内的循环输出。5.4 展望说明如果有充裕的时间,自己还可以加入更多的判断条件,实现数字、大写字母或者三者之间的变换输出。