1、微机原理与接口技术习题集3551. 编写8253计数器0工作于方式3,计数器1工作于方式4,计数器2工作于方式0进行中断传送的程序 【参考答案】P185 例159程序如下:START:MOVDX,04C6H;设置8253控制口地址MOVAL,00110110B;二进制、方式3、写16位计数器OUTDX,AL;控制字写入计数器0的控制寄存器MOVDX,04C0H;设置8253计数器0地址MOVAX,09C4H;计数初值OUTDX,AL;写入初值低8位MOVAL,AHOUTDX,AL;写入初值高8位MOVBL,00H;灯亮或灭的标志MOVDX,04B0H;8259A的偶地址MOVAL,000100
2、11B;设置ICW18259初始化控制字ICW1OUTDX,AL;写入ICW1MOVDX,04B2H;8259A的奇地址MOVAL,50H;设置ICW18259初始化控制字ICW2OUTDX,AL;写入ICW2MOVAL,00000001B;设置ICW18259初始化控制字ICW4OUTDX,AL;写入ICW4MOVAL,0FEH OUTDX,AL;写入OCW1MOVAX,OFFSET INTR1;设置中断服务程序INTR1的偏移地址MOVWORD PTR 140H,AX*4;中断矢量表地址为50H*4MOVAX,SEG,INTR1;设置中断服务程序INTR1所在段地址MOVWORD PTR
3、142,AXMOV AX,OFFSET INTR2;设置中断服务程序INTR2所在段地址MOVWORD PTR 144H,AX*4;中断矢量表地址为51H4MOVAX,SEG INTR2;设置中断服务程序INTR2所在段地址MOVWORD PTR 146,AXMOVDX,04C6H;设置8253控制口地址MOVAL,01011000BOUTDX,AL;将控制字写入计数器1的控制寄存器MOVDX,04C6H;设置8253控制口地址MOVAL,10110000OUTDX,AL;控制字写入计数器2的控制寄存器MOVDX,04C2H;设置8253计数器1地址MOVAL,64H;设置计数器初值OUTDX
4、,AL;计数器初值写入8253计数器1MOV04C4H;设置8253计数器2地址MOVAL,00H;写低字节OUTDX,AL;计数值低字节写入计数器2MOVAL,10H;写高字节OUTDX,AL;计数值高字节写入计数器2STI;开中断AA:HLT;等待中断JMPAAINTR1PROCFARCLI;禁止中断MOVDX,04C2H;设置8253计数器1地址MOVAL,00H;高字节,置新初值,启动工作OUTDX,AX;激数值高字节写入计数器1MOVAL,10H;低字节OUTDX,AL;计数值低字节写入计数器1STI;开中断IRETINTR1ENDPINTR2PROGFARCLI;禁止中断MOVDX
5、,04A0H;74LS373的地址CMPBL,00H;灯闪烁判断JZAA2;BL=00灯亮MOVAL,00H;BL=01灯灭OUTDX,AXMOVBL,00H;重新设标志JMPAA3AA2:MOVAL,0FFH;灯亮OUTDX,ALMOVBL,01H;重新设标志AA3:STI;开中断IRETINTR2ENDPCODEENDSENDSTART552. 8253如何与CPU接口【参考答案】P185 例1608253通过地址总线、数据总线、控制总线与CPU相连接没Intel8253的数据总线引脚D7D0可直接连到CPU的数据总线上,CPU通过数据总线向8253传送控制字与计数初值,Intel8253
6、的片选可由CPU的高地址经译码后提供。CPU的地位地址线A1、A0,用于选择8253内部寄存器。8253的,直接连至CPU的读、写控制线、,以便CPU能对8253进行读、写操作。图125是CPU与8253的连接图,设8253的I/O口地址为10H13H,分别对应8253的计数器0、计数器2及方式控制字寄存器的地址。553. 试计算8253计数器0工作于方式3,时钟CLK0的频率为1MHz,输出40kHz的重复方波时计数初值【参考答案】P189 例161计数初值初值若采用二进制技数,则写入方式为:MOV AL,25OUT PORT0,AL ;PORT0位通道0的端口地址若采用十进制计数,则写入方
7、式为:MOV AL,25HOUT PORT0,AL554. 编写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,二进制计数,由于n010000,故只能用二进制计数。计数通道1,C1=01100111=6
8、7即1通道,只写高8位,方式3,BCD计数。初始化程序如下:MOV DX,243HMOV AL,34H;计数通道0写方式控制字OUT DX,ALMOV AL,67H;计数通道1写方式控制字OUT DX,ALMOV DX,240H;计数通道0写计数初值MOV AX,40000OUT DX,ALMOV AL,AHOUT DX,ALMOV DX,241H;计数通道1写计数初值MOV AL,20HOUT DX,AL注:也可把CW0=40000写成9C40H,则先写入40H,后写入9CH。555. 8253在写入计数初值时,二进制计数和十进制计数有何区别【参考答案】P190 例163采用二进制计数时,如
9、果计数初值n为8位二进数(十进制255),则在用MOV AL,n写入AL时,n可以写成任何进制数。如果计数初值n为16位二进制数(十进制数65535),则可由两种方式写入,一种是把十进制数转换成4位16进制数,分两次写入对应的计数通道(先低后高);另一种是把十进制数直接写入AX,即MOV AX,nMOV PORT,AL;PORT为通道地址MOV AL,AHOUT PORT,AL采用十进制数时,必须把计算得到的计数初值的十进制数后加上H,变为BCD码表示形式。如n=50,则写为MOV AL,50HOUT PORT,ALMOV AL,50H如n=1250,则写为:OUT PORT,ALMOV AL
10、,12HOUT PORT,AL556. 编写8253产生1的负脉冲的初始化程序【参考答案】P191 例164设8253通道2工作在方式2,OUT2输出2KHz频率方波,夫脉冲宽度为1,GATE2接+5V,8253-5端口地址为40H43H。方式2的夫脉冲宽度就是CLK2时钟脉冲的脉冲周期,所以CLK2的脉冲频率为: 计数初值工作方式控制字为:1 01 10 1 00通道2先低8位后高8位方式2二进制计数初始化程序段为:MOV AL,10110100B ;通道2的工作方式控制字OUT 43H,ALMOV AL,OF4H;送计数初值低字节OUT 42H,ALMOV AL,01H;送计数初值高字节O
11、UT 42H,AL557. 编写8253对外部事件计数10次的程序计数电路如图126所示。由图可知,本例使用的是计数器0。外部事件用单稳态电路输入,单稳电路的输出接至CLK0,GATE0接+5V。由于计数器的CLK0接至单稳态电路,因而计数初值写入计数器后要由外接的单稳态电路输入一个脉冲把计数初值装入减1计数器,才能对外部事件进行计数。所以外部事件进行计数(即单稳态电路输入)要输入11次。用查询计数器的初值和最终值编制。【参考答案】P190 例165(1)用查询计数器的初值和最终值编制的程序如下:StackSegment stack stack dw 32 dup (?)StackendsDa
12、tasegmentDA1DB WAIT LOAD,0AH,0DH,$DA2DB PLEASE INPUT,0AH,0DH,$DA3 DB PROGRAM TERMINATED NORMALLY,0AH,0DH,$DataendsCodesegmentBeginproc farassume ss:stack,cs:code,ds:dataPUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVDX,383H;8253计数的方式0,BCD计数MOVAL,11HOUTDX,ALMOVDX,380HMOVAL,10HOUTDX,ALMOVDX,OFFSET DA1MOVAH,
13、9INT21HMOVDX,380HLOAD:INAL,DXCMPAL,10H;等待单稳输入脉冲,装入计数初值JNELOADMOVDX,OFFSET DA2MOVAH,9INT21HMOVDX,380HCOUNTIN:INAL,DXCMPAL,0;等待单稳输入10个脉冲JNZCOUNTINMOVDX,OFFSET DA3MOVAH,9INT21Hretbeginendpcodeendsend begin(2)若将OUT0接至8086微机的IRQ9。使用中断编程的程序如下:Stack segment stack stack dw 32 dup (?)Stack endsdata segmentDA
14、1 DB WAIT LOAD,0AH,0DH,$DA2 DB PLEASE INPUT,0AH,0DH,$DA3 DB PROGRAM TERMINATED NORMALLY,0AH,0DH,$data endscode segmentbegin proc farassume ss:stack,cs:code,ds:dataPUSH DSSUB AX,AXPUSH AXMOV ES,AXMOV AX,DATAMOV DS,AXMOV DX,383H;8253计数的方式0,BCD计数MOV AL,11HOUT DX,ALMOV DX,380HMOV AL,10HOUT DX,ALMOV DX,O
15、FFSET DA1MOV AH,9INT 21HMOV DX,380HLOAD: IN AL,DXCMP AL,10H;等待单稳输入脉冲,装入计数初值JNE LOADMOV AX,SEG IS8253;填写中断向量表MOV ES:01C6H,AXMOV AX,OFFSET IS8253MOV ES:01C4H,AXIN AL,0AH1;改变屏蔽字,允许IRQ9中断AND AL,0FDHOUT 0A1H,AHMOV DX,OFFSET DA2MOV AH,9INT 21HJMP $ ;等待单稳输入10个脉冲MOV DX,OFFSET DA3MOV AH,9INT 21HretIS8253: MO
16、V AL,61H;指定中断结束命令OUT 0A0H,ALMOV AL,62HOUT 20H,ALIN AL,0A1H;关屏蔽,禁止IRQ9中断OR AL,2OUT 0A1H,ALPOP AX ;修改返址INC AXINC AXPUSH AXIRETbegin endpcode endsend begin558. 编写8253对外部事件计数100次发中断请求的程序某8086系统中有8253芯片,利用其通道1完成对外部事件计数,计满100次向CPU发出中断申请;利用通道2输出频率为1kHz的方波,硬件电路如图127所示。【参考答案】P195 例166设8253端口地址为偶地址18H1EH,所以82
17、53的数据线D7D0。应接CPU的低8位数据线D7D0,外部事件由8253通道1的CLK1端输入,通道1工作在方式0,当计数次数到,从OUT1端输出的正跃变信号作为向CPU的中断申请,由8259A中断控制器管理其中断;通道2的CLK2输入时钟是由D触发器分频4MHz的信号,故CLK2输入时钟频率为2MHz,而通道2工作方式在方式3产生1kHz频率的方波,方波周期为1ms,因此,通道2的计数值应为:1ms0.5=2000,两个通道均用BCD计数制。通道1:控制字为:01110001B; 计数值为:100通道2:控制字为:10100111B; 计数值为:2000程序如下:MOV AL,71H;通道
18、1控制字OUT 1EH,AL;MOV AL,0A7H;通道2控制字OUT 1EH,ALMOV AL,00H;通道1计数值低8位OUT 1AH,ALMOV AL,01H;通道1计数值高8位OUT 1AH,ALMOV AL,20;通道2计数值高8位OUT 1CH,AL;8259A初始化略559. 编写8253定时控制发光二极管的亮灭的程序8253通道2接有一发光二极管,要使发光二极管以点亮2s,熄灭2s的间隔工作,8253个通道端口地址分别为FFE9HFFEFH,其电路如图128所示。【参考答案】P196 例167 根据以上条件要求8253通道2应输出一个占空比为1:1,周期为4s的方波。从图12
19、8可知,通道1的CLK1输入时钟周期为1,若通道1工作为定时,其输出最大定时时间为1*6553665.5ms,因而使用一个通道达不到定时时间4s的要求。此时,采用通道级联的方法,将通道1的输出OUT1作为通道2的输入脉冲。 若让8253的通道1工作于速率发生器方式,其输出端OUT1的输出脉冲是相对于1MHz频率的分频脉冲,若选定OUT1输出脉冲周期为4ms,则通道1的计数值为40000,周期为4ms的脉冲作为通道2的输入,要求输出端OUT2的波形为方波且周期为4s,故通道2的计数值选用1000,从图127还可看出,8253具有奇数端口地址,因而它的数据线与8086CPU的高8位数据线连接。 通
20、道1的控制字为:0111*101B或75H 通道2的控制字为:1011*111B或B7H程序如下:MOVDX,0FFEFH;控制字端口地址MOVAL,75H;通道1控制字OUTDX,ALMOVAL,0B7H;通道2控制字OUTDX,ALTIM:MOVDX,0FFEBH;通道1端口地址MOVAL,00;通道1计数值低8位OUTDX,ALMOVAL,40H;通道1计数值高8位OUTDX,ALMOVDX,0FFEDH;通道2端口地址MOVAL,00;通道2计数值低8位OUTDX,ALMOVAL,10H;通道2计数值高8位OUTDX,ALJMPTIMMOVAX,4C00HINT21H560. 8253
21、产生中断请求信号,每中断一次显示一串字符,试编写程序在IBM-PC/XT的62芯总线的IRQ2端输入一中断请求信号,该信号可由8253产生,也可由分频电路产生。要求每中断一次,CPU相应后在CRT上显示一串字符“THIS IS A 8259A INTERRUPT!”(这是8259A的一次中断!),并且中断10次后返回。其硬件连接如图129所示。 设IBM-PC/XT内8259A的端口地址是20H和21H,并已初始化为边沿触发、普通屏蔽(初始化屏蔽字为FEH)、非特殊全嵌套、一般中断结束、固定优先级以及非缓冲方式。 由IBM-PC/XT中8259A所管理的8个中断源(中断类型号为08H0FH)可
22、知,IRQ2的中断类型就是0AH。【参考答案】P197 例168源程序如下:INTA00EQU 20H;8259A的偶地址端口INTA01EQU 21H;8259A的奇地址端口DATASEGMENTMESSDB IHIS IS A 8259A INTERRUPT!,0DH,0AH,$DATAENDSCODESEGMENTASSUME CS:DODE,DS:DATASTART:MOVAX,CS;先让DS指向代码段MOVDS,AXMOVDX,OFFSET INT-PROC;设置0AH号中断向量MOVAX,250AHINT21HCLI;关中断MOVDX,INTA01;读出IMR内容INAL,DXAN
23、DAL,0FBH;允许IRQ2中断OUTDX,ALMOVBX,10;设置中断次数为10STI;开中断LL:JMPLL;循环等待中断INT-PROCPROCMOVAX,DATA;中断服务程序MOVDS,AX;将DS指向数据段MOVDX,OFFSET MESS;显示发生中断的信息MOVAH,9INTE21HMOVDX,INTA00;发中断结束命令EOIMOVAL,20HOUTDX,ALWUBBX,1;计数器减1JNZNEST;不为0,转去执行中断返回MOVDX,INTA01;为0,则读出屏蔽字INAL,DXORAL,4;禁止IRQ2中断OUTDX,ALSTI;开中断POPAX;恢复堆栈指针SPPO
24、PAXPOPAXMOVAH,4CH;返回DOSINT21HNEXT:IRET;中断返回INT-PROCENDPCODEENDSENDSTART;汇编结束561. 编写8253定时控制8只LED管自下向上闪动的程序8255A的PA口写8个LED管连接如图130所示,8253连接如图131所示。闪动频率为每次10次(即每秒钟每个LED管亮10次),8253三个计数通道和控制字寄存器的地址为40H43H,8255A的地址为60H63H,【参考答案】P199 例169其控制程序如下: MOV AL,80H OUT 63H,AL MOV AL,34H OUT 43H,AL MOV AL,0A8H OUT 40H,AL MOV AL,61H OUT 40H,AL MOV AL,7FH OUT 60H,AL STILOP: HLT JMP LOP 中断服务程序如下:INTROUT SEGMENT AT 1480H ORG 3000H ROR AL,1 OU
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1