微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日
微机原理与接口技术 第7章 可编程接口芯片 朱华贵 2015年11月26日
本章主要内容 1 可编程接口芯片概述 2 可编程并行接口芯片8255A 3 可编程定时器/计数器8253 4
7.1 可编程接口芯片概述 可编程接口芯片,通过软件编程来增加芯片的工作方式,使一个芯片具有灵活的多种工作方式,从而提高每个芯片的功能。 本章主要介绍几种常用可编程接口芯片: 可编程并行接口芯片8255A 可编程定时器/计数器8253 可编程串行通信接口芯片8251A
7.2 可编程并行接口芯片8255A 8255A是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口,共24位,其各端口工作方式由软件编程设定。 8255A是应用最广泛的可编程并行接口芯片,使用方便,通用性强。
7.2.1 8255A的内部结构及引脚功能 1.8255A的内部结构 8255A由数据总线缓冲器,数据端口A、端口B和端口C,A组和B组控制电路和读/写控制逻辑四部分组成。
7.2.1 8255A的内部结构及引脚功能 2.8255A的引脚功能 8255A是40个引脚双列直播插式芯片,有三个可存取数据的端口,分别是A口、B口、C口,可以通过编程来设置其工作方式;有一个控制端口,可以通控制端口设置8255A 数据端口的工作方式。
7.2.2 8255A的工作方式 A口可工作于方式0、方式1、方式2 B口可工作于方式0、方式1 C口只能工作于方式0
1.方式0—基本输入输出 在方式0下,每一个端口都作为基本的输入或输出口,端口C口的高4位和低4位以及端口A口、端口B都可独立地设置为输入口或输出口。 CPU可采用无条件传输方式与8255A交换数据。
2.方式1—单向选通输入输出 三个数据端口分为A、B两组,分别称为A组控制和B组控制。 端口A和端口B仍作为数据的输入或输出口,端口C作为联络控制信号,被分成两部分,一部分作为端口A和端口B的联络信号,另一部分仍可作为基本的输入输出口。
1)方式1输入 方式1输入时序
2)方式1输出 方式1输出时序
3.方式2—双向选通输入输出 端口A的方式2可使8255A与外设进行双向通信,既能发送数据,又能接收数据。 可采用查询方式和中断方式进行传输。
当端A口方式2和端口B方式1时,端口C各位的功能如图所示,PC7~PC3作为端口A的联络信号,PC2~PC0作为端口B的联络信号。 当端口A工作于方式2,端口B工作于方式0时,PC7~PC3作为端口A的联络信号,PC2~PC0可工作于方式0。
7.2.3 8255A的编程 1) 8255工作方式控制字(写,A1A0=11 ) D7 A组方式 00 方式0 01 方式1 1* 方式2 D6 D5 D4 D3 D2 D1 D0 A组方式 00 方式0 01 方式1 1* 方式2 端口A 0 输出 1 输入 端口C上部 B组方式 0 方式0 1 方式1 端口B 0 输出 1 输入 端口C下部
2)端口C置位/复位控制字(写,A1A0=11 )
【例7-1】在8086系统中,设8255A的A口输出,B口输入,PC1置位,PC2复位。已知:8255端口地址为60H~63H,试编程对8255A进行初始化。 解:根据题意,8255工作方式控制字为: 8255A初始化程序如下: MOV AL,82H ;方式控制字10000010B=82H OUT 63H,AL ;将控制字送入8255A控制端口,即控制寄存器中 MOV AL,03H ;C口置位控制字00000011B=03H,设置PC1=1 MOV AL,04H ;C口置位控制字00000100B=04H,设置PC2=0
7.2.4 8255A 的应用举例 【例7-2】设8255A的A口和B口工作在方式0,A口作为输入端口,接有8个开关;B口为输出端口,接有8个发光二极管。系统硬件电路如图所示,不断扫描开关Ki,当开关K0闭合时,点亮LED0、LED2、LED4、LED6,其它LED暗;当开关K1闭合时,点亮LED1、LED3、LED5、LED7,其它LED暗;当开关K0和K1同时闭合时退出。设8255A端口A、端口B、端口C及控制端口的地址分别为200H~203H。试编写程序。
解:首先确定工作方式控制字。根据题意,A口为输入端口,B口输出端口,均工作在方式0下,端口C没使用,设没有用到的控制字中对应位设置为0,所以8255A的控制字为: CODE SEGMENT ASSUME CS:CODE START:MOV AL,90H ; 8255初始化 MOV DX,203H OUT DX,AL AGAIN:MOV DX,200H IN AL,DX TEST AL,03H ; 检测K0 K1 JZ EXIT TEST AL,01H ;检测K0 JZ DISP_0
TEST AL,02H ;检测K1 JZ DISP_1 JMP AGAIN DIAP_0: MOV AL,55H ;偶位上LED亮,奇位上LED暗 MOV DX,201H OUT DX,AL DIAP_1: MOV AL,0AAH ;奇位上LED亮,偶位上LED暗 EXIT: MOV AH,4CH INT 21H CODE ENDS END START
【例7-3】硬件电路连线如图所示,8086CPU通过8255A同键盘相连,试编程序,扫描键盘按键,将按键对应的数值显示在七段LED上。设8255A的端口地址为80H~83H。
解:通过硬件电路图,可以判断出8255A口工作于方式0输出,B口未用,C口低4位输入,C口高4位输出,工作方式控制字是: 共阴极LED七段数码管显示的字符0~F的段码如表7-1所示: 显示字符 1 2 3 4 5 6 7 8 9 A B C D E F 段码(H) 3F 06 5B 4F 66 6D 7D 07 7F 6F 77 7C 39 5E 79 71
程序流程如图
A_PORT EQU 80H B_PORT EQU 81H C_PORT EQU 82H CT_PORT EQU 83H DATA SEGMENT TAB1 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;定义段码表 DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H DATA ENDS CODE SEGMENT ASSUME CS:CODE START: MOV AL,10000001B MOV DX,CT_PORT OUT DX,AL MOV DX,C_PORT MOV AL,0 ;输出列信号
NO_KEY: MOV DX,C_PORT IN AL,DX AND AL,0FH CMP AL,0FH JZ NO_KEY CALL DELAY10MS JZ NO_KEY MOV BL,0 ;置初始列值为0 MOV CH,0EFH LOOP1: MOV AL,CH MOV DX,C_PORT OUT DX,AL
IN AL,DX ;读取行信号 PUSH BX MOV BH,0 ;设置初始行值0 MOV CX,4 LOOP3: SHR AL,1 JNC LOOP2 ;该行有按键 INC BH LOOP LOOP3 ROL CH,1 CMP CH,0FEH JNZ LOOP1 JMP NO_KEY
LOOP2: MOV AH,BH POP BX ;弹出列值到BL MOV BH,AH ;BH中是行,BL中是列 LOOP4: SHL BH,1 ;*4获得行值 SHL BH,1 ADD BH,DL ;键值=值行+列值 MOV AL,BH ;键值换码后显示到数码管 LEA BX,TAB1 XLAT MOV DX,A_PORT OUT DX,AL CALL DELAY10MS MOV AH,4CH INT 21H
DELAY10MS PROC NEAR ;延时子程序 PUSH BX ;现场保护 PUSH CX MOV BX,10 WAIT0: MOV CX,2801 ;内循环次数,大小由单位时间定 WAIT1: LOOP WAIT1 ;延时10MS DEC BX JNZ WAIT0 POP CX ;现场恢复 POP BX RET DELAY10MS ENDP CODE ENDS END START
7.3 可编程定时器/计数器8253 8253是Intel公司生产的通用可编程定时/计数器,定时时间与计数次数由用户事先设定。 8253的读/写操作对系统时钟没有特殊的要求,可应用于由任何一种微处理器组成的系统中,可作为可编程的方波频率发生器、分频器、实时时钟、事件计数器和单脉冲发生器等。
7.3.1 8253的内部结构及引脚功能 1.8253的内部结构 每片8253有3个独立的16位计数通道,每个计数通道最高计数速率可达2.6MHZ。每个计数器可编程设定6种工作方式,使用时可以根据需要选择其中的一种工作方式。每个计数通道可按二进制或十进制来计数。 定时和计数在工作原理上是相同的,都是对一个输入脉冲进行计数。
2. 8253的引脚功能 8253采用双列直插式封装,有24个引脚。 A1 A0 端口 计数器0 1 计数器1 计数器2 控制寄存器 × 计数器0 1 计数器1 计数器2 控制寄存器 × 未选中
7.3.2 8253的工作方式 8253的每个计数器都有6种工作方式:方式0~方式5。 这6种工作方式的不同点是: 输出波形不同 启动计数器的触发方式不同 计数过程中GATE信号对计数过程的影响不同
1.方式0—低电平输出 8253完成计数功能,且计数器只计一遍。控制字写入后,输出端OUT变为低电平。计数初值写入后,下一个CLK脉冲的下降沿,计数初值寄存器内容装入减1计数寄存器,开始计数,输出端OUT维持低电平。 当计数值减到0时,OUT输出端变为高电平,此信号可作为中断请求信号,并可保持到重新写入新的控制字或新的计数值为止。 计数过程中,若GATE信号变为低电平,暂停计数,减1计数寄存器值保持不变;若GATE信号重新变高,则计数器从暂停值开始继续计数;若重新写入新的计数初值,则在下一个CLK脉冲的下降沿,减1计数寄存器以新的计数初值重新开始计数。
8253方式0的时序波形图
2.方式1—低电平输出 方式1是硬件触发单稳态方式,输出单个负脉冲信号,脉冲的宽度可通过编程来设定。 写入控制字后,输出端OUT变为高电平,并保持。写入计数初值后,在GATE信号的上升沿之后的下一个CLK脉冲的下降沿,计数初值装入减1计数寄存器,同时OUT端变为低电平,开始计数。 当计数值减到0时,输出端OUT变为高电平。 计数过程中,如果CPU又送来新的计数初值,不影响当前计数过程。等到计数器计数到0,OUT端输出高电平且出现新的一次GATE信号的触发时,才会将新的计数初值装入,并计数。 如果在输出端OUT输出低电平期间,又来一个门控信号上升沿触发,则在下一个CLK脉冲的下降沿,将计数初值寄存器内容重新装入减1计数寄存器,并计数。
8253方式1的时序波形图
3.方式2—周期性负脉冲输出 方式2可产生连续的负脉冲信号,可用作频率发生器。负脉冲的宽度为一个时钟周期。 写入控制字后,输出端OUT变为高电平。若GATE为高电平,那么写入计数初值后,在下一个CLK的下降沿计数初值寄存器内容装入减1计数寄存器,开始减1计数。当减1计数寄存器的值为1时,OUT端输出低电平,经过一个CLK时钟周期,OUT端输出高电平,并自动开始一个新的计数过程。 在计数过程中,如果减1计数寄存器未减到1时GATE信号由高变低,则停止计数。但当GATE由低变高时,则重新将计数初值寄存器内容装入减1计数寄存器,并重新开始计数。 如果GATE信号保持高电平时,在计数过程中重新写入计数初值候,要等正在计数的一轮结束并输出一个CLK周期的负脉冲后,才以新的初值进行计数。
8253方式2的时序波形图
4.方式3—周期性方波输出 方式3可产生连续的方波信号,可用作方波发生器。计数初值为偶数时,输出对称方波;计数初值为奇数时,输出不对称方波。 控制字写入后,输出端OUT输出高电平。当写入计数初值后,在下一个CLK的下降沿,计数初值装入减1计数寄存器,开始计数。计数到一半时,输出端OUT变为低电平。此时,继续计数,到0时,OUT端变为高电平。之后,自动开始一个新的计数过程。 计数过程中,若GATE变为低电平,则停止计数;当GATE由低变高时,则重新启动计数过程。如果在输出端OUT为低电平时,GATE变为低电平,则减1计数器停止,同时,输出端OUT立即变为高电平。在GATE又变成高电平后的下一个时钟脉冲的下降沿,减1计数器重新得到计数初值,并计数。 计数过程中,如果写入新的计数值,不影响当前输出周期。但如果在写入新的计数值后,又受到门控上升沿的触发,则结束当前输出周期,而在下一个时钟脉冲的下降沿,减1计数器重新得到计数初值,并计数。
8253方式3的时序波形图
5.方式4—软件触发的单次负脉冲输出 方式4是软件触发的选通方式。采用方式4可产生单个负脉冲信号,负脉冲宽度为一个时钟周期。 写入控制字后,输出端OUT变为高电平,若GATE为高电平,则在写入计数初值后下一个CLK的下降沿计数初值寄存器内容装入减1计数寄存器,开始减1计数。当减1计数寄存器的值为0时,输出端OUT变为低电平,经过一个CLK时钟周期,输出端OUT变为高电平。 如果在计数时,又写入新的计数值,则在下一个CLK的下降沿此计数初值被写入减1计数寄存器,并以新的计数值作减1计数。
8253方式4的时序波形图
5.方式5—硬件触发的单次负脉冲输出 方式5是硬软件触发的选通方式。采用方式5可产生单个负脉冲信号,负脉冲宽度为一个时钟周期。 方式5的计数过程由GATE的上升沿触发。当控制字写入后,输出端OUT输出高电平,并保持。写入计数初值后,只有在GATE信号的上升沿之后的下一个CLK脉冲的下降沿,计数初值装入减1计数寄存器,开始计数。当计数到0时,输出端OUT变为低电平,并持续一个CLK周期,然后自动变为高电平。 计数过程中,若GATE端又来一个上升沿触发,则在下一个CLK脉冲的下降沿,减1计数寄存器将重新获得计数初值,并计数。 计数过程中,若写入新的计数值,但没有触发脉冲,则当前输出周期不受影响,当前周期结束后,在再次触发的情况下,才将按新的计数初值开始计数;若写入新的计数值,并在当前周期结束前又受到触发,则在下一个CLK脉冲的下降沿,减1计数寄存器将获得新的计数初值,并计数。
8253方式5的时序波形图
7.3.3 8253的初始化 1. 8253方式控制字
8253的控制寄存器和3个计数器分别具有独立的编程地址,由控制字的内容确定使用的是哪个计数器以及执行什么操作。 2.8253初始化编程 1)8253初始化编程原则 8253的控制寄存器和3个计数器分别具有独立的编程地址,由控制字的内容确定使用的是哪个计数器以及执行什么操作。 8253在初始化编程时必须遵守两条原则: 在对某个计数器设置初值之前,必须先写入控制字。 在设置计数初始值时,要符合控制字的规定,即只写低位字节,还是只写高位字节,还是高、低位字节都写(分两次写,先低字节后高字节)。
2)8253的编程命令 8253的编程命令有两类: 一类是写入命令,包括设置控制字、设置计数器的初始值命令和锁存命令。 另一类是读出命令,用来读取计数器的当前值。
3)8253的初始化编程 8253初始化编程步骤是: 先写控制字到8253的控制端口。 再写计数器初值到相应的计数器端口。 【例7-5】在8086系统中,设8253的计数器0工作在方式2,二进制计数,计数初值为2000,8253的计数器1工作在方式3,BCD码计数,计数初值为100,8253端口地址为40H~43H。试编写初始化程序。
解:8253计数器0的初始化程序如下: MOV AL,34H ;方式控制字00110100B=34H OUT 63H,AL ;将控制字送入8253A控制端口63H MOV AX,2000 ;初值送AX寄存器 OUT 60H,AL ;将初值的低8位输出计数通道0端口60H MOV AL,AH ;初值的高8位送AL寄存器 OUT 60H,AL ;将将初值的高8位输出计数通道0端口60H 8253计数器1的初始化程序如下: MOV AL,57H ;方式控制字01010111B=57H MOV AL,100H ;初值100送AL寄存器,因为BCD码计数,要送100H OUT 61H,AL ;将初值的低8位输出计数通道1端口61H
7.3.4 8253应用举例 【例7-6】硬件图如图所示,。要求将一输入频率为2MHz信号,利用8253做一个秒信号发生器,其输出接一发光二极管,以0.5秒点亮,0.5秒熄灭的方式闪烁指示。设8253的通道地址为400H~403H。
MOV AL,34H ;或36H MOV DX,403H OUT DX,AL ;写计数器0方式控制字 MOV DX,400H MOV AX,20000 OUT DX,AL ;写计数器0计数初值低8位 MOV AL,AH OUT DX,AL ;写计数器0计数初值高8位 MOV AL,56H OUT DX,AL ;写计数器1方式控制字 MOV DX,401H MOV AL,100 OUT DX,AL ;写计数器1计数初值低8位
【例7-8】设计一个程序,PC机使扬声器发出500Hz频率的声音,按下ESC键声音停止。
解:PC机的发声系统以8253计数器2为核心进行控制。 CLK2的输入频率1 解:PC机的发声系统以8253计数器2为核心进行控制。 CLK2的输入频率1.193MHz,改变计数器初值可以由OUT2得到不同频率的方波输出。要产生500Hz的频率信号,计数初值这样计算: N=1.193MHz/500Hz=2386 发声系统受8255芯片B口的两个输出端线PB0和PB1的控制。PB0为1,使GATE2为1,计数器2能正常计数。PB1为1,打开输出控制门。
CODE SEGMENT ASSUME CS:CODE START: MOV AL,0B0H ;8253控制字=10110110B OUT 43H,AL ;写8253计数器2的方式控制字 MOV AX, 2386 OUT 42H, AL MOV AL, AH OUT 42, AL ;按先低8位后高8位的顺序写入 ;计数器2的计数值 NEXT: MOV AH, 01H ;单字符输入DOS功能调用 INT 21H CMP AL,1BH ;ESC键的ASCII码=1BH JZ EXIT
MOV AL,03H OUT 61H,AL ;置GATE2信号为高电平 JMP NEXT EXIT: IN AL, 61H AND AL, 0FCH OUT 61H, AL MOV AH, 4CH INT 21H CODE ENDS END START
7.4 可编程串行通信接口芯片8251A 计算机传送数据有两种方式:一种是并行通信,一种是串行通信。
并行通信一般是8位以上的数据一起传送,具体是多少位要根据设备的线宽来决定。由于并行通信方式使用的信号线较多,一般用在短距离的数据量大场合。 串行通信是指利用一条传输线将数据一位一位地按顺序分时传输。一般用于长距离的数据偏传送。
7.4.1 串行数据传送方式 单工方式 半双工方式 全双工方式
7.4.2 传输速率和传送距离 1.传输速率 在并行通信中,传输速率用每秒传输的字节数表示,单位是:Bps。 常见的标准波特率有:110bps、1200bps、9600bps和115200bps。
7.4.2 传输速率和传送距离 2.发送/接收时钟 在发送数据时,发送器在发送时钟的有效沿作用下将移位寄存器的数据按位移位串行输出; 在接收数据时,接收器在接收时钟的有效沿作用下对接收数据按位采样,并按位串行移入移位寄存器。 发送/接收时钟是对数据信号进行同步的,其频率将直接影响设备发送/接收数据的速度。发送/接收时钟频率一般是发送/接收波特率的n倍,n称为波特率因子,一般取1、16、32或64。
发送时钟与波特率时序
7.4.2 传输速率和传送距离 3.传输距离与传输速率的关系 串行通信中,传输距离随着传输速率的增加而减小。
7.4.3 同步串行通信与异步串行通信 1.异步串行通信 异步串行通信中的异步是指发送端和接收端不使用共同的时钟,也不在数据中传送同步信号,但接收方与发送方之间必须约定传送数据的帧格式和波特率。 在异步串行通信中,通信双方以一个字符(含附加位)作为数据传输单位(一个数据帧),而且发送方传送字符的时间是不定的。在传输一个字符时,总是以起始位(1位,低电平)开始,以停止位(1、1.5或2位,高电平)结束。为了使数据可靠传送,还可包含奇偶校验位。
异步串行通信中数据的帧格式
【例7-9】设数据帧为1位起始位、7位数据位、1位奇偶校验位、1位终止位,传送的波特率为9600bps。用7位数据位表示一个字符,求最高字符传送速率。 解:∵一帧数据所需要的位数=1+7+1+1=10 ∴最高字符传送速率=9600/10=960字符/秒
7.4.3 同步串行通信与异步串行通信 2.同步串行通信 在异步串行通信中数据的每一帧都需要附加起始位和停止位,因而降低了传送有效数据的效率。对于快速传送大量数据的场合,为了提高数传的效率,一般采用同步串行传送方式。 同步传送时,无需起始位、停止位。每一帧包含较多的数据,在每一帧开始处使用1-2个同步字符以表示一帧的开始。 同步传送要求对传送的每一位在收发两端保持严格同步,发送、接收端可使用同一时钟源以保证同步。
有2个同步字符的同步串行通信的数据格式
7.4.4 可编程串行通信接口芯片8251A 1.8251A的基本功能 能以同步方式或异步方式进行工作。 工作于同步方式时,每个字符可定义为5、6、7或8位,可以选择进行奇校验、偶校验或不校验。内部能自动检测同步字符实现内同步或通过外部电路获得外同步,波特率为0~64K。 工作于异步方式时,每个字符可定义为5、6、7或8位,用1位作为奇偶校验(可选择)。时钟速率可用软件定义为通信波特率的1、16或64倍。能自动为每个被输出的数据增加1个起始位,并能根据软件编程为每个输出数据增加1个、1.5个或2个停止位。异步方式下,波特率为0~19200bps。
8251A能进行出错检测,具有奇偶、溢出和帧错误等检测电路。 具有独立的接收器和发送器,因此,能够以单工、半双工或全双工的方式进行通信。并且提供一些基本控制信号,可以方便地与调制解调器连接。
7.4.4 可编程串行通信接口芯片8251A 2.8251A的内部结构 8251A主要由5个功能模块组成,包括数据总线缓冲器、接收器、发送器、读/写控制逻辑和调制解调器控制电路。8251A内部通过内部数据总线实现相互之间数据传送。
8251A读/写操作功能
7.4.4 可编程串行通信接口芯片8251A 3.8251A的引脚功能 8251A采用28个引脚双列直插式封装。
7.4.4 可编程串行通信接口芯片8251A 端 口 数据寄存器 1 方式、命令、状态寄存器 × 未选中
7.4.4 可编程串行通信接口芯片8251A 5.8251A的命令字和状态字 1)方式选择命令字
2)工作命令字
3)状态字
7.4.4 可编程串行通信接口芯片8251A 6.8251A的初始化编程 1)初始化编程步骤 第一步:芯片复位后,第一个写入奇地址端口的是方式选择命令字。约定双方的通信方式,数据格式及传输速率等参数。 第二步:如果方式选择命令字规定了8251A工作在同步方式,那么,接下来必须向奇地址端口写入规定的1个或2个同步字符。 第三步:只要不是复位命令,不论同步方式还是异步方式,接下来还需向奇地址端口写入工作命令字。
2)复位命令 要改变8251A的工作方式,必须先复位,再重新设置方式。8251A有两种复位方式:硬件复位和软件复位。 软件复位是编程中常采用的方法。软件复位的步骤是: (1)向控制/状态端口连续写入3个0; (2)写入控制字40H。
3)8251A初始化编程 异步方式下初始化编程 同步方式下初始化编程 【例】8251A工作在异步方式,波特率系数为16,数据长度为7位,偶校验,2个停止位,则方式选择命令字为:11111010B=0FAH。现要求使8251A复位出错标志、使请求发送信号有效、使数据终端准备好信号有效、发送允许TxEN有效、接收允许RxE有效,工作命令字应为:00110111B=37H。假设8251A的两个端口地址分别为80H和81H,初始化编程如下: MOV AL, 0FAH OUT 81H, AL ;设置方式选择命令字 MOV AL, 37H OUT 81H, AL ;设置命令字
【例】8251A工作在同步方式,使用两个同步字符(内同步)、奇校验、每个字符8位,则方式选择命令字应为:1CH。现要求使8251A复位错标志,允许发送和接收、使CPU己难备好且请求发送,启动搜索同步字符,则工作命令字应该是:0B7H。又设第一个同步字符为0AAH,第二个同步字符为55H。还使用上例的8251A芯片,这样要先用内部复位命令40H,使8251A复位后,再写入方式选择控制字。具体程序段如下: MOV AL, 40H OUT 81H, AL ;复位8251A MOV AL, 1CH OUT 81H, AL ;设置方式选择字 MOV AL, 0AAH OUT 81H, AL ;写入第一个同步字符 MOV AL, 55H OUT 81H, AL ;写入第二个同步字符 MOV AL, 0B7H OUT 81H, AL ;设置命令字
3)8251A的应用举例 【例7-10】试编写程序段,用异步串行通信方式输出STRING开始字符串‘Receiver ready $’,$字符串的结束标记。设8251A数据端口地址为90H,方式命令状态端口地址为91H。 MOV AL,0 OUT 91H, AL MOV AL,40H OUT 91H, AL ;写入复位命令 MOV AL,7EH ;一个停止位,偶校验,8个数据位 ;波特率因子16 OUT 91H, AL ;写入方式选择命令字
MOV BX, OFFSET STRING ;BX指向缓冲区首址 WAIT:IN AL, 81H ;读状态字 TEST AL, 1 ;测试TxRDY位 JZ WAIT ;为0,未准备好 等待 MOV AL ,[BX] ;取一个字符 CMP AL, ’ $ ’ ;判断是否是结束标志 JE EXIT OUT 90H,AL ;输出字符 JMP WAIT EXIT: …… ;结束
【例7-11】试编写程序段,用异步串行输入方式输入1000个数据,存放到内存BUF开始的单元中。要求使8251A工作在异步方式,波特率系数为16,数据长度为7位,偶校验,2个停止位。设8251的端口地址为80H和81H。 MOV AL,0FAH OUT 81H, AL ;写入方式选择字 MOV AL,37H OUT 81H, AL ;写入工作命令字 LEA BX, BUF ;BX指向缓冲区首址 MOV CX, 1000 ;设置计数器初值 WAIT0:IN AL, 81H ;读状态字 TEST AL, 2 ;测RxRDY位 JZ WAIT0 ;未收到字符等待
IN AL, 80H ;从数据口读入数据 MOV [BX],AL ;将字符保存到缓冲区 INC BX ;缓冲区指针下移一个单元 IN AL,81H ;读状态字 TEST AL, 38H ;判断有无三种错误 JNZ ERROR ;有错,则转出错处理程序 LOOP WAIT0 ;没错,判是否结束循环 JMP EXIT ;结束 ERROR: CALL ERR_PRO ;转入错误处理程序 EXIT: ……
【例7-12】编写8251异步模式下的接收和发送程序,设端口地址:80H,81H,波特率因子16,1个起始位,1个停止位,无奇偶校验,每字符数据8位,设置数据传输的波特率为9600bps。
(1)8253的初始化: 工作方式:选择方式3。 8253输出频率:fout=9600. 16=153600=153 (1)8253的初始化: 工作方式:选择方式3。 8253输出频率:fout=9600*16=153600=153.6K。 选用输入频率:CLK=1.8432MHz,即fin=1.8432MHz 计数初值:N=fin/ fout =12 (2)8251初始化设置 先对825lA软件复位,一般采用先送3个0, 再送1个40H的方法,这也是8251A的编程约定,40H可以看成是使8251A执行复位操作的实际代码。
MOV AL,00H ;复位8251A OUT 81H,AL CALL DELAY MOV AL,40H CALL DELAY ;等待8251A复位 MOV AL,4EH ;设8251A方式选择命令字 MOV AL,37H ;设8251A工作命令字
(3)数据发送子程序: 设要发送的数据通过DL寄存器器传递。源程序如下: SENDATA PROC CTXR1: IN AL,81H ;读入状态字 AND AL,01H ;查TXRDY JZ CTXR1 MOV AL,DL OUT 80H,AL ;发送 RET SENDATA ENDP
(4)数据接收子程序: RECDATA PROC ;AL存接收到的数据 CRXD1: IN AL,82H ;输入状态字 AND AL 02H ;查RXRDY? JZ CRXD1 IN AL, 80H ;接收 RET RECDATA ENDP