微机原理与接口技术(第三版)课堂布置及需要关注习题参考答案 17
PSUB
PROC NEAR MOV AH,AL MOV DX,P8255C IN AL,DX JNZ WAITP MOV DX,P8255A MOV AL,AH OUT DX,
AL
;A口地址
;取回待打印字符(ASCII码)
;送A口(打印机端口) ;控制口
;PC2=0命令(/STB=0),产生/STB负脉冲开始
;判BUSY=PC6
TEST AL,01000000B ;BUSY=PC6
;等打印字符在AL中暂存AH中,后面用到AL
WAITP:
MOV DX,P8255Ctrl MOV AL,00000100B OUT DX,AL NOP INC AL OUT DX,AL RET ENDP
;PC2=1命令(/STB=1) ,产生/STB负脉冲结束
SUBP
6-20已知8254的端口地址为3000H、3004H、3008H和300BH,外接时钟频率为2MHz,利用8254的OUT0通道产生周期为1ms的方波,OUT1产生最快的连续脉冲序列,周期为多少?OUT2产生最大的负脉冲(建议方式1),负脉冲的宽度为多少。试编制满足上述要求的程序。 解:(1)满足要求的程序如下
P8254_0 EQU P8254_1 EQU P8254_2 EQU P8254_C EQU
.CODE .STARTUP MOV DX,P8254_C OUT DX,AL MOV DX,P8254_0 MOV AX,2000 OUT DX,AL MOV AL,AH OUT DX,AL
;CTC0通道地址
;计数常数=2MHz*1000us=2000 ; 实际收入低8位初值 ;取高8位 ;写高8位初值
;8254控制口地址
;8254控制口地址
MOV AL,00110110B ;CTC0命令字:方波信号发生器方式
3000H 3004H 3008H 300CH
.MODEL SMALL
MOV DX,P8254_C OUT DX,AL MOV DX,P8254_1 MOV AL,2
MOV AL01010100B ;CTC1命令字:速率发生器方式
;CTC1通道地址
;计数常数=2(最快)
18 IA-32 & Intel64微机原理与接口技术(第三版) 布置的习题参考答案
OUT DX,AL ;写初值
;8254控制口地址
MOV DX,P8254_C OUT DX,AL MOV DX,P8254_2 MOV AL,0 OUT DX,AL .EXIT END
OUT DX,AL
MOV AL10110010B ;CTC2命令字:负脉冲信号发生器方式
;CTC2通道地址
;计数常数=0000(最大值) ;写初值
(2)OUT1产生最快的连续脉冲序列,1个周期为2个计数时钟,因此周期=1/2MHz*2=1us;
OUT2产生最大的负脉冲,负脉冲的宽度为65536个计数脉冲周期=65536×
1/2MHz=32768us=32.768ms
6-21已知8254的CLK0接5MHz时钟, 其端口地址为280H,282H,284H和286H系统采用16位的8086,画出8254与系统的连接图, 译码电路自行设计。
(1)要在OUT0引脚周期性地产生负脉冲宽度为2ms的信号作为定时中断请求信号,写出初始化程序
(2)若利用8254产生1S为周期的定时中断信号,说明实现方法,画出相应的连接图,并编写相应程序。
答: (1) 由地址:280H、282H、284H和286H知:(地址不重叠,即全译码,I/O端口16条地址线全部要参与译码)
A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0=0000 0010 1000 0xx0 B 电路如下:
5MHzD7-D05V101192ms周期的方波IORCIOWCA15A14A13A12A11A10A9A8A7A6A5A4A3A0A2A11234856111212348561112876543212223212019D0D1D2D3D4D5D6D7RDWRCSA1A0OUT0GATE0CLK08253OUT1GATE1CLK1131415OUT2GATE2CLK21716181S
OUT0产生2ms定时中断信号(方波) P8254_0 EQU 280H
P8254_1 EQU P8254_2 EQU P8254_C EQU
282H 284H 286H
MOV DX,P8254_C
微机原理与接口技术(第三版)课堂布置及需要关注习题参考答案 19
MOV AL,00110110B ;ctc0控制字 OUT DX,AL MOV AX,20000
MOV DX,P8255_0 OUT DX,AL MOV AL,AH OUT DX,AL
;写高字节初值
;初值=5MHz*(2ms*2)=5000*4=20000
;注意:2ms仅为负脉冲宽度,因此一个周期=4ms
;CTC0通道 ;写低字节初值
(2) 1S周期的时间常数1S*5MHz=1*5000000=5000000>65536因此一个定时通道不够,要两个通道级联,可以将CTC1的OUT1输出接CTC2输入CLK2,由OUT2产生1S方波,将5000000=1000*5000 即CTC1定时常数1000,CTC2定时常数为5000,系统连接如图所示。
MOV DX,P8254_C
MOV AL,01110110B ;CTC1控制字 OUT DX,AL MOV DX,P8254_1 MOV AX,1000 OUT DX,AL MOV AL,AH OUT DX,AL
;CTC1通道 ;初值1000低8位 ;写初值
;初值1000高8位
;写初值,在OUT1上得到0.2ms为周期的方波
MOV DX,P8254_C
MOV AL,10110110B ;CTC2控制字 OUT DX,AL MOV DX,P8254_2 MOV AX,5000 OUT DX,AL MOV AL,AH OUT DX,AL
;CTC2通道 ;初值5000低8位 ;写初值
;初值5000高8位
;写初值,在OUT2上得到1秒周期的方波
第七章作业
7-6已知内存单元中有关单元存放的信息如表7.7所示,CR0=60000001H,IDTR=6500000007FFH,GDTR=001000007FFFH,求类型号为11H的中断服务程序入口地址。
表7.7 题7-6内存数据分布 内存地址 数据(H) 00108064H 85 00108065H 00 00108066H 20 00108067H 00 0010810EH 5E 0010810FH 3C 00108110H FF 00108111H 1F 00108112H 00 00108113H 70 00108114H 00 内存地址 06700930H 06700931H 06700932H 06700933H 06700934H 06700935H 06700936H 06700937H : 06708258H 06708259H 数据(H) 89 65 12 25 10 49 C6 0F : 90 C7 内存地址 数据(H) 65000085H 51 65000086H 87 65000087H 00 65000088H 12 65000089H 20 6500008AH 13 6500008BH 81 6500008CH 00 6500008DH EE 6500008EH 42 6500008FH 00 20 IA-32 & Intel64微机原理与接口技术(第三版) 布置的习题参考答案 00108115H 00108116H 00108117H : 00200C20H 00200C21H 00200C22H 00200C23H F2 44 01 : B6 80 70 06 0670825AH 0670825BH 0670825CH 0670825DH 0670825EH 0670825FH 06708210H 06708211H 13 00 00 EE 45 32 F2 5D 65000090H 65000091H 65000092H 65000093H 65000094H 65000095H 65000096H 65000097H FF 01 58 82 00 49 44 00 解:CR0=60000001H知PG=0,PE=1保护方式
中断门描述符首地址=IDT表首地址+中断类型号*8=65000000H+11H*8=65000088H 所以中断门描述符=0042EE0081132012H
其中描述的偏移地址=00422012H, 段选择子=8113H
因此段描述符首地址=GDT首地址+索引*8=00100000H+8110H=00108110H 段描述符=0144F20070001FFFH,其描述符的段基地址=01007000H,因此
中断服务程序入口地址=段基地址+偏移地址=01007000H+00422012H=01429012H 7-11在AT兼容系统中,采用了两片8259,如7.3.3小节中图7.17所示。
(1) 如果外部中断采用边沿信号触发,非自动结束中断,主片IR7的中断类型号为0FH,从片IR1(IRQ9)的中断类型号为71H,主从片无缓冲,写出主从8259的初始化程序。
(2) 不允许串行口2和并行口2以及软磁盘、协处理器中断,写出有关程序片段。
(3) 将主片和从片中的IRR、ISR和IMR寄存器的内容分别读到DS:[1000]和ES:[2000]开始的存储区域,并判断当连接主片的外部中断源有两个以上请求中断且从片只有一个中断请求时,结束从片对应的中断,并屏蔽与主片连接的所有没有请求中断的中断源。写出相应程序段。
(4) 如果在从片的IR7(即IRQ15)处接一个数据采集卡的中断请求端,当有中断请求时,微处理器去读取采集卡的端口(输入数据地址为3C0H,输出数据口为3C1H),并将一个16位的数据写入内存缓冲区(由DATABUF指示缓冲区首地址),如果读出的数据超过为2010H,则向数据输出端口发送一个命令使采集板停止工作,命令字为55H;如果读出的数据为0,则向DATABUF+5单元写入AAH。写出中断服务程序。
(5) 如果上述数据采集卡有中断请求,使微处理器自动执行中断服务程序,写出有关程序段(包括加载中断向量以及驻留内存程序)。
解:
(1) ;主片初始化
MOV AL,00010001B ;ICW1 OUT 20H,AL MOV AL,0FH OUT 21H,AL OUT 20H,AL
MOV AL,00010101B ;ICW4 OUT 21H,AL
;中断类型号(ICW2)
MOV AL,00000100B ;ICW3
;从片初始化
MOV AL,00010001B ;ICW1 OUT 0A0H,AL MOV AL,71H
;中断类型号(ICW2)