北理工微机原理实验三--使用8251A的串行接口应用实验
串行接口应用实验

(一)8251 串行接口应用实验一、实验目的1、掌握8251的工作方式。
2、学习串行通讯的有关知识。
二、实验设备1、TDN86/88教学实验系统一台。
2、示波器一台。
3、一组排线。
三、实验内容及步骤1、系统中的8251芯片系统装有一片8251芯片,并和标准RS-232C接口连接好,如下图所示。
该电路用来完成同PC微机的联机以及串行监控操作的实现,其端口地址为:数据口:C0H 控制口:C1H2、实验单元中的8251这片8251芯片用于各种串行口实验,连线见下图,其端口地址为:数据口:80H 控制口:81H3、8251串行接口应用实验本实验中,串行传输的数据格式规定如下:(1)一位逻辑‘0’的起始位,8位数据位(由低位开始传输),1位逻辑‘1’停止位。
(2)传输波特率9600baut。
数据信号的串行输出送示波器,可观察数据波形。
与示波器连线如下:8251 示波器TxD _____________ +GND_____________ -4、实验程序,见13-1.ASMCODE SEGMENTASSUME CS:CODESTART: CALL INIT ;初始化8253和8251A1: CALL SEND ;向串口送55HA2: MOV CX,0200H ;定时时间到,再发送下一个数据LOOP A2JMP A1 ;重复送数INIT: MOV AL,76H ;8253的计数器1工作在方式3,送出方波信号,作为8251收发时钟OUT 43H,ALMOV AL,0CH ;方波频率为153.6KHzOUT 41H,ALMOV AL,00HOUT 41H,ALCALL RESET ;复位8251,即向控制口送3个0,一个40HCALL DELAY ;8251工作速度慢,每送一个控制字,等待一会儿MOV AL,7EH ;置异步方式:1个停止位,偶校验,字符长为8位,波特率因子为16OUT 81H,AL ;控制口CALL DELAYMOV AL,31H ;RTS输出0,使CTS输入0OUT 81H,AL ;清除错误标志,并使TxEN置1,允许发送CALL DELAYRETRESET: MOV AL,00H ;复位8251OUT 81H,ALCALL DELAYOUT 80H,ALCALL DELAYOUT 80H,ALCALL DELAYMOV AL,40HOUT 81H,ALRETDELAY: PUSH CX ;延时子程序MOV CX,6000HA3: LOOP A3POP CXRETSEND: PUSH AX ;发送55HMOV AL,31HOUT 81H,ALPOP AXMOV AL,55HOUT 80H,ALRETCODE ENDSEND START5、实验步骤(1)将示波器与8251的TxD、GND排针引脚相连接。
接口实验报告8251

实验报告实验名称__8251A串行口实验____课程名称__微机原理与接口技术__院系部: 专业班级:学生姓名:学号:同组人: 实验台号:指导教师: 成绩:实验日期:华北电力大学一、实验目的及要求:(1)了解串行通信的一般原理和8251A的工作原理。
(2)掌握8251A的编程方法。
二、仪器用具:三、实验原理:1.串行通信的原理串行通信是通过一位一位地进行数据传输来实现通信。
具有传输线少,成本低等优点,适合远距离传送;缺点是速度慢。
完成串行通信任务的接口称为串行通信接口,简称串行接口。
串行接口作为输入时,完成串行到并行格式转换,作为输出时,完成并行到串行格式转换。
图1是串行通信的一般模型。
图1 串行通信的一般模型2.8251A的工作原理825lA是可编程的串行通信接口芯片,是Intel公司生产的一种通用同步/异步数据收发器(USART),可工作在同步方式,也可工作在异步方式,且能进行出错检测。
其内部结构框图如图2所示。
图2 8251A内部结构框图由图可知,8251A由数据总线缓冲器、读/写控制逻辑、调制/解调器控制逻辑、发送缓冲器、发送控制器、接收缓冲器、接收控制器等组成。
(1)在同步方式时,每个字符可定义为5、6、7或8位。
两种方法实现同步,由内部自动检测同步字符或由外部给出同步信号。
允许同步方式下增加奇/偶校验位进行校验。
(2)在异步方式下,每个字符可定义为5、6、7或8位,用1位作奇偶校验。
时钟速率可用软件定义为波特率的l、16或64倍。
另外,8251A在异步方式下能自动为每个被输出的数据增加1个起始位,并能根据软件编程为每个输出数据设置1位、1.5位或2位停止位。
(3)能进行出错检测。
带有奇偶、溢出和帧错误等检测电路,用户可通过输入状态寄存器的内容进行查询。
3.8251A的编程(1)8251A的编程地址:8251A只需要两个端口地址,一个用于数据端口,一个用于控制端口。
数据输入输出用读信号RD和写WR信号区分;状态端口只能读不能写,控制端口只能写不能读。
北理工微机原理实验三 使用8251A的串行接口应用实验

