〔习题8.3〕填空题
(1)8253芯片上有__________个__________位计数器通道,每个计数器有__________种工作方式可供选择。若设定某通道为方式0后,其输出引脚OUT为__________电平;当__________后通道开始计数,__________信号端每来一个脉冲__________就减1;当__________,则输出引脚输出__________电平,表示计数结束。
(2)假设某8253的CLK0接1.5MHz的时钟,欲使OUT0产生频率为300kHz的方波信号,则8253的计数值应为__________,应选用的工作方式是__________。
(3)8255具有__________个外设数据引脚,分成3个端口,引脚分别是__________,__________和__________。
(4)8255的A和B端口都定义为方式1输入,端口C上半部分定义为输出,则方式控制字是__________,其中D0位已经没有作用、可为0或1。
(5)对8255的控制寄存器写入A0H,则其端口C的PC7引脚被用作__________信号线。
(6)PC机键盘上ESC键和字母A键的扫描码分别是__________和__________,断开扫描码分别是__________和__________。
(7)232C用于发送串行数据的引脚是__________,接收串行数据的引脚是__________,信号地常用__________名称表示。
(8)欲使通信字符为8个数据位、偶校验、2个停止位,则应向8250__________寄存器写入控制字__________,其在PC系列机上的I/O地址(COM2)是__________。
(9)有符号数32的8位补码是00100000,如果用8位偏移码是__________;有符号数-32的8位补码是11100000,如果用8位偏移码是__________。
(10)如果ADC0809正基准电压连接10V,负基准电压接地,输入模拟电压2V,则理论上的输出数字量为__________。
〔解答〕
①3,16,6,低,写入计数初值(并进入减1计数器),脉冲输入CLK,减法计数器,计数器的计数值减为0,高
②5(=1.5MHz÷300KHz),3
③24,PA0~PA7,PB0~PB7,PC0~PC7
④10110110(=B6H,B7H)
⑤O B F
⑥01H,1DH(=30),81H,9DH(=158)
⑦TxD,RxD,GND
⑧通信线路控制(CLR),00011111B(1FH),2FBH
⑨10100000,01100000
⑩53H(=51≈51.2=2÷10×256)
〔习题8.6〕试按如下要求分别编写8253的初始化程序,已知8253的计数器0~2和控制字I/O地址依次为204H~207H。
①使计数器1工作在方式0,仅用8位二进制计数,计数初值为128。
②使计数器0工作在方式1,按BCD码计数,计数值为3000。
③使计数器2工作在方式2,计数值为02F0H。
〔解答〕
①
mov al,50h
mov dx,207h
out dx,al
mov al,128 ; =80h
mov dx,205h
out dx,al
②mov al,33h
mov dx,207h
out dx,al
mov ax,3000h ; 不是3000 mov dx,204h
out dx,al
mov al,ah
out dx,al
③
mov al,0b4h
mov dx,207h
out dx,al
mov al,02f0h mov dx,206h out dx,al mov al,ah out dx,al
〔习题8.8〕针对8255芯片工作方式1输出时序,说明数据输出的过程。
〔解答〕
①中断方式下,处理器响应中断,执行输出OUT指令:输出数据给8255,发出W R信号。查询方式下,通过端口C的状态确信可以输出数据,处理器执行输出指令;
②WR信号一方面清除INTR,另一方面在上升沿使O BF有效,通知外设接收数据。实质上O BF信号是外设的选通信号;
③WR信号结束后,数据从端口数据线上输出。当外设接收数据后,发出A C K响应;
④A C K信号使O BF无效,上升沿又使INTR有效(允许中断的情况),发出新的中断请求。
〔习题8.9〕设定8255芯片的端口A为方式1输入,端口B为方式1输出,则读取口C的数据的各位是什么含义?
〔解答〕PC0:端口B的中断请求信号PC1:端口B输出缓冲器满信号PC2:端口B中断允许控制位PC3:端口A的中断请求信号PC4:端口A中断允许控制位PC5:端口A输入缓冲器满信号PC6/PC7:I/O信号〔习题8.10〕用8255端口A方式0与打印机接口示例中,如果改用端口B,其他不变,说明应该如何修改接口电路和程序。〔解答〕修改电路:将端口B的PB0~PB7接打印机的数据位DATA0~DATA7即可。修改程序:将输出数据端口改为FFFAH即可。
〔习题8.11〕用8255端口A方式1与打印机接口,如果改用端口B,其他不变,说明如何修改接口电路和程序。〔解答〕
修改电路:PA0~PA7改为PB0~PB7;PC6改用PC2,PC7改用PC1,PC3改用PC0。
修改程序:
mov dx,0fffeh
mov al,84h
out dx,al
mov al,04h
; 使INTEB(PC2)为0,禁止中断
out dx,al
……
mov cx,counter ; 打印字节数送CX
mov bx,offset buffer ; 取字符串首地址
call prints ; 调用打印子程序
……
prints proc
push ax ; 保护寄存器
push dx
print1: mov al,[bx] ; 取一个数据
mov dx,0fffah
out dx,al ; 从端口B输出
mov dx,0fffch
print2: in al,dx
test al,02h ; 检测(PC1)为1否?
jz print2
inc bx
loop print1
pop dx
pop ax
ret
prints endp
〔习题8.12〕有一工业控制系统,有四个控制点,分别由四个对应的输入端控制,现用8255的端口C 实现该系统的控制,如本题图形。开关K0~K3打开则对应发光二极管L0~L3亮,表示系统该控制点运行正常;开关闭合则对应发光二极管不亮,说明该控制点出现故障。编写8255的初始化程序和这段控制程序。〔解答〕
; 写入方式字
mov al,100×00×1b ; =81H (×表示任意,可以填写为0,也可以为1) mov dx,控制口地址 ; 可以假设为0FFFEH
out dx,al
;加入下一段更好,使L0~L3全亮
mov al,0fh
mov dx,端口C 地址 ; 可以假设为0FFFCH
out dx,al
;控制程序段
mov dx,端口C 地址 ; 可以假设为0FFFCH
in al,dx ; 读入PC0~PC3
mov cl,4
shl al,cl ; 左移4位
out dx,al ; 控制PC4~PC7
第6章 常用可编程外围接口芯片
1. 设8253三个计数器的端口地址为201H 、202H 、203H ,控制寄存器端口地址200H 。试编写程序片段,读出计数器2的内容,并把读出的数据装入寄存器AX 。
答:
MOV AL ,80H
OUT 200H ,AL
IN AL ,203H
MOV BL ,AL
IN AL ,203H ,
MOV BH ,AL
MOV AX ,BX
2设8253三个计数器的端口地址为201H 、202H 、203H ,控制寄存器端口地址200H 。输入时钟为2MHz ,让1号通道周期性的发出脉冲,其脉冲周期为1ms ,试编写初化程序段。
答: 要输出脉冲周期为1ms ,输出脉冲的频率是331110110-=??,当输入时钟频率为2MHz 时,计数
器初值是
633210
2102000110?=?=?
使用计数器1,先读低8位,后读高8位,设为方式3,二进制计数,控制字是76H 。设控制口的地址是200H ,计数器0的地址是202H 。程序段如下:
MOV DX,200H
MOV AL,76H
OUT DX,,AL
MOV DX,202H
MOV AX ,2000
OUT DX ,AL
MOV AL ,AH
OUT DX ,AL
3设8253计数器的时钟输入频率为1.91MHz ,为产生25KHz 的方波输出信号,应向计数器装入的计数初值为多少?
答:
Z 1.91M H z
25K H = 76.4
应向计数器装入的初值是76。
4. 设8253的计数器0,工作在方式1,计数初值为2050H ;计数器1,工作在方式2,计数初值为3000H ;计数器2,工作在方式3,计数初值为1000H 。如果三个计数器的GATE 都接高电平,三个计数器的CLK 都接2MHz 时钟信号,试画出OUT0、OUT1、OUT2的输出波形。
答:
计数器0工作在方式1,即可编程的单脉冲方式。这种方式下,计数的启动必须由外部门控脉冲GATE 控制。因为GATE 接了高电平,当方式控制字写入后OUT0变高,计数器无法启动,所以OUT0输出高电平。 计数器1工作在方式2,即分频器的方式。输出波形的频率f=
clk f N = 2M H z 3000=666.7H Z ,其周期为1.5m s ,输出负脉冲的宽度等于CLK 的周期为0.5μs 。
计数器2工作在方式3,即方波发生器的方式。输出频率f=
2M H z 1000 = 2000Hz 的对称方波。
三个OUT 的输出波形如下:
O UT 0
O UT 1 O UT 2
250μs 250μ
s
9. 试对一个8251A 进行初始化编程,要求工作在同步方式,7位数据位,奇校验,1个停止位。答: 对原题目的补充改动,要求工作在内同步方式,2个同步字符。
方式字是:00011000B=18H
程序段如下:
XOR AX ,AX
MOV DX ,PORT
OUT DX ,AL
OUT DX ,AL
OUT DX ,AL ;向8251的控制口送3个00H
MOV AL ,40H
OUT DX ,AL ;向8251的控制口送40H,复位
MOV AL ,18H
OUT DX ,AL ;向8251送方式字
MOV AL ,SYNC ;SYNC 为同步字符
OUT DX ,AL
OUT DX,AL ;输出2个同步字符
MOV AL,10111111B
OUT DX,AL ;向8251送控制字
10.一个异步串行发送器,发送具有8位数据位的字符,在系统中使用一位作偶校验,2个停止位。若每秒钟发送100个字符,它的波特率和位周期是多少?
答:
每个字符需要的发送位数是12位(数据位8位,校验位1位,停止位2位,起始位1位)。每秒发送100
个字符共1200位。因此波特率为1200波特,位周期=
1
1200
≈833μs。