资源描述
微机原理 硬件实验报告实验一 I/O地址译码一、实验目的1、掌握I/O地址译码电路的工作原理。二、实验内容及原理实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字 电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,YO:280H287H,Y1:288H-28FH,当CPU执行I/O指令且地址在280H2BFH范围内,译码器选中,必 有一根译码线输出负脉冲。根据图1-1,我们可以确定A9A3,AEN,IOW,IOR的值。要使译码电路正 常工作,必须使处于低电平有效。因而可以确定A6=A8=0,A7=A9=1,AEN=0,IOW与IOR不可同时为1(即不能同时读写)。当要从Y4输出低脉冲时,A5A4A3=100;从Y5输出时,A5A4A3=101。综上所述,Y4输出时,应设置值2A0H(A9A0=1010100000B);Y5输出时,应设置值2A8H(A9A0=1010101000B)。执行下面两条指令MOV DX,2A0HOUT DX,AL(或IN AL,DX)Y4输出一个负脉冲到D触发器的CLK上,因为D=1(接了高电平+5V),所以 Q被赋值为1.延时一段时间(delay);执行下面两条指令;MOV DX,2A8HOUT DX,AL(或IN AL,DX)Y5输出一个负脉冲到CD,D触发器被复位,Q=0o再延时一段时间,然后循环上述步骤。利用这两个个负脉冲控制L7闪烁发光(亮、灭、亮、灭、),时间间隔 通过软件延时实现。三、硬件接线图与软件流程图A3A4A5A6A7A8硬件接线:Y4/I0地址接CLK/D触发器Y5/I0地址接C/D触发器D/D触发器接SD/D角发器接+5VQ/D触发器接L7 LED灯)或逻辑笔软件流程图:四、源程序0UTP0RT1 EQU 2A0H;预置,方便修改0UTP0RT2 EQU 2A8HCODE SEGMENTASSUME CS:CODESTART:MOVDXQUTPORT1;根据原理图设定A9AO的值(Y4 OUT DX,AL;让译码器Y4 口输出一个负脉冲CALL DELAY;延时MOVDXQUTPORT2;根据原理图设定A9A0的值(Y5 OUT DX,AL;让译码器Y5 口输出一个负脉冲CALL DELAY;延时MOV AH,1;调用1号DOS功能,等待键盘输入INT 16HJESTART;若有键盘输入则退出程序,否继续循环MOV AH,4CHINT21HDELAY PROC NEAR;延时子程序MOV BX,200;时延长度(200)A:MOV CX,0B:LOOP BDEC BXJNE ARETDELAY ENDPCODE ENDSEND START五、实验结果LED灯处于闪烁状态,键盘有输入后,成功退出。六、实验总结遇到的问题:需要合理设置时延值。七、实验收获与心得体会这是第一次进行微机原理的硬件实验,熟悉了使用的实验系统,学习了最 基本的硬件测试方法,学会了在实验的环境下进行单步调试,对接口的地址、LED灯的控制有了初步的了解。为后续实验做了准备。实验二简单并行接口一、实验目的1、掌握简单并行接口的工作原理及使川方法。二、实验内容及原理1、按下面图2-1简单并行输出接口电路图连接线路 74LS273插通川插 座,74LS32川实验台上的“或门”o 74LS273为八D触发器,8个D输入 端分别接数据总线DOD7,8个Q输出端接LED显示电路L0L7。2、编程从键盘输入一个字符或数字,将其ASCH码通过这个输出接口输 出,根据8个发光二极管发光情况验证正确性。三、硬件接线图与软件流程图f74LS273 001234567 DDDDDDDD12345678QQQQQQQQ。工9 J 3 K R12345678L LDDDDDDDDC C图2-1软件流程图:(结束)四、源程序CODE SEGMENTASSUME CS:CODESTART:MOV CX,0FFHLOOP 1:MOV AH,1INT21HCMP AL,1BHJZ END1MOV DX,2A8HOUT DX,ALLOOPLOOP1END1:MOV AX,4C00HINT21HCODE ENDSEND START五、实验结果键盘输入一个字符,LED灯显示相应的ASCII码。键入ESC后成功退 出。六、实验收获与心得体会本次实验让我对硬件实验有了更加深刻的理解,硬件实验需要经常读取硬 件的状态,根据其状态采取相应的控制方案,同时需要向接口输出数据和控制信 息,驱动硬件正常工作。通过键盘的输入还记下了一些字符的ASCII码。实验三 可编程并行接口 8255一、实验目的1、通过实验,掌握8255工作于方式0以及设置A口为输出口,C口为输入口 的方法。二、实验内容及原理1、8255芯片工作原理:1 8255的工作方式:一片8255内部有3个端口,A口可以工作在方式0、方式1或方式2,B口可以 工作在方式0、方式1,C口可以工作在方式0。方式0是基本型输入/输出。这种方式和外设交换数据时,8255端口与外设之 间不使川联络线。方式1为选通型输入/输出。川这种方式和外界交换数据时,端口和外设之间 要有联络信号。方式2是双向数据传送,仅A口有这项功能。当A口工作在方式2时,B口仍 可以工作在方式0或方式1,但此时B 口方式1只能用查询方式与CPU交换信息。2 工作方式选择字8255工作方式选择字共8位(如图3-1,存放在8255控制寄存器中。最高位 D7为标志位,D7=l表示控制寄存器中存放的是工作方式选择字,D7=0表示控 制 寄存器中存放的是C 口置位/复位控制字。D7D6 D5D4D3D2D1DO方式口A 口C 口高四位口加0B 口C 口低四位10L方式11:输入L:入1-方式11:AL:入h方式20:输出0:出0:出0:出、_d标志位二组Bia根据上图,方式控制字应为:10000000B,即80H。8255控制寄存器端口地址-28BH,A 口的地址-288H,B 口的地址-289H,C 口 的地址-28AH。3)C 口置/复位控制字8255的C 口可进行位操作,即:对口可进行位操作,即:对8255C 口的 每一位进行置或清零操作,该操通过设置C口置/复位字实现的(图)。复位 字实现的(图)。C口置/复位字共8位,各位含义如下:D7D6D5D4D3D2D1D00000:PCO1:置位001:PC10:复位标志位XXX111:PC72、8255A的控制信号与传输动作的对应关系A1A0/RD/WR/CS工作状态00010A口数据f数据总线01)10B口数据f数据总线10010C口数据一数据总线00100数据总线一A 口数据01100数据总线一B 口数据10100数据总线一C 口数据11100数据总线一控制寄存器XXX工1数据总线一三态11010非法状态X工110数据总线一三态3、命令字与初始化编程8255有两个命令字,即方式选择控制字和C口置0/置1控制字,初始化编程的 步骤是:向8255控制寄存器写入“方式选择控制字、从而预置端口的工作方式;当端口预置为方式1或方式2时,再向控制寄存器写入“C口置0/置1控制字”。这一操作的主要目的是使相应端口的中断允许触发器置0,从而禁止中断,或者 使相应端口的中断允许触发器置1,从而允许端口提出中断请求;注意:“C口置0/置1控制字”虽然是对C口进行操作,但是该控制器是命令字,所 以要写入控制寄存器,而不是写入C口控制寄存器。向8255数据寄存器写入“数据”或从8255数据寄存器读出“数据工三、硬件接线图与软件流程图硬件接线图:d_ _PCOPAOLOVI_PCIPAI_.T 11X1_proPA9_.T 9iiZr nZLN_PC3n o_一11OrAoLoVA_PCIDAJ_.T AJXd-_.PC5D A匚1YU rAo LOPC6PA6_ T aIW LOV7_PC7PA7_.T 7IIIr LIrn(Li lU188255288H.一cs软件流程图四、源代码CODE SEGMENTASSUME CS:CODE START:MOV AL,89HMOV DX,28BHOUT DX,AL LOOP1:MOV DX,28AHIN AL,DXMOV DX,288HOUT DX,ALMOV AH,1INT 16HJZ L00P1CODE ENDSEND START五、实验结果将一个拨码开关推上去,其对应的LED灯亮。六、实验收获与心得体会这个实验比较简单,代码也很简短,但通过这个实验对8255有了初步的了解,对于接下来的实验有很大帮助。实验四七段数码管一、实验目的1、掌握数码管显示字的原理。二、实验内容及原理1、静态显示:将8255的A口 PAO-PA7分别与七段数码管的驱动输 入分别与七段数码管的驱动输入端adp相连,位码驱动输入端SO、S1、S2、S3接PC0、PCI、PC2、PC3,编 程在数码管显示自己的学号后四位。(或编上循环“程在数码管显示自己的学号后四位。(或编上循环“程在数码 管显示自己的学号后四位。(或编上循环“00-99”,位 码驱动输入端S0、S1 接 PC0、PCI;S2、S3 接地。)接地。)2、实验台上的七段数码管为共阴型,段码采川同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。七段数码管的字 型代表码如下:显示字形gefdcba段码001111113fh1000011006h21011015bh310011114fh4110011066h511011016dh611111017dh7000011107h811111117fh911011116fhafgbecd三、硬件接线图与软件流程图硬件接线图:接线:PA7PA0/8255接dpa/LED数码管PC3PC0/8255 接 S3SO/LED 数码管CS/8255 接 Y1/IO 地址软件流程图:四、源代码CODE SEGMENTASSUME CS:CODESTART:MOV AL,80HMOV DX,28BHOUT DX,ALLOOP1:MO V DX,28AH;数码管清零MOV AL,OOHOUT DX,ALMOV DX,288H;送出段码MOV AL,3FH;0 的段码OUT DX,ALMOV DX,28AH;送出位码MOV AL,08H;最高位显示OUT DX,ALMOV DX,28AH;数码管清零MOV AL,OOHOUT DX,ALMOV DX,288H;送出段码MOV AL,07H;7 的段码OUT DX,ALMOV DX,28AH;送出位码MOV AL,04H;次高位显示OUT DX,ALMOV DX,28 AH;数码管清零MOV AL,OOHOUT DX,ALMOV DX,288H;送出段码MOV AL,4FH;3 的段码OUT DX,ALMOV DX,28AH;送出位码MOVALQ2H;第3位显示OUT DX,ALMOV DX,28AH;数码管清零MOV AL,OOHOUT DX,ALMOV DX,288H;送出段码MOV AL,06H;l 的段码T DX,ALMOV DX,28AH;送出位码M0VALQ1H;第4位显示OUT DX,ALMOV AH,1;调川DOS功能,监视键盘是否有输入INT 16HJZLOOP1;键盘有输入跳出循环,否则继续显示M0VAH,4CH;返回 DOSINT21HCODE ENDSEND START五、实验结果数码管上静态显示我的学号后四位0731 o六、实验总结在本实验中数码管的显示是一位写,当然也可以川查表方法来进行。在本 实验中数码管的显示是一位写,当然也可以川查表方法来进行。七、实验收获与心得体会、实验收获与心得体会这是第一次在硬件实验中使用到数码管,的显示需要位和段输 这是第一次 在硬件实验中使川到数码管,的显示需要位和段输 送。这次实验也真正地通过 8255控制外设的动作。懂得了置 控制外设的动作。懂得了置8255的工作方式 以及C口的置/复位的方法。实验八 可编程定时器/计数器(8253/8254)、实验目的1.掌握8253用作定时器的编程原理;二、实验内容及原理1、8253芯片1 8253初始化使用8253前,要进行初始化编程。初始化编程的步骤是:A、向控制寄存器端口写入字对使用的计数规定其方式等。B、向使用的计数器端口写入初值。2 8253控制字:D7 D6 D5 D4 D3 D3 DI DO计数器选择读写方式选择工作方式选择数制选择D7D6=00:使用0号计数器,D7D6=01:使用1号计数器D7D6=10:使用2号计数器,D7D6=11:无效D5D4=00:锁存当前计数值D5D4=01:只写低8位(高8位为0),读出时只读低8位D5D4=10:?(低8位为0),读出叼D5D4=11:先读/写低8位,后读/写高8位计数值D3D2Dl=000:选择方式0,D3D2Dl=001:选择方式 1D3D2D1=X1O:选择方式2,D3D2D1=XU:选择方式3D3D2Dl=100:选择方式4,D3D2D1=1O1:选择方式5D0=0:计数初值为二进制,D0=l:计数初值为BCD码数附:8253控制寄存器地址283H 计数器0地址280H计数器1地址281H计数器 2地址282H定时器可工作在方式3下。综上所述,设置控制字为:00111110B,即选择零号计数器先读/先写低8位、再读/写高8位,选择方式3,计数初值为二进制。2、音乐产生原理由参考资料中的音符与频率对应表,根据计数器的性质,利川公式,使 川MATLAB矩阵运算可以快速计算出七种音符在高中低音时计数器应该对应的 初始计数值,如下表所示。音符频率对照音符1(do)2(re)3(mi)4(fa)5(so)6(la)7(si)i(do)频率(Hz)256288320341384426.6480512三、硬件接线图与软件流程图硬件接线图:CI KO1M时钟*5VFATEO-丁喇叭或蜂鸣器接线:CS/8253GATE0/8253CLK0/8253OUTO/8253接YO/IO地址接+5V接1M时钟接喇叭软件流程图:四、源程序DATA SEGMENTBUF DB 334554321123322,;欢乐颂乐谱LTH EQU$-BUF;乐谱长度ENDSSTACK SEGMENTDB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKDELAY PROC NEAR;延时子程序PUSH CX;避免改变原始CX值,将其压入堆栈MOV CX,0FFFFH;光靠设置CX的值延时还不够长L:MOV AX,50;嵌套循环,总循环长度为AX*CXWA:DEC AXJNZ WALOOPLPOP CX;提取原CX值RETDELAY ENDPSTART:MOV AX,DATAMOV DS,AXMOV AL,80HMOV DX,28BHOUT DX,AL;初始化 8255MOV DX,283HMOV AL,00111110BOUT DX,AL;初始化 8254BEGIN:MOV BX,OFFSET BUF;载入音谱MOV CX,LTH;根据音谱长度设定循环变量PRO:MOV AL,BX;载入音符ADD BX,1;准备载入下一个音符CMP AL,31H;通过比较ASCII码,读取单个音符JZN1;跳往 DOCMP AL,32HJZ N2CMP AL,33HJZ N3CMP AL,34HJZN4CMP AL,35HJZ N5CMP AL,36HJZ N6CMP AL,37HJZ N7CMP AL,38HJZ N8PR02:LOOP PROJMP FIN;音乐播完Nl:JMP DO;由于程序过长,此处设置跳转中N2:JMP REN3:JMP MIN4:JMP FAN5:JMP SON6:JMP LAN7:JMP SIIN8:JMP DOIDO:MOV DX,280H;设置零号计数器的初始值MOV AL,42H;42H是通过公式算得的初始值低8位OUT DX,ALMOVALQFH;高 8位OUT DX,ALMOV DX,28AH;数码管清零MOV AL,00HOUT DX,ALMOV DX,288H;给数码管送出1的段码MOV AL,06HOUT DX,ALMOV DX,28AH;给数码管送出位(最高显示)MOV AL,08HOUT DX,ALCALL DELAY;调川延时子程序,以免乐谱播放过快JMP PRO2;准备接收下一个音符;以下代码解释类似RE:MOV DX,280HMOV AL,90HOUT DX,ALMOV AL,0DHOUT DX,ALMOV DX,28AHMOV AL,00HOUT DX,ALMOV DX,288HMOV AL,5BHOUT DX,ALMOV DX,28AHMOV AL,08HOUT DX,ALCALL DELAYJMPPRO2MI:MOV DX,2 80HMOV AL,34HOUT DX,ALMOV AL,0CHOUT DX,ALV DX,28AHMOV AL,00HOUT DX,ALMOV DX,288HMOV AL,4FHOUT DX,AL MOV DX,28AH MOV AL,08H OUT DX,AL CALL DELAYJMPPRO2FA:MOV DX,280HMOV AL,74H OUT DX,AL MOV AL,0BH OUT DX,AL MOV DX,28AH MOV AL,00H OUT DX,AL MOV DX,288H MOV AL,66H OUT DX,AL MOV DX,28AH MOV AL,08H OUT DX,AL CALL DELAYJMPPRO2SO:MOV DX,280HMOV AL,2CH OUT DX,AL MOV AL,0AH OUT DX,AL MOV DX,28AH MOV AL,00H OUT DX,ALMOV DX,288H MOV AL,6DHOUT DX,ALMOV DX,28AHMOV AL,08HOUT DX,ALCALL DELAYPPRO2N9:JMP BEGIN;代码跳转中处LA:MOV DX,280HMOV AL,28HOUT DX,ALMOV AL,09HOUT DX,ALMOV DX,28AHMOV AL,OOHOUT DX,ALMOV DX,288HMOV AL,7DHOUT DX,ALMOV DX,28AHMOV AL,08HOUT DX,ALCALL DELAYJMPPRO2SII:MOV DX,280HMOV AL,24HOUT DX,ALMOV AL,08HOUT DX,ALMOV DX,28AHMOV AL,00HOUT DX,ALMOV DX,288HMOV AL,07HOUT DX,ALMOV DX,28AHMOV AL,08HOUT DX,ALCALL DELAYJMPPRO2DOI:MOV DX,280HMOV AL,0A2HOUT DX,ALMOV AL,07HOUT DX,ALMOV DX,28AHMOV AL,OOHOUT DX,ALV DX,288HMOV AL,75HOUT DX,ALMOV DX,28AHMOV AL,08HOUT DX,ALCALL DELAYJMPPRO2FIN:MOV DX,280H;乐谱播完,进入静音状态设置初值MOV AL,0AH;发出超声波(人耳听不到),低8位OUT DX,ALMOV AL,00H;高 8位OUT DX,ALMOVAHQ1H;调川1号DOS功能,等待键盘输入INT21HCMP AL,1BH;是否输入“ESC”JNZN9;是则退出,否进行下一次播放MOV AH,4CH;程序结束,返回DOS界面INT21HCODE ENDS END START五、思考题写出8253计数初值、输入频率和输出频率的关系。答:计数初值=输入频率/输出频率六、实验现象8253可以正确播放出存放在数据段的歌曲欢乐颂,同时数码管可以正确 显示出音符。七、实验总结在编程时首先要进行8253的初始化,包括计数器的选择、读入计数初值的 方式、工作方式的选择以及计数的方式等等。实验开始之前自己是想设计出一个 播放器,可以比较准确的播放出歌曲,数据段存储其音符、音高以及节拍,但是 调试到最后也没有成功,于是最后只是进行了功能十分简单的音乐播放,应该说 这是一个遗憾。八、实验收获与心得体会进行实验的时候还没有学习过8253,所以在进行实验的时候经历了许多周 折。但最终完成了音乐的播放,也算是一个成功吧,在这次实验中我学会了8253 的设置以及编程实现,对之后的理论课学习有非常大的帮助。实验中对每一个音 符的计数初值是一个一个写入的,其实也可以通过查表的方法进行,在尝试写功 能比较完备的音乐播放时就用了查表的方法。实验十六 串行通信8251一、实验目的1、了解串行通讯的基本原理;2、掌握串行接口芯片8251的工作原理和编程方法。二、实验内容及原理1、8251A的基本性能:可以工作在同步或异步方式下,两种方式下的字符位数5-8个;同步方 式时传输速率可达0 64K,异步方式时传输速率可达019.2K;异步传输时,可自动产生一个起始位,程控产生1个、1.5个、2个停止位;具有奇偶错、数据丢失和帧错误和检测能力;同步方式时,可自动检测,插入同步字符。2、8251A的工作原理:1)异步接收方式当8251A工作于异步方式且允许接收和准备好接收数据时,它监视RXD 线。在没有字符信息时,RxD为高电平。一旦8251A检测到RxD线为低电平,即认为是起始位(Space 到达,便启动内部计数器开始计数。假设接收时钟频 率为波特率的16倍频,8251A的内部寄存器计数接收始终的第8个脉冲时,又一次采样RXD线,看两次采样的信号是否一致。如果相同,即都为低,则 表示一个起始位的到来。此后,每隔一位的时间,在每个数据中间的一个接收时 钟的上升沿采样一次RxD线作为输入信号,送至审一并移位寄存器。在移位寄 存器中数据被转换成并行,并且进行奇偶校验并去除停止位后,经8251A内部 数据总线送至接收缓冲器,同时发出RxRDY信号,表示一个字符的接收和转 换全部完成。如果在第二次采样RxD线发现为高电平,则可能是一个干扰噪声。于是 8251A将不予理会,重新进行下一次的采样。2 异步发送方式异步发送时,首先必须由程序设置TxEN Transmitter Enable-发送允许)和(Clear To Send由外设发来的对CPU请求发送信号的响应信号)有效后,方可发送。发送时,发送器为每个字符自动地加上1位起始位,并按照程序的要求加上1位奇偶校验位,1、1.5、或2位停止位,在发送时钟的下降沿经发 送移位寄存器从线发出。3 同步接收方式常川的审行同步通信数据格式分为单、双、外同步和SDLC/HDLC四种格式。单同步数据格式的串行同步通信方式,在内同步方式允许接收后,8251A 由编程命令进入搜索方式。它监视RxD线,每出现一个数据位就把它移一位,然 后把接收寄存器与含有同步字符(由程序给定)的寄存器相比较,如果相同,表 示接收和发送方已同步,接收方便使SYNDET信号输出为高。如果不同,则接 收下一个数据并重新进行比较过程。如果采川双同步数据格式传送,则在比较第一个同步字符相同后,进行第 二个同步字符的比较,若相等,则表示已同步。如果不相等,则重新比较输入移 位寄存器和第一个同步字符寄存器的内容,相等,已同步。否则重新进行下一个 数据的比较过程。对于外同步的情况,则有所区别。它是由外加同步信号使同步输入端 SYNDET变为高电平实现的。在数据格式中没有同步字符。SYNDET加上高电位 以后,立即发送相应字符数据。SDLC/HDLC的情况与其它同步接收方式有所区别,但也是以同步字符(称 为标志)作为数据同步的。其同步字符格式固定为01111110。当接收方收到该标 志时,进入同步,从而完成相应的SDLC/HDLC操作。在实现同步以后,通信双方即进行数据的传输,8251A利川接收时钟采样 和移位RxD线上的数据位,且按规定的位数,把它送至接收数据缓冲器,并在 RxRDY线上发出一个信号,告知CPU接收到一个有效的字符。4 同步发送方式与一步发送方式一样,同步发送方式是在TxEN和有效后开始的。首先发 送的是用以同步的一个或两个字符,随后就是有效数据位,在数据中可能含有一 个奇/偶校验位,也可能没有,由程序设定。对SDLC/HDLC在发完同步字符后,还要发送地址、控制两个场的规定信息,然后才是有效数据佶息。在传送过程中,可能会出现CPU来不及将新的字符数据输出给8251A的情 况。为此,8251A能自动地在TxD线上插入同步字符,从而使字符之间没有间隙 存在。3、8251A的初始化在初始化编程时,向8251A发的控制字分为两类:方式控制字和命令控制 字。1)方式控制字由于同步和异步方式在操作上区别很大,所以方式控制字的基本格式为:异步方式控制字格式和同步方式控制字格式。CPU向其设置时,川的端口地址是 相同的,都是C/=l。两种方式控制字的区别在最低两位:低两位为00是同步方 式控制字;否则是异步方式控制字。方式控制字的基本格式如图所示。从图中可知:D0D1:首先区分发送方式,其次是在异步条件下的输入时钟频率与波特率 之间的系数。接收和发送的波特率可以不同,接收时钟和发送时钟的频率也可以 不同,但是接收和发送的波特率系数只能是同一个。D3D2:确定每个字符的位数。字符长度值可以从5位到8位不等。当程序制 定字符位数小于8位时,有效数据位右对齐,高位以0补充。D4:决定是否使川奇偶校验位,D5表示校验的方式。注意,校验位仅仅是 提供传送过程中是否有出错的判定,当正确接收到有效数据后,检验位的作用完 成。因此,从RxD上接收的奇偶校验信号是不会进入CPU的。D7D6:与采川的传输方式有关。当D1D0W00为异步方式时,表示停止位 的个数,其中D7D6=00时无效。当DlD0=00为同步方式时,D6=l为外同步,D6=l为内同步。D7表示同步字符的个数,D7=l为单同步,D7=0为双同步。如 果为外同步方式,则D7无效。2)命令控制字CPU向8251A发命令控制字,控制8251A的实际操作。发命令控制字时川的 端口地址与方式控制字的地址相同,它们的区别是靠发送的前后顺序。其格式如 图所示。D7 06 D5 04 DJ 02 DI M格式中,TxEN和RxE位分别是发送允许和接收允许位,在发送和接收之前 应发相应位为“1”的命令字,当然两位也可同时为“1”。和位分别控制和端 的输出状态,要根据通信是否受这些信号的控制来选择这两位的值。SBRK位为 1时将使TxD输出低电平作为“间断”信号。ER位为“1”将使状态信息中的错 误标志PE、OE清除为0。IR位为“1”的命令字川于使8251A复位,与RESET端 加高电平作川一样。8251A复位以后,等待设置方式控制字。在设置为同步方式 后,第一个命令字的EH为应该为1,称为ENTERHUNT(进入搜索方式)命令。这个命令之后,8251A进入测试同步字符的操作状态。3)状态字8251A内部设有状态寄存器,CPU可由读指令IN获取状态寄存器的内容,判 定8251A当前的工作状态。状态寄存器各位的定义如图927所示。DI(RxRDY)、DO(TxRDY)位可供CPU查询。状态位TxRDY和输出弓I 脚TxRDY有所不同。状态位TxRDY并不受命令控制字中允许发送位TxEN和输入 的允许发送引脚的控制,它只反映发送命令/数据缓冲器的状态,只要数据缓冲 器一空就置位;而输出引脚TxRDY却要受到上述内部和外部两个条件限制,它 不只反映发送过程中数据缓冲器的状态。DS在发送前和发送后TxRDY的状态位和输出引脚的状态可能不一致,在发送 过程中二者总是一致的。前者可供CPU查询,后者可作为向CPU发出的中断申请 信号。状态位的置位比状态的出现总是要滞迟后,最坏情况下要延迟28个时钟脉 CLK端)。在读状态的操作过程中,状态位是不变的。注意:各种控制字发送后,由于内部操作需要一定的时间,因此最好设置几 条空操作指令,然后再设置其它指令。4、8251A初始化编程方法由上所知,8251A要工作在规定的状态中,必须进行初始化。初始化的过程 就是按照方式和命令控制字的格式,向方式寄存器和命令寄存器中写入控制字。由于方式或命令控制字均没有表示其标志的信息位,因此只能依靠不同的端口地 址进行区别。但是有的端口地址含有一个不同内容的寄存器,如方式控制字端口 地址中还有同步字符寄存器等。这时写入8251A的控制字的顺序是非常重要的。对8251A初始化流程图如图928所示。8251A初始化编程总是从设置方式控制字开始,随后是命令控制字。方式控 制字必须紧跟在复位之后设置。由图16-4可见,当硬件复位或者通过软件编程对8251A复位后,便向方式寄 存器中写入方式控制字,设置8251A工作在同步或异步方式。如果是同步方式,则必须指出同步字符的个数,并随后将同步字符送入8251A的同步字符寄存器 中。无论是异步方式还是同步方式,在设置方式控制字之后,应该写命令控制字。命令控制字中包括8251A操作的各种控制命令。其中如果D6位 IR 为1,即使 8251A复位,则8251A将回到初始化状态,重新进入方式字、命令字的设置。否 则将进入数据传送阶段。当数据传送完毕之后,8251A回到写入命令字状态(注 意,不是方式字状态),可以通过改变命令字的值,改变8251A的操作。由于命令指令和发送的数据共同发送数据/命令缓冲器,因此,在发送数据 过程中,如果CPU向8251A输出一个命令控制字,将会覆盖存在数据缓冲器中等 待发送的任何字符。这就要求CPU必须等到TxRDY输出上升沿或出现TxRDY状 态位置位时,即确保缓冲器中已空,才能输出,以免破坏了原有的数据字符。同 时,在命令控制字输出以后,必须不等发送缓冲器空立即输出下一个要发送的数 据。在由两个独立的程序控制一个8251A时,可能会出现当8251A等待装入同步 字符时,一个内部复位命令来了。这时,这个命令将被视作一个同步字符而不是 进行复位。解决的方法:在发送复位命令前线发送三个全“F的命令给8251A,使其避开这种可能性。使用8251A时应该注意:8251A具有发送连续的Space电平的能力。因此8251A 只能靠接收到一连审字符连续出现帧错误(无停止位)来识别终止符。如果在终 止符之后接着接收有效字符,就需要特别注意识别终止符的最后一个字符。星迷RESET 向拈化(设方式)r-L_ 愉之方式超今忤达我痣8251初始化流程三、硬件接线图与软件流程图硬件接线图:1 0280h-*287h1 MHZOUT0GATE0CLK0U5 8253CS2B8H2BFH 一7 8 12 S-6 7-8-1-0_ 22 11112 201234567DDDDDDDDD D X X T RTxRDY_ 8251 RxRDVCSRESETCLK接线:CLKO/8254 接 1M时钟GATEO/8254 接+5VOUTO/8254 接TX/RXCLK/8251CS/8254CS/8251RXD/8251软件流程图:接YO/IO地址接Y7/IO地址接 TXD/8251四、源代码:DATA SEGMENTSTRING DB fPlease Input Char:;ODH,OAH,$,;对用户提示语DATA ENDSCODE SEGMENTASSUME CS:CODESTART:MOV DX,283HMOV AL,1EHOUT DX,ALMOV DX,280HMOV AL,34H;设初始值,初始值为原时钟/(波特率*波特因子)OUT DX,ALMOV DX,2B9H;内部复位,先复位才能设置方式控制字MOVAL,40H;40H是命令控制字,有复位的作用OUT DX,ALNOP;暂停,芯片与CPU速度有差距,需要适当延时,让8251A处理命令MOV AL,5AH;方式控制字OUT DX,ALMOV AL,37H;命令控制字OUT DX,ALNOP;延时MOV AH,09HMOV DX,SEG STRINGMOV DS,DXMOV DX,OFFSET STRING;显示提示语INT21HT RDY:MOV DX,2B9H;读取状态字IN AL,DXSHRAL;移位1位,把TXRDY读出到CF上JC INPUT;判断芯片是否准备好传输JMP T RDYINPUT:MOV AH,1H;等待键盘输入INT21HCMP AL,1BH;判断输入是否为“ESC”JZ OVERINC AL;ASCII码+1MOV DX,2B8H;输出 ASCII 码OUT DX,ALMOV DX,2B9HR_RDY:IN AL,DX;读取状态字SHR AL,1SHRAL,1;右移2位,读取RXRDY到CF上JC OUTPUTJMP R RDYOUTPUT:MOV DX,2B8H;接受字符的ASCII码IN AL,DXMOV AH,02H;显示字符,2号DOS功能MOV DL,ALINT21HMOV AL,0AH;换行显示MOV AH,02H;换行显示MOV DL,AL;换行显示INT21H;换行显示MOV AL,0DH;换行显示MOV AH,02H;换行显示MOV DL,AL;换行显示INT21H;换行显示JMP T_RDY;准备下一次输入OVER:MOV AH,4CH;结束返回DOSINT21HCODE ENDSEND START五、思考题在实验中,你如何确定RXC、TXC的值,写出计算公式。答:RXC、TXC接在TRCLK上,保持收发时钟的统一,其计算公式为:10=7乂=波特率*波特率因子六、实验现象在程序提示川户输入后,川户键盘输入一个字符比如a,屏幕会输出b,即输 出键入字符ASCII码加1对应的字符。用户可不断输入,按下ESC键后程序结束,退出。七、实验总结本次实验的基础要求还是比较容易完成的,只要了解8251方式命令字等的写 法就能在程序最初完成对8251的初始化,接下来需要了解8251的通信方式以及原 理,CPU需要检测8251是否已经做好传输以及接收,只有当准备好时才可以完成 通信。八、实验收获与心得体会由于在本次实验前理论课上已经学习过8251的知识,对于它的工作方式等等 业已有了一些了解,所以做起自收自发的实验还是比较简单的,这是微原硬件的 最后一次实验,经过这次实验我对于微原课本上的知识有了更深刻的了解,而且 经过这几次的实验我的编程能力也有了一定水平的提升,这对于我以后的学习工作很有帮助。
展开阅读全文