本科实验报告实验名称:实验三使用8251A的串行接口应用实验课程名称:计算机原理与应用实验实验时间:任课教师:实验地点:实验教师:实验类型:□原理验证■综合设计□自主创新学生姓名:学号/班级:组号:学院:同组搭档:专业:成绩:1. 实验目的1) 掌握串行通信原理及半双工和全双工的编程方法;2) 掌握用8251A接口芯片实现微机间的同步和异步通信;3) 掌握8251A芯片与微机的接口技术和编程方法。
2. 实验原理和内容8251A是一种可编程的同步/异步串行通信接口芯片,具有独立的接收器和发送器,能实现单工、半双工、双工通信。
1) 8251A内部结构8251A通过引脚D0~D7和系统数据总线直接接口,用于和CPU传递命令、数据、状态信息。
读写控制逻辑用来接收CPU的控制信号、控制数据传送方向。
CPU对8251A的读写操作控制表如表3-4所示。
表3-4 CPU对8251A的读写操作控制表2) 8251A的方式控制字和命令控制字方式控制字确定8251A的通信方式(同步/异步)、校验方式(奇校/偶校/不校)、字符长度及波特率等,格式如图3-10所示。
命令控制字使8251A处于规定的状态以准备收发数据,格式如图3-11所示。
方式控制字和命令控制字无独立的端口地址,8251A 根据写入的次序来区分。
CPU对8251A初始化时先写方式控制字,后写命令控制字。
3) 状态寄存器8251状态寄存器用于寄存8251A的状态信息,供CPU查询,定义如图3-12所示。
TXRDY位:当数据缓冲器空时置位,而TXRDY引脚只有当条件( 数据缓冲器空•/CTS•TXE)成立时才置位。
溢出错误:CPU没读走前一个字符,下一个字符又接收到,称为溢出错误。
帧错误:在字符结尾没检测到停止位,称为帧错误。
4) PC机寄存器的端口地址其中:线路控制寄存器第七位:DLAB=0;线路控制寄存器第七位:DLAB=1。
5) 波特率和除数因子对照表实验硬件连接方法:通过计算机点到点三线制串口通信线,掌握接线的方法以及RS-232标准的机械、电气规范。
8251串行通讯实验

师大学数计学院实验报告专业名称 11计科课程微机原理实验名称串行通信实验姓名学号 1107040128251 可编程串行口与PC 机通讯实验一、实验目的(1) 掌握8251 芯片的结构和编程,掌握微机通讯的编制。
(2) 学习有关串行通讯的知识。
(3) 学习 PC 机串口的操作方法。
二、实验说明1、8251 信号线8251 是CPU 与外设或Mode 之间的接口芯片,所以它的信号线分为两组:一组是用于与CPU 接口的信号线,另一组用于与外设或Mode 接口。
(1)与CPU 相连的信号线:除了双向三态数据总线(D7~D0)、读(RD)、写(WR)、片选(CS)之外,还有:RESET:复位。
通常与系统复位相连。
CLK:时钟。
由外部时钟发生器提供。
C/D:控制/数据引脚。
TxRDY:发送器准备好,高电平有效。
TxE:发送器空,高电平有效。
RxRDY:接收器准备好,高电平有效。
SYNDET/BRKDET:同步/中止检测,双功能引脚。
(2)与外设或Mode 相连的信号线:DTR:数据终端准备好,输出,低电平有效。
DSR:数据装置准备好,输入,低电平有效。
RTS:请求发送,输出,低电平有效。
CTS:准许传送,输入,低电平有效。
TxD:发送数据线。
RxD:接收数据线。
TxC:发送时钟,控制发送数据的速率。
RxC:接收时钟,控制接收数据的速率。
2、8251 的初始化编程和状态字8251 是一个可编程的多功能串行通信接口芯片,在使用前必须对它进行初始化编程。
初始化编程包括CPU 写方式控制字和操作命令字到8251 同一控制口,在初始化编程时必须按一定的顺序。
如下面的流程图:三、实验原理图四、实验容本实验由实验器发送一串字符0~9,PC 机串口接收并在超级终端上显示。
五、实验步骤与PC 机通讯应用实验(1)实验连线:a.用串口线把实验机 8251 模块的RS232 通讯口与PC 机相连,把串口旁边的短路块SW1 短路在2-2/3-3 上,SW2 短路在RS232 上。
微机接口 8251串口实验报告

浙江工业大学计算机学院实验报告实验名称 8251串行接口姓名学号班级教师日期一、实验内容与要求1.1 实验内容了解串行通信接口的工作原理和工作过程,掌握编写初始化程序和通信程序的方法。
设计实验电路,编写实验程序,使实现从键盘输入“a”到“z”范围的字母,将其ASCII码加四后串行发送出去,再从串行口接收回来在屏幕上显示(若输入“w”、“x”、“y”、“z”,则分别显示“a”、“b”、“c”、“d”),实现自发自收。
1.2 实验要求(1)具有一定的汇编编程的基础,实验前能根据实验要求画出实验流程图,同时写出其所对应代码;(2)要了解8251A中断控制器的内部结构和外部引脚,理解芯片的工作原理和工作过程。
熟悉8251A芯片的命令字,能对其进行编程;(3)了解8253A定时/计数器,知道如何通过其计数器产生发送和接收时钟;(4)熟悉实验平台TPC-USB了解各个接口的名称与功能,进行实验时能快速并正确地连接好实验电路;(5)连接PC与TPC-USB平台,用微机实验软件运行程序。
在屏幕上显示提示信息“Pleaseinput a letter!”,从键盘输入“a”到“z”范围的字母,将其ASCII码加四后串行发送出去,再从串行口接收回来在屏幕上显示。
若输入“w”“x”、“y”、“z”,则分别显示“a”、“b”、“c”、“d”;若输入Esc,则退出程序。
二、实验原理与硬件连线2.1 实验原理(1)8251A的内部结构:图1 8251的内部结构图发送器:▲发送缓冲器+ 发送移位寄存器+ 发送控制电路。
发送控制电路用来控制和管理发送过程。
在其控制下,发送缓冲器将来自CPU的并行数据串行化,通过TxD发送出去。
▲异步方式:控制电路在数据帧中加上起始、校验和停止位。
▲同步方式:控制电路在数据帧中插入同步字符和校验位。
同步方式发送过程中,两字符间不允许有间隔。
若CPU未及时提供新字符,则控制电路自动补上同步字符。
接收器:▲接收缓冲器+ 接收移位寄存器+ 接收控制电路。
串行接口实验报告

课程实验报告实验名称:串行接口专业班级:学号:姓名:同组人员:指导教师:报告日期:实验二1. 实验目的 (3)2. 实验内容 (3)3. 实验原理 (3)4. 程序代码 (6)5. 实验体会 (13)实验二1.实验目的1.熟悉串行接口芯片8251的工作原理2.掌握串行通讯接收/发送程序的设计方法2.实验内容通过对8251芯片的编程,使得实验台上的串行通讯接口(RS232)以查询方式实现信息在双机上的。
具体过程如下:1. 从A电脑键盘上输入一个字符,将其通过A试验箱的8251数据口发送出去,然后通过B试验箱的8251接收该字符,最后在B电脑的屏幕上显示出来。
2.从A试验箱上输入步进电机控制信息(开关信息),通过A试验箱的8251数据口发送到B试验箱的8251数据口,在B试验箱上接收到该信息之后,再用这个信息控制B试验箱上的步进电机的启动停止、转速和旋转方向。
3.实验原理1.8251控制字说明在准备发送数据和接收数据之前必须由CPU把一组控制字装入8251。
控制字分两种:方式指令和工作指令,先装入方式指令,后装入工作指令。
另外,在发送和接收数据时,要检查8251状态字,当状态字报告“发送准备好”/“接收准备好”时,才能进行数据的发送或接收。
2.8251方式指令(端口地址2B9H)3.8251工作指令(端口地址2B9H)4.8251状态字(端口地址2B9H)5.8253控制字(283H)6.8253计数初值(283H)计数初值=时钟频率/(波特率×波特率因子)本实验:脉冲源=1MHz波特率=1200波特率因=16计数初值= 1000000/1200*16=527.程序流程框图4.程序代码Fxc.asm;************************;;*8251串行通讯(自发自收)*;;************************;data segmentio8253a equ 280h ;8253计数0端口地址io8253b equ 283h ;8253控制端口地址io8251a equ 2b8h ;8251数据端口地址io8251b equ 2b9h ;8251控制端口地址mes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16h ;控制字为00010110Bout dx,almov dx,io8253amov al,52 ;给8253计数器0送初值out dx,almov dx,io8251b ;初始化8251;xor al,al;mov cx,03 ;向8251控制端口送3个0;delay: call out1;loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz nextmov ah,0bhint 21htest al,0ffh ;检测是否有键盘输入jz nextmov dl,0ffh ;有键盘输入,读入字符mov ah,06hint 21hcmp al,27 ;若为ESC,结束jz exitmov dx,io8251a;inc alout dx,al ;发送; mov cx,40h;s51: loop s51 ;延时next: mov dx,io8251bin al,dxtest al,02 ;检查接收是否准备好jz waiti ;没有,等待mov dx,io8251ain al,dx ;准备好,接收mov dl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,al;push cx;mov cx,40h;gg: loop gg ;延时; pop cxretout1 endpcode endsend startSend .asm;************************;;*8251串行通讯(自发自收)*;;************************;data segmentio8253a equ 280h ;8253计数0端口地址io8253b equ 283h ;8253控制端口地址io8251a equ 2b8h ;8251数据端口地址io8251b equ 2b9h ;8251控制端口地址buf3 byte 0mes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16h ;控制字为00010110Bout dx,almov dx,io8253amov al,52 ;给8253计数器0送初值out dx,almov dx,io8251b ;初始化8251mov dx,28bh ;8255控制口初始化mov al,81h ;1000,0001out dx,al;xor al,al;mov cx,03 ;向8251控制端口送3个0;delay: call out1;loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz nextmov ah,0bhint 21htest al,0ffh ;检测是否有键盘输入jz next; mov dl,0ffh ;有键盘输入,读入字符;mov ah,06h; int 21hmov dx,28ahin al,dxcmp al,27 ;若为ESC,结束jz exitmov dx,io8251a;inc alout dx,al ;发送; mov cx,40h;s51: loop s51 ;延时next: mov dx,io8251bin al,dxtest al,02 ;检查接收是否准备好jz waiti ;没有,等待mov dx,io8251ain al,dx ;准备好,接收mov dl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,al;push cx;mov cx,40h;gg: loop gg ;延时; pop cxretout1 endpcode endsend start步进电机:1.K0=0,逆时针转;K0=1,顺时针转2.K1=0,慢转;K1=1,快转data segmentbuf1 db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;LED显示buf2 byte 0 ;步进电机数据buf3 byte 0 ;保存开关数据buf4 byte 0 ;保存顺转数据buf5 byte 9 ;保存反转数据buf6 byte 0 ;开关机data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov buf2,00110011b ;步进电机数据mov dx,28bh ;8255控制口初始化mov al,81h ;1000,0001out dx,al;-----------------------------逆转控制----------------R0: mov dx,28ah ;读C口in al,dxmov buf3,al ;保存C口数据test al,04 ;jnz kai ;转反转test al,01 ;测试K0=1?jnz L0 ;转反转mov al,buf4 ;走马灯开始一步顺转cmp al,9jnz S1call change9_0S1: inc al ;数据加1mov buf4,almov bx,offset buf1xlatmov dx,289h ;B口输出out dx,al ;数据完成加1mov al,buf2 ;电机开始一步逆转ror al,1 ;数据左移mov buf2,almov dx,288h ;A口输出out dx,al ;电机完成一步逆转mov al,buf3 ;回复C口数据test al,02jnz R1 ;转快转call delay_s ;否则慢转jmp R0R1: call delay_q ;快转jmp R0;------------------------------顺转控制-----------------L0: mov al,buf5 ;走马灯开始一步顺转cmp al,0jnz S2T2: test al,03 ;测试K2=1?jnz T2call change0_9S2: dec al ;数据减1mov buf5,al ;mov bx,offset buf1xlatmov dx,289h ;B口输出out dx,al ;走马灯结束一步顺转mov al,buf2 ;电机开始一步顺转rol al,1 ;数据右移mov buf2,almov dx,288h ;A口输出out dx,al ;电机结束一步顺转mov al,buf3 ;回复C口数据test al,02jnz L1 ;转快转call delay_s ;否则慢转jmp R0T3: test al,03 ;测试K2=1?jnz T3L1: call delay_q ;快转jmp R0kai: mov dx,28ah ;读C口in al,dxmov buf3,al ;保存C口数据test al,04 ;jz L0 ;转反转jmp kaiexit: mov ah,4chint 21hdelay_s proc near ;长延时mov bx,20hlp1: mov cx,0ffffhlp2: loop lp2dec bxjnz lp1retdelay_s endpdelay_q proc near ;短延时mov bx,1lp11: mov cx,0ffffhlp22: loop lp22dec bxjnz lp11retdelay_q endpchange9_0 proc nearmov buf4,-1mov al,buf4retchange9_0 endpchange0_9 proc nearmov buf5,10mov al,buf5retchange0_9 endpcode endsend start5.实验体会这次实验需要用到两种芯片8253和8251,两种芯片的作用分别是8253提供串行通讯所需的特定频率的脉冲信号,8251提供输入输出控制,所以在实验的过程中需要熟悉这两种芯片的方式字等使用规范,在仔细阅读了书本以及书本的编程实例后,基本摘掉了程序的设计方法实验过程中,出现了程序编译通过了但是不能运行的情况,后来经过检查发现是程序没有设置好的原因,要设置为编译后运行状态,否知只编译不运行,经过这次实验,知道了8253和8251两种芯片的基本用法,对课本上的知识有了更深入的理解,收获不少。
北理工微机原理实验3

北理工微机原理实验3实验三串行通信一、实验目的1、了解串行通信的基本原理。
2、掌握串行接口芯片8251 的工作原理和编程方法。
2、掌握串行接口芯片8250 的工作原理和编程方法。
3、掌握对串行接口芯片的初始化编程;学会串行通信半双工和全双工的编程技巧。
二、实验内容及步骤1、利用PC 机系统的串行通信接口实现与实验系统的双机通信,PC 机的串行通信接口的端口地址为3F8H,并画出三线连接,七线连线通信接口的连线图,接口为标准RS――232插座。
图1 七线连线通信接口的连线图2、按图1连接好电路,其中8254计数器用于产生8251 的发送和接收时钟,TXD 和RXD 连在九针接口处。
3、接线。
CLK0 /8254 接1M时钟CLK /8251 接1M时钟GATE0 /8254 接+5V0UT0 /8254 接TX/RXCLK /8251 CS /8254 接Y0 /IO 地址CS /8251 接Y7 /IO 地址RXD /8251 接TXD /九针接口TXD /8251 接RXD /九针接口4、8254 计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。
5、设串行通信的波特率为1200、偶校验、数据位为7 位、一位停止位,利用查询方式实现单工通信。
要求发送方将任一文件传送到收方,收方收到后将源程序写入磁盘。
分别编写收方和发方的通信程序。
6、上述参数不变,用中断方式实现半双工通信,编写程序。
7、PC 机寄存器的端口地址如下表所示。
PC 机寄存器的端口地址PC 机寄存器的端口地址I/O 端口IN/OUT 3F8* OUT 3F8* IN 3F8** OUT 3F9** OUT 3F9* OUT 3FB OUT 3FA IN 3FC OUT 3FD IN 3FE IN * 线路控制寄存器第七位DLAB=0 ** 线路控制寄存器第七位DLAB=1 波特率和除数因子对照表因子值波特率波特率单位HZ 单位HZ MSB LSB 50 09 00 1800 75 06 00 2000 110 04 17 2400 03 59 3600 150 03 00 4800 600 00 C0 9600 1200 00 60 寄存器名称发送保持寄存器接收数据寄存器波特率因子波特率因子(MSB) 中断允许寄存器线路控制寄存器中断标志寄存器MODEM 控制寄存器线路状态寄存器MODEM 状态寄存器因子值MSB 00 00 00 00 00 00 LSB 40 3A 30 20 18 0C 三、程序实现对于整个程序的实现,可以分为几个步骤。
北理工微机原理与接口技术之8255,8253实验报告

北理工微机原理与接口技术之8255,8253实验报告微机原理与接口技术实验报告———8253可编程定时器8255并行接口实验实验一8255并行接口实验一,实验内容8255的A口作为输入口,与逻辑电平开关相连。
8255的B口作为输出口,与发光二极管相连。
编写程序,使得逻辑电平开关的变化在发光二极管上显示出来。
二,实验目的(1)掌握8255的工作原理。
(2)掌握编写8255并行接口初始化及编程实现的方法。
三,实验仪器微机实验教学系统实验箱、8086CPU模块四,实验步骤(1)连线8255的PA0—PA7分别与逻辑电平开关的K1—K8相连?PB0—PB7分别与发光二极管电路的LED1—LED8相连?CS0与8255的片选CS8255相连其它线路均已连好具体如图所示:(2)编辑程序,编译链接后,单步运行,调试程序。
(3)调试通过后,全速运行,观察实验结果。
(4)撰写实验报告。
五,实验源程序如下CODE SEGMENT PUBLICASSUME CS:CODEORG 100HSTART:MOV DX,04A6HMOV AX,90H ;写8255的控制字,A组工作在方式0,A口输入,C口高4位输出,B组工作在方式0,B口及C口的低4位均工作在输出OUT DX,AXSTART1:MOV DX,04A0HIN AX,DX ;读取A口数据MOV DX,04A2HOUT DX,AX ;将从A口读取的数据从B口输出,控制LED灯JMP START1CODE ENDSEND START六,实验现象LED灯低电平有效。
当某一开关拨到低电平时,对应的LED灯点亮。
当某一开关拨到高电平时,对应的LED灯熄灭七,思考题1.将片选线接到CS1—CS7;重新编写程序。
CS0对应地址是04A0---O4AF, CS1对应地址是04B0---O4BF.现将片选线接到CS1,重新编程:CODE SEGMENT PUBLICASSUME CS:CODEORG 100HSTART:MOV DX,04B6H ;CS1对应的地址MOV AX,90HOUT DX,AXSTART1:MOV DX,04B0HIN AX,DXMOV DX,04B2HOUT DX,AXJMP START1CODE ENDSEND START实验现象:如同片选线接到CS02.交换A B接线,A口输出、B口输入;重新编写程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北理工微机原理实验三--使用8251A的串行接口应用实验本科实验报告实验名称:实验三使用8251A的串行接口应用实验课程名称:计算机原理与应用实验实验时间:任课教师:实验地点:实验教师:实验类型:□原理验证■综合设计□自主创新学生姓名:学号/班级:组号:学院:同组搭档:专业:成绩:1. 实验目的1) 掌握串行通信原理及半双工和全双工的编程方法;2) 掌握用8251A接口芯片实现微机间的同步和异步通信;3) 掌握8251A芯片与微机的接口技术和编程方法。
2. 实验原理和内容8251A是一种可编程的同步/异步串行通信接口芯片,具有独立的接收器和发送器,能实现单工、半双工、双工通信。
1) 8251A内部结构8251A通过引脚D0~D7和系统数据总线直接接口,用于和CPU传递命令、数据、状态信息。
读写控制逻辑用来接收CPU的控制信号、控制数据传送方向。
CPU对8251A的读写操作控制表如表3-4所示。
表3-4 CPU对8251A的读写操作控制表2) 8251A的方式控制字和命令控制字方式控制字确定8251A的通信方式(同步/异步)、校验方式(奇校/偶校/不校)、字符长度及波特率等,格式如图3-10所示。
命令控制字使8251A处于规定的状态以准备收发数据,格式如图3-11所示。
方式控制字和命令控制字无独立的端口地址,8251A 根据写入的次序来区分。
CPU对8251A初始化时先写方式控制字,后写命令控制字。
3) 状态寄存器8251状态寄存器用于寄存8251A的状态信息,供CPU查询,定义如图3-12所示。
TXRDY位:当数据缓冲器空时置位,而TXRDY引脚只有当条件( 数据缓冲器空•/CTS•TXE)成立时才置位。
溢出错误:CPU没读走前一个字符,下一个字符又接收到,称为溢出错误。
帧错误:在字符结尾没检测到停止位,称为帧错误。
4) PC机寄存器的端口地址其中:线路控制寄存器第七位:DLAB=0;线路控制寄存器第七位:DLAB=1。
5) 波特率和除数因子对照表实验硬件连接方法:通过计算机点到点三线制串口通信线,掌握接线的方法以及RS-232标准的机械、电气规范。
3. 实验连接方法按图连接好电路,其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。
1) 8254/CLK0连接时钟/1MHz;2) 8254/CS连接I/O译码/Y0(280H---287H);3) 8254/OUT0连接8251/TX/RXCLK;4) 8254/GATE0连接+5V;5) 8251/TXD连接8251/RXD;6) 8251/CS连接I/O译码/Y7(2B8H---2BFH。
4. 编程提示8251的控制口地址为2B9H,数据口地址为2B8H。
8254计数器的计数初值=时钟频率/(波特率X 波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子16,则计数器初值52。
1MHz = 1000000Hz基于8251芯片实现异步串行通信一般有两种方式,一种是查询方式,另一种是中断方式,使用哪种方式取决于进行初始化时寄存器的设置。
8254 计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。
本实验采用8251A异步方式发送,利用8086汇编语言实验计算机点到点的串口通信,设置:波特率为1200bps、数据位7位、停止位1位、偶校验方式,利用查询方式或中断方式实现双机通信,能够传输多个字符。
程序具体设计如下:1) 基础型实验:从键盘输入一个文件或打开已有的文件发送出去,再接收回来在屏幕上显示,实现自发自收。
2) 提高型实验:设计发送方和接收方两个程序,要求将某汇编语言传送到接收方,接收方收到后将源程序写入指定磁盘或屏幕显示。
5. 实验代码发送端代码:STACK SEGMENT PARA STACKD B 256 DUP(0)STACK ENDSCODE SEGMENTA SSUME CS:CODE,SS:STACKSTART:M OV DX,3FBH 线路控制寄存器M OV AX,80H 10000000B,DLAB=1,数据位,停止位,校验位,波特率因子O UT DX,ALM OV DX,3F8H 波特率寄存器(低)M OV AX,60H 查表O UT DX,ALM OV DX,3F9H 波特率寄存器(高)M OV AX,0 查表O UT DX,ALM OV DX,3FBH 线路控制寄存器M OV AX,0AH 00001010B,DLAB=0O UT DX,ALM OV DX,3FCH; 调制解调器控制寄存器M OV AX,03H 00000011B,OUT1,2均输出1,请求发送,数据已就绪O UT DX,ALM OV DX,3F9H 中断允许寄存器M OV AX,0 各种中断全部禁止O UT DX,ALFOREVER:用死循环不断检测8251状态M OV DX,3FDH ;从线路状态寄存器读状态I N AL,DXT EST AL,1EH 死记J NZ ERROR ;传输线状态寄存器全部都是0T EST AL,01H 00000001B,检测接收缓存寄存器是否有数据J NZ RECEIVE 可以收了T EST AL,20H 00100000B,检测发送保持寄存器是否为空J NZ SEND 可以发了J MP FOREVERSEND:MOV AH,1I NT 16HJ Z FOREVER 可以发但是未接收到键盘字符收到了M OV AH,0I NT 16H 输入读入ALM OV DX,3F8H 扔进(对于发送端是)发送保持寄存器,发出O UT DX,ALC MP AL,03HJ E DONEM OV DL,ALM OV AH,02HI NT 21H 显示发送的字符C MP AL,0DH 00001101BJ NZ FOREVERM OV DL,0AHM OV AH,02H I NT 21HJ MP FOREVERRECEIVE:M OV DX,3F8H I N AL,DXA ND AL,7FHC MP AL,03H; J Z DONEM OV DL,ALM OV AH,02H I NT 21HC MP AL,0DHJ NZ FOREVER M OV DL,0AH M OV AH,02H I NT 21HJ MP FOREVER ERROR:M OV DX,3F8HI N AL,DXM OV DL,0AHM OV AH,02HI NT 21HJ MP FOREVERDONE:M OV AH,4CHI NT 21HCODE ENDSEND STAR接收端代码:DATA SEGMENTIO8254A EQU 280HIO8251A EQU 2B8HIO8251B EQU 2B9HDATA ENDSSTACK SEGMENT PARA STACKD B 256 DUP(0)STACK ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:M OV AX,DATAM OV DS,AXM OV DX,IO8254A+3M OV AL,00010110B ;设置8254计数器0工作方式O UT DX,ALM OV DX,IO8254AM OV AL,52 ;给8254计数器0送初值O UT DX,ALM OV DX,IO8251B ;对8251进行初始化M OV AX,0M OV CX,3reset8251:O UT DX,ALP USH CXM OV CX,40H ;向8251控制端口送40H,使其复位L OOP $P OP CXL OOP reset8251M OV AL,40HO UT DX,ALM OV CX,40HL OOP $M OV AL,5AHO UT DX,ALM OV AL,27HO UT DX,ALFOREVER:M OV DX,IO8251B ;从线路状态寄存器读状态I N AL,DXT EST AL,38H ;检测是否为00111000J NZ ERROR ;传输线状态寄存器全部都是0T EST AL,02H ;检测接受数据是否准备好了J NZ RECEIVE ;等于0则表示数据没有准备好T EST AL,01H ;数据没有准备好J NZ send ;没有,则跳转等待J MP FOREVERsend:M OV AH,1 ;检测键盘按下I NT 16HJ Z FOREVER ;有键盘按下M OV AH,0 ;读键盘I NT 16HM OV DX,IO8251A ;将键盘的数据输出发送到缓冲器O UT DX,ALC MP AL,03HJ Z DONEM OV AH,02HI NT 21HC MP AL,0DHJ NZ FOREVERM OV DL,0AHM OV AH,02HI NT 21HJ MP FOREVERRECEIVE:M OV DX,IO8251A ;接收数据I N AL,DXA ND AL,7FH ;最高位为停止位C MP AL,03H;J Z DONEM OV DL,ALM OV AH,02HI NT 21HC MP AL,0DHJ NZ FOREVERM OV DL,0AHI NT 21HJ MP FOREVERC MP AL,0DHJ NZ FOREVER ERROR:M OV DX,IO8251A I N AL,DXM OV DL,'?'M OV AH,02HI NT 21HJ MP FOREVER DONE:M OV AH,4CHI NT 21HCODE ENDS END START。