微机原理与接口技术习题集3.docx
《微机原理与接口技术习题集3.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术习题集3.docx(105页珍藏版)》请在冰豆网上搜索。
![微机原理与接口技术习题集3.docx](https://file1.bdocx.com/fileroot1/2022-11/23/a7bc078d-5bb9-48f9-b8d3-93e35d3aa957/a7bc078d-5bb9-48f9-b8d3-93e35d3aa9571.gif)
微机原理与接口技术习题集3
551.编写8253计数器0工作于方式3,计数器1工作于方式4,计数器2工作于方式0进行中断传送的程序
【参考答案】P185例159
程序如下:
START:
MOV
DX,04C6H
;设置8253控制口地址
MOV
AL,00110110B
;二进制、方式3、写16位计数器
OUT
DX,AL
;控制字写入计数器0的控制寄存器
MOV
DX,04C0H
;设置8253计数器0地址
MOV
AX,09C4H
;计数初值
OUT
DX,AL
;写入初值低8位
MOV
AL,AH
OUT
DX,AL
;写入初值高8位
MOV
BL,00H
;灯亮或灭的标志
MOV
DX,04B0H
;8259A的偶地址
MOV
AL,00010011B
;设置ICW18259初始化控制字ICW1
OUT
DX,AL
;写入ICW1
MOV
DX,04B2H
;8259A的奇地址
MOV
AL,50H
;设置ICW18259初始化控制字ICW2
OUT
DX,AL
;写入ICW2
MOV
AL,00000001B
;设置ICW18259初始化控制字ICW4
OUT
DX,AL
;写入ICW4
MOV
AL,0FEH
OUT
DX,AL
;写入OCW1
MOV
AX,OFFSETINTR1
;设置中断服务程序INTR1的偏移地址
MOV
WORDPTR[140H],AX*4
;中断矢量表地址为50H*4
MOV
AX,SEG,INTR1
;设置中断服务程序INTR1所在段地址
MOV
WORDPTR[142],AX
MOV
AX,OFFSETINTR2
;设置中断服务程序INTR2所在段地址
MOV
WORDPTR[144H],AX*4
;中断矢量表地址为51H4
MOV
AX,SEGINTR2
;设置中断服务程序INTR2所在段地址
MOV
WORDPTR[146],AX
MOV
DX,04C6H
;设置8253控制口地址
MOV
AL,01011000B
OUT
DX,AL
;将控制字写入计数器1的控制寄存器
MOV
DX,04C6H
;设置8253控制口地址
MOV
AL,10110000
OUT
DX,AL
;控制字写入计数器2的控制寄存器
MOV
DX,04C2H
;设置8253计数器1地址
MOV
AL,64H
;设置计数器初值
OUT
DX,AL
;计数器初值写入8253计数器1
MOV
04C4H
;设置8253计数器2地址
MOV
AL,00H
;写低字节
OUT
DX,AL
;计数值低字节写入计数器2
MOV
AL,10H
;写高字节
OUT
DX,AL
;计数值高字节写入计数器2
STI
;开中断
AA:
HLT
;等待中断
JMP
AA
INTR1
PROC
FAR
CLI
;禁止中断
MOV
DX,04C2H
;设置8253计数器1地址
MOV
AL,00H
;高字节,置新初值,启动工作
OUT
DX,AX
;激数值高字节写入计数器1
MOV
AL,10H
;低字节
OUT
DX,AL
;计数值低字节写入计数器1
STI
;开中断
IRET
INTR1
ENDP
INTR2
PROG
FAR
CLI
;禁止中断
MOV
DX,04A0H
;74LS373的地址
CMP
BL,00H
;灯闪烁判断
JZ
AA2
;BL=00灯亮
MOV
AL,00H
;BL=01灯灭
OUT
DX,AX
MOV
BL,00H
;重新设标志
JMP
AA3
AA2:
MOV
AL,0FFH
;灯亮
OUT
DX,AL
MOV
BL,01H
;重新设标志
AA3:
STI
;开中断
IRET
INTR2
ENDP
CODE
ENDS
END
START
552.8253如何与CPU接口
【参考答案】P185例160
8253通过地址总线、数据总线、控制总线与CPU相连接没Intel8253的数据总线引脚D7~D0可直接连到CPU的数据总线上,CPU通过数据总线向8253传送控制字与计数初值,Intel8253的片选
可由CPU的高地址经译码后提供。
CPU的地位地址线A1、A0,用于选择8253内部寄存器。
8253的
,
直接连至CPU的读、写控制线
、
,以便CPU能对8253进行读、写操作。
图125是CPU与8253的连接图,设8253的I/O口地址为10H~13H,分别对应8253的计数器0、计数器2及方式控制字寄存器的地址。
553.试计算8253计数器0工作于方式3,时钟CLK0的频率为1MHz,输出40kHz的重复方波时计数初值
【参考答案】P189例161
计数初值
初值
若采用二进制技数,则写入方式为:
MOVAL,25
OUTPORT0,AL;PORT0位通道0的端口地址
若采用十进制计数,则写入方式为:
MOVAL,25H
OUTPORT0,AL
554.编写8253通道0工作于定时方式时,每20ms,而通道1输出频率为2KHz的方波时初始化程序
【参考答案】P189例162
计数通道0要求每20ms向CPU发出一个中断请求信号,为重复波形,采用方式2速率发生器,每20ms发一个1/2MHz=0.5ms的负脉冲,经反相后可作为8086的中断请求信号。
计数通道1为2000Hz方波输出,工作于方式3。
初值计算如下:
计数通道0:
计数通道1:
方式控制字:
CW0=00110100=34
计数通道0,方式2,二进制计数,由于n0>10000,故只能用二进制计数。
计数通道1,C
1=01100111=67
即1通道,只写高8位,方式3,BCD计数。
初始化程序如下:
MOVDX,243H
MOVAL,34H;计数通道0写方式控制字
OUTDX,AL
MOVAL,67H;计数通道1写方式控制字
OUTDX,AL
MOVDX,240H;计数通道0写计数初值
MOVAX,40000
OUTDX,AL
MOVAL,AH
OUTDX,AL
MOVDX,241H;计数通道1写计数初值
MOVAL,20H
OUTDX,AL
注:
也可把CW0=40000写成9C40H,则先写入40H,后写入9CH。
555.8253在写入计数初值时,二进制计数和十进制计数有何区别
【参考答案】P190例163
采用二进制计数时,如果计数初值n为8位二进数(十进制≤255),则在用MOVAL,n写入AL时,n可以写成任何进制数。
如果计数初值n为16位二进制数(十进制数≤65535),则可由两种方式写入,一种是把十进制数转换成4位16进制数,分两次写入对应的计数通道(先低后高);另一种是把十进制数直接写入AX,即
MOVAX,n
MOVPORT,AL;PORT为通道地址
MOVAL,AH
OUTPORT,AL
采用十进制数时,必须把计算得到的计数初值的十进制数后加上H,变为BCD码表示形式。
如n=50,则写为
MOVAL,50H
OUTPORT,AL
MOVAL,50H
如n=1250,则写为:
OUTPORT,AL
MOVAL,12H
OUTPORT,AL
556.编写8253产生1
的负脉冲的初始化程序
【参考答案】P191例164
设8253通道2工作在方式2,OUT2输出2KHz频率方波,夫脉冲宽度为1
,GATE2接+5V,8253-5端口地址为40H~43H。
方式2的夫脉冲宽度就是CLK2时钟脉冲的脉冲周期,所以CLK2的脉冲频率为:
计数初值
工作方式控制字为:
10
11
010
0
通道2
先低8位
后高8位
方式2
二进制计数
初始化程序段为:
MOVAL,10110100B;通道2的工作方式控制字
OUT43H,AL
MOVAL,OF4H;送计数初值低字节
OUT42H,AL
MOVAL,01H;送计数初值高字节
OUT42H,AL
557.编写8253对外部事件计数10次的程序
计数电路如图126所示。
由图可知,本例使用的是计数器0。
外部事件用单稳态电路输
入,单稳电路的输出接至CLK0,GATE0接+5V。
由于计数器的CLK0接至单稳态电路,因而计数初值写入计数器后要由外接的单稳态电路输入一个脉冲把计数初值装入减1计数器,才能对外部事件进行计数。
所以外部事件进行计数(即单稳态电路输入)要输入11次。
用查询计数器的初值和最终值编制。
【参考答案】P190例165
(1)用查询计数器的初值和最终值编制的程序如下:
Stack
Segmentstack'stack'dw32dup(?
)
Stack
ends
Data
segment
DA1
DB'WAITLOAD',0AH,0DH,'$'
DA2
DB'PLEASEINPUT',0AH,0DH,'$'
DA3DB
'PROGRAMTERMINATEDNORMALLY',0AH,0DH,'$'
Data
ends
Code
segment
Begin
procfar
assumess:
stack,cs:
code,ds:
data
PUSH
DS
SUB
AX,AX
PUSH
AX
MOV
AX,DATA
MOV
DS,AX
MOV
DX,383H
;8253计数的方式0,BCD计数
MOV
AL,11H
OUT
DX,AL
MOV
DX,380H
MOV
AL,10H
OUT
DX,AL
MOV
DX,OFFSETDA1
MOV
AH,9
INT
21H
MOV
DX,380H
LOAD:
IN
AL,DX
CMP
AL,10H
;等待单稳输入脉冲,装入计数初值
JNE
LOAD
MOV
DX,OFFSETDA2
MOV
AH,9
INT
21H
MOV
DX,380H
COUNTIN:
IN
AL,DX
CMP
AL,0
;等待单稳输入10个脉冲
JNZ
COUNTIN
MOV
DX,OFFSETDA3
MOV
AH,9
INT
21H
ret
begin
endp
code
ends
endbegin
(2)若将OUT0接至8086微机的IRQ9。
使用中断编程的程序如下:
Stacksegmentstack'stack'dw32dup(?
)
Stackends
datasegment
DA1DB'WAITLOAD',0AH,0DH,'$'
DA2DB'PLEASEINPUT',0AH,0DH,'$'
DA3DB'PROGRAMTERMINATEDNORMALLY',0AH,0DH,'$'
dataends
codesegment
beginprocfar
assumess:
stack,cs:
code,ds:
data
PUSHDS
SUBAX,AX
PUSHAX
MOVES,AX
MOVAX,DATA
MOVDS,AX
MOVDX,383H;8253计数的方式0,BCD计数
MOVAL,11H
OUTDX,AL
MOVDX,380H
MOVAL,10H
OUTDX,AL
MOVDX,OFFSETDA1
MOVAH,9
INT21H
MOVDX,380H
LOAD:
INAL,DX
CMPAL,10H;等待单稳输入脉冲,装入计数初值
JNELOAD
MOVAX,SEGIS8253;填写中断向量表
MOVES:
01C6H,AX
MOVAX,OFFSETIS8253
MOVES:
01C4H,AX
INAL,0AH1;改变屏蔽字,允许IRQ9中断
ANDAL,0FDH
OUT0A1H,AH
MOVDX,OFFSETDA2
MOVAH,9
INT21H
JMP$;等待单稳输入10个脉冲
MOVDX,OFFSETDA3
MOVAH,9
INT21H
ret
IS8253:
MOVAL,61H;指定中断结束命令
OUT0A0H,AL
MOVAL,62H
OUT20H,AL
INAL,0A1H;关屏蔽,禁止IRQ9中断
ORAL,2
OUT0A1H,AL
POPAX;修改返址
INCAX
INCAX
PUSHAX
IRET
beginendp
codeends
endbegin
558.编写8253对外部事件计数100次发中断请求的程序
某8086系统中有8253芯片,利用其通道1完成对外部事件计数,计满100次向CPU
发出中断申请;利用通道2输出频率为1kHz的方波,硬件电路如图127所示。
【参考答案】P195例166
设8253端口地址为偶地址18H~1EH,所以8253的数据线D7~D0。
应接CPU的低8位数据线D7~D0,外部事件由8253通道1的CLK1端输入,通道1工作在方式0,当计数次数到,从OUT1端输出的正跃变信号作为向CPU的中断申请,由8259A中断控制器管理其中断;通道2的CLK2输入时钟是由D触发器分频4MHz的信号,故CLK2输入时钟频率为2MHz,而通道2工作方式在方式3产生1kHz频率的方波,方波周期为1ms,因此,通道2的计数值应为:
1ms÷0.5
=2000,两个通道均用BCD计数制。
通道1:
控制字为:
01110001B;计数值为:
100
通道2:
控制字为:
10100111B;计数值为:
2000
程序如下:
MOVAL,71H;通道1控制字
OUT1EH,AL;
MOVAL,0A7H;通道2控制字
OUT1EH,AL
MOVAL,00H;通道1计数值低8位
OUT1AH,AL
MOVAL,01H;通道1计数值高8位
OUT1AH,AL
MOVAL,20;通道2计数值高8位
OUT1CH,AL
…;8259A初始化略
559.编写8253定时控制发光二极管的亮灭的程序
8253通道2接有一发光二极管,要使发光二极管以点亮2s,熄灭2s的间隔工作,8253
个通道端口地址分别为FFE9H~FFEFH,其电路如图128所示。
【参考答案】P196例167
根据以上条件要求8253通道2应输出一个占空比为1:
1,周期为4s的方波。
从图128可知,通道1的CLK1输入时钟周期为1
,若通道1工作为定时,其输出最大定时时间为1
*65536≈65.5ms,因而使用一个通道达不到定时时间4s的要求。
此时,采用通道级联的方法,将通道1的输出OUT1作为通道2的输入脉冲。
若让8253的通道1工作于速率发生器方式,其输出端OUT1的输出脉冲是相对于1MHz频率的分频脉冲,若选定OUT1输出脉冲周期为4ms,则通道1的计数值为40000,周期为4ms的脉冲作为通道2的输入,要求输出端OUT2的波形为方波且周期为4s,故通道2的计数值选用1000,从图127还可看出,8253具有奇数端口地址,因而它的数据线与8086CPU的高8位数据线连接。
通道1的控制字为:
0111*101B或75H
通道2的控制字为:
1011*111B或B7H
程序如下:
MOV
DX,0FFEFH
;控制字端口地址
MOV
AL,75H
;通道1控制字
OUT
DX,AL
MOV
AL,0B7H
;通道2控制字
OUT
DX,AL
TIM:
MOV
DX,0FFEBH
;通道1端口地址
MOV
AL,00
;通道1计数值低8位
OUT
DX,AL
MOV
AL,40H
;通道1计数值高8位
OUT
DX,AL
MOV
DX,0FFEDH
;通道2端口地址
MOV
AL,00
;通道2计数值低8位
OUT
DX,AL
MOV
AL,10H
;通道2计数值高8位
OUT
DX,AL
JMP
TIM
MOV
AX,4C00H
INT
21H
560.8253产生中断请求信号,每中断一次显示一串字符,试编写程序
在IBM-PC/XT的62芯总线的IRQ2端输入一中断请求信号,该信号可由8253产生,
也可由分频电路产生。
要求每中断一次,CPU相应后在CRT上显示一串字符“THISISA8259AINTERRUPT!
”(这是8259A的一次中断!
),并且中断10次后返回。
其硬件连接如图129所示。
设IBM-PC/XT内8259A的端口地址是20H和21H,并已初始化为边沿触发、普通屏蔽(初始化屏蔽字为FEH)、非特殊全嵌套、一般中断结束、固定优先级以及非缓冲方式。
由IBM-PC/XT中8259A所管理的8个中断源(中断类型号为08H~0FH)可知,IRQ2的中断类型就是0AH。
【参考答案】P197例168
源程序如下:
INTA00
EQU20H
;8259A的偶地址端口
INTA01
EQU21H
;8259A的奇地址端口
DATA
SEGMENT
MESS
DB"IHISISA
8259AINTERRUPT!
",0DH,0AH,'$'
DATA
ENDS
CODE
SEGMENT
ASSUMECS:
DODE,DS:
DATA
START:
MOV
AX,CS
;先让DS指向代码段
MOV
DS,AX
MOV
DX,OFFSETINT-PROC
;设置0AH号中断向量
MOV
AX,250AH
INT
21H
CLI
;关中断
MOV
DX,INTA01
;读出IMR内容
IN
AL,DX
AND
AL,0FBH
;允许IRQ2中断
OUT
DX,AL
MOV
BX,10
;设置中断次数为10
STI
;开中断
LL:
JMP
LL
;循环等待中断
INT-PROC
PROC
MOV
AX,DATA
;中断服务程序
MOV
DS,AX
;将DS指向数据段
MOV
DX,OFFSETMESS
;显示发生中断的信息
MOV
AH,9
INTE
21H
MOV
DX,INTA00
;发中断结束命令EOI
MOV
AL,20H
OUT
DX,AL
WUB
BX,1
;计数器减1
JNZ
NEST
;不为0,转去执行中断返回
MOV
DX,INTA01
;为0,则读出屏蔽字
IN
AL,DX
OR
AL,4
;禁止IRQ2中断
OUT
DX,AL
STI
;开中断
POP
AX
;恢复堆栈指针SP
POP
AX
POP
AX
MOV
AH,4CH
;返回DOS
INT
21H
NEXT:
IRET
;中断返回
INT-PROC
ENDP
CODE
ENDS
END
START
;汇编结束
561.编写8253定时控制8只LED管自下向上闪动的程序
8255A的PA口写8个LED管连接如图130所示,8253连接如图131所示。
闪动频率为每次10次(即每秒钟每个LED管亮10次),8253三个计数通道和控制字寄存器的地址为40H~43H,8255A的地址为60H~63H,
【参考答案】P199例169
其控制程序如下:
…
MOVAL,80H
OUT63H,AL
MOVAL,34H
OUT43H,AL
MOVAL,0A8H
OUT40H,AL
MOVAL,61H
OUT40H,AL
MOVAL,7FH
OUT60H,AL
STI
LOP:
HLT
JMPLOP
中断服务程序如下:
INTROUTSEGMENTAT1480H
ORG3000H
RORAL,1
OU