浙江工业大学计算机学院实验报告实验名称定时/计数器(8253)姓名学号班级教师日期2014.11.2◆实验目的和要求1、了解串行通讯的基本原理。2、掌握串行接口芯片8251的工作原理和编程方法。◆实验设备(环境)及要求PC机一台,TPC-USB平台、8253芯片、8251A芯片◆实验内容从键盘输入一个字符,将其ASCII码加1后串行发送出去,再从串行口接收回来在屏幕上显示,实现自发自收。收发均采用查询方式。◆实验步骤1)按图4.1连接好电路,(8251插在通用插座上)。其中8253计数器用于产生8251的发送和接收时钟,TxD和RxD连在一起。图示电路8251的控制口地址为2B9H,数据口地址为2B8H。2、8253计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。图4.1TPC-USB平台串行实验连接2)根据流程图4.2,编程并运行,观察实验结果。开始初始化8253初始化8251显示提示从8251控制口读状态字TxRDY为1吗?从键盘接收字符是ESC吗?将键入字符ASC码加1通过8251数据端口发送字符从8251控制端口读入状态字DxRDY为1吗?从8251数据口接收数据将字符显示在屏幕是ESC吗?YYNYNN图4.2TPC-USB平台串行实验流程◆实验结果在键盘上输入一个字符在屏幕上显示出来,随后即在屏幕上输出一个刚刚输入的数的ASIIC码加1的字符。◆讨论和分析(1)实验结果分析:在8253、8251A的初始化工作完成以后,读入状态字,检测是否已准备发送字符,确定准备好以后,通过movah,01int21h语句从键盘上输入一个数字,在执行加1操作以后,通过outdx,al语句将数据发送出去,然后又读入状态字,检测是否已准备接收字符,确定准备好以后,通过movdx,2B8hinal,dx读入刚刚发送出去的字符,通过movdl,almovah,02int21h语句在屏幕上显示刚刚接收的字符,实现自发自收的功能。(2)实验总结及需要注意的问题:首先在连线方面,刚开始的时候根据实验指导的实验连接各个引脚,在连接8251A芯片的10、13号引脚的时候碰到了问题,指导书上连接的是IOW、IOR,而我们在TPC-USB平台上只找到了IOW、IOR,于是刚开始我们先把IOW、IOR经过一个非门,然后再接到10、13号引脚,结果答案总是错误,最后在检查线路的时候我们试着直接接到IOW、IOR,不使用非门,结果就正确了。在代码方面,由于这次的实验思路比较清晰,根据代码编写步骤没有出现什么问题。◆实验主要代码datasegmentmes1db'youcanplayakeyonthekeybord!',0dh,0ah,24hmes2ddmes1dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,283h;设置8253计数器0工作方式moval,16houtdx,almovdx,280hmoval,52;给8253计数器0送初值outdx,almovdx,2b9H;开始初始化8251xoral,almovcx,03;向8251控制端口送3个0预处理delay:callout1;连续发送3个0loopdelaymoval,40h;向8251控制端口送40H,使其复位callout1moval,4eh;设置为1个停止位,8个数据位,波特率因子为16callout1moval,27h;向8251送操作控制字允许其发送和接收callout1ldsdx,mes2;显示提示输入信息movah,09int21hwaiti:movdx,2b9Hinal,dx;读入状态字testal,01;检查TXRDY是否为1,发送是否准备好jzwaiti;还没准备好,继续等待movah,01;是1,则从键盘上读一字符int21hcmpal,27;判断输入的是否为ESCjzexit;若是,则结束movdx,2B8Hincal;将键盘读入字符的ASCII码加1outdx,al;将数据发送movcx,40hs51:loops51;延时next:movdx,2B9Hinal,dx;读入状态字testal,02;检查RXRDY,接收是否准备好jznext;没有,等待movdx,2B8hinal,dx;准备好,接收刚刚发送出去的数据movdl,almovah,02;将接收到的字符显示在屏幕上int21hjmpwaiti;继续循环exit:movah,4ch;退出程序int21hout1procnear;向外发送一字节的子程序outdx,alpushcxmovcx,40hgg:loopgg;延时popcxretout1endpcodeendsendstart