1、MOV AL10000001B;A口方式0,输出;C口高位输出,低位输入OUT 83H,ALMov al,0dH;置stb#为H,00001101Out 83H,alPull: in al,82H;查询busy(PC2)Test al,04H ;若busy(PC2=1),Jnz pull; 则继续读C口Mov al,data;将data送A口Out 80H,alMov al,0cH;置stb#为LOut 83H,alMov al,0dH;置stb#为HOut 83H,alret,8.17 8255A用作查询方式打印机接口时的电路连接和打印机各信号的时序如习图8-2所示,8255A的端口地址为8
2、0H83H,工作于方式0,试编写一段程序,将数据区中变量DATA的8位数据送打印机打印,程序以RET指令结束,并写上注释。,8.19若用共阴极LED数码管作显示器它的接口连接图如习图8-3所示,写出显示7 的段选码答:07H,8.20若输入设备输入的ASCII码通过8255A端口B,采用中断方式,将数据送入INBUF为首址的输入缓冲区中,连续输入直到遇到$就结束输入。假设此中断类型码为52H,中段端服务程序的入口地址为INTRP。8255A的端口地址为80H83H。(1)写出8255A初始化程序(包括把入口地址写入中断向量表)。(2)写出完成输入一个数据,并存入输入缓冲区BUF1的中断服务程序
3、。,. MODEL SMALL. DATAINBUF DB N DUP (?). CODE. STARTUPMOVAL,86HOUT83H,ALMOVAL,0000 0101BOUT83H,AL;中断允许PC2=1PUSHES;写中断向量地址MOVAX,0MOVES,AXMOVWORD PTR ES:0148H,OFFSET INTRPMOVWORD PTR ES:014AH,SEG INTRPPOPESLOP:STICMPAL,$JZEXIT1JMPLOP ;等待中断EXIT1:. EXITINTRPPROC FAR;中断服务程序INAL,81HMOVINBUF,ALIRETINTRPEND
4、PEND,方式字为:10000110B=86H;中断允许:PC2=1中断类型码:52H,向量地址:52H*4=148H,14AHSEG INTRP送14AHOFFSET INTRP 送 148H,MOV AL,86H;10000110OUT83H,ALMOV AL,05h;00000100;中断允许PC2=1OUT 83h,ALMOV 4*52H,OFFSET INBUFMOV 4*52H+2,SEG INBUFSTIINBUF PROC FAR;子程序定义MOV BX,OFFSET BUF1IN AL,81HCMP AL,$JZ DONEMOV BX,ALINC BXJMP LOPIRET,
5、LOP:,DONE:,8.21 定时器8253通道0按方式3(方波发生器)工作,时钟CLK0的频率为1MHz,要求输出方波的频率为40kHz,此时写入的数据初值应为多少?输出方波的“1”和“0”各占多少时间。解:初值1M/40k=25;方波的周期是25s,方波的“1”和“0”分别占13s和12s时间,8.22定时计数器8253输入时钟频率为1MHZ,并设定为按BCD码计数,若写入的计数值为0080H,则该通道定时时间是多少?,解:对于BCD码计数则0080H表示计数值为80通道的输出频率为:1M/80=12500HZ定时时间为:1/12500=810-5(S)=80(S),(1)若采用定时测试
6、已转换过的脉冲个数而转换为测试转轴的速度,单位为转/秒。说明它的计算过程。(2)若用计数器0对脉冲计数,用计数器1作为定时,设它的CLK1频率为200KHz,用定时100ms来计数。写出计数器0、1的工作方式控制字和计数初值,并注释,并且写出8253的初始化程序。,8.25 若8253计数器对设备的转轴的旋转速度进行测试,接口电路如图习8-5所示。从图可知,若与转轴相连的转盘上均匀地钻有50个圆孔 ,当旋转时,通过光电转换,每通过一个小孔,产生一个正脉冲,当转轴转一圈,就会产生50个脉冲通过CLK输入8253计数器进行减法计数,若假设此转轴的速度范围在50-1000转/秒,并设8253的端口地
7、址为84H87H。,解: 因为最高转速为1000转/秒,因此,转1s的脉冲数最高为100050=50000个=C350H,因此计数器必须用16位计数,并且用二进制计数。(1)采用定时测试转速,计算方法为: 如定时时间为:TIME=100ms=0.1s 则 转速=(定时到的计数值)/50)/0.1s 转/秒,(2)初始化程序段:计数器0初始化程序段: 计数初值=0000HMOV AL,0011 0000B ;通道0,方式0,16位计数,二进制计数OUT 87H,AL;计数初值65536,先写入低8位字节到CRL,MOV Al,FFHOUT 84H,ALOUT 84H,AL;后写入高8位字节到CR
8、H,计数器1初始化程序段: 计数初值= 200kHz / (1/100ms)=20000D4E20HMOV AL,0111 0000B;通道1,方式0,16计数,二进制计数OUT 87H,ALMOV AL,20HOUT 85H,ALMOV AL,4EHOUT 85H,AL,8.26设异步传输时,每个字符对应1个起始位、7个信息位, 1个奇/偶校验位,一个停止位,波特率为9600b/s,每秒传输的最大字符数多少?一个起始位,七个信息位,一个奇/偶校验位和一个停止位 共 10 位 9600 / 10 = 960 字符/秒,8.28 对8251A进行初始化,要求:工作于异步方式,采用奇校验、指定2个
9、停止位、7位ASCII字符、波特率因子为16 ,出错指示处于复位状态、允许发送、允许接受、数据终端就绪、不发送空白字符、内部不复位。解:设端口地址为80H和81H,方式字为11011010,命令字为00010111初始化程序为MOV AL,0DAHOUT 81H,ALMOV AL,17HOUT 81H,AL,答:模式字为:01111011B=7BH。控制字为:00110101B=35H。XOR AL,ALOUT 42H,ALOUT 42H,ALOUT 42H,AL MOV AL,40H ; 发复位命令OUT42H,ALMOV AL,7BH ;设置模式字,异步方式,规定波特率因子为64OUT42
10、H,AL ;7个数据位,1个停止位,偶校验MOV AL,35H ;设置控制字,使发送器和接收器启动,清除出错标志OUT 42H,ALPUSH DSMOV BX,2000H ;DS:BX指向输出缓冲区首址MOV DS,BXMOV BX,3000H ;缓冲区指针初始化MOV CX,100H ;发送100H个字节BEGIN: IN AL,42H ;读取状态字,测试TxRDY是否为1TEST AL,01HJZ BEGIN ;为0表示外设还未取走字符MOV AL,BX ;从输出缓冲区取数OUT 40H,AL ;发送字符INC BX ;修改缓冲区指针LOOP BEGIN ;则再发送下一个字符POP DS,
11、8.29 设计一个采用异步通信方式输出字符的程序段,规定波特率因子为64,7个数据位,一个停止位,用偶校验,端口地址为40H、42H,缓冲区为2000H:3000H。,01 1 1 10 11,0 0 1 1 0 1 0 1,8.30如果8251A的工作方式寄存器内容为01111011,那么发送的字符格式如何?为了使接受的波特率和发送的波特率分别位300b/s和1200b/s,试问加到RxD和TxC上时钟信号的频率应为多少?,RxC#上时钟信号的频率为3006419.2kHZTxC#上时钟信号的频率为12006476.8kHZ时钟频率与波特率的关系:时钟频率 =波特率因子*波特率波特率=时钟频
12、率/波特率因子(其中n=1,16,64),01111011:1位停止位,偶校验,有校验,字符长度7位,波特率因子为64,8.32 ADC0809通过并行接口芯片8255与系统总线相连接的接口电路如习图8-7所示,假定8255A端口片选地址范围为80H83H,ADC0809输出允许使能地址范围为84H87H。 试编写一个子程序完成通道IN0的A/D数据输入。(应包括程序注释与8255A芯片的初始化部分),1 0 0 1 1 0 0 0,程序段: MOV AL,10011000B;初始化8255A,A口方式0,输入,OUT 83H,AL ; C口高4位输入,低4位输出MOV AL,00H;开始传送
13、数据;通道IN0OUT 82H,AL ;连通IN0 MOV AL,00000111B ; PC3置1 OUT 83H,AL ;送出开始启动信号NO_EOC: IN AL,82H ;开始读EOC信号 TEST AL,10000000B ;测PC7,即EOC信号 JNZ NO_EOC ;若仍为高电平,继续等待;此时EOC低电平,等待ADC0809完成转换WAIT: IN AL,82H ;PC7=0,已启动转换 TEST AL,10000000B ;再查PC7 JZ WAIT ;PC7=0,转换未结束 ;此时数据传送完成IN AL,82H ;从A口读数据;保存到内存,8.34一个采用查询传送的输出接
14、口,其数据端口地址为205H,状态端口地址为206H,外设状态位用D0传送,输出数据时可启动外设,将存储器缓冲BUFFER中的5000B数据输出,画出流程图,编写控制程序段。,MOV BX,OMOV CX,5000NEXT:IN AL,206HTEST AL,01HJNZ NEXT;ZF=0,转至地址标号处 MOV AL,BUFFER+BXOUT 205H,ALINC BXLOOP NEXTHLT,开始,初始化,读外设状态,送数据到数据端口,Do为1?,修改指针,CX减1,yes,no,CX为0?,结束,yes,no,8.34一个采用查询传送的输出接口,其数据端口地址为205H,状态端口地址为
15、206H,外设状态位用D0传送,输出数据时可启动外设,将存储器缓冲BUFFER中的5000B数据输出,画出流程图,编写控制程序段。,MOV BX,OMOV CX,5000NEXT:IN AL,206HTEST AL,01HJNZ NEXT;ZF=0,转至地址标号处 MOV AL,BUFFER+BXOUT 205H,ALINC BXLOOP NEXTHLT,开始,初始化,读外设状态,送数据到数据端口,Do为1?,修改指针,CX减1,yes,no,CX为0?,结束,yes,no,835用一片8255A控制一组红、绿、黄灯,如习图8-8所示,反复检测s1、s2,要求由s1、s2的“闭合”和“断开”控
16、制红、绿、黄3灯的点亮。 当s1合,S2合时,黄灯亮; 当s1合,s2断时,红灯亮; 当s1断,s2合时,绿灯亮; 当s1断,s2断时,黄灯亮。 试根据上述条件编制初始化程序以及控制程序(已知8255A的端口地址为60H63H)。,S2 S1 (PA1 PA0)00 A口(00H) PC2=1 C口(04H) 1 0 A口(02H) PC0=1 C口(01H) 01 A口(01H) PC1=1 C口(02H) 11 A口(03H) PC2=1 C口(04H),当s1合,S2合时,黄灯亮; 当s1合,s2断时,红灯亮; 当s1断,s2合时,绿灯亮; 当s1断,s2断时,黄灯亮。,解: A口是输入
17、,C口是输出,控制字为10010000B (90H) 8255口的地址为60H63H,MOV AL,90H OUT 63H,AL;8255A初始化LOP: IN AL,60H CMP AL,01H JZ GREEN CMP AL,02H JZ RED MOV AL,04H JMP SHOWGREEN: MOV AL,02H JMP SHOWRED: MOV AL,01HSHOW: OUT 62H,AL ;灯亮 JMP LOP,当S2合(0),s1合(0) (PA= 00H), 黄灯亮(pc2=1)04H; 当s2断(1),s1合(0) (PA= 02H) , 红灯亮(pc0=1)01H; 当s
18、2合(0), s1断(1) (PA= 01H) ,绿灯亮(pc1=1)02H; 当s2断(1), s1断(1)(PA=03H) , 黄灯亮(pc2=1)04H 。,8.37 82535的通道0按方式3工作,时钟CLK0的频率为1MHz,要求输出方波的重复 频率为40KHz,此时应如何写入计数初值。,Ci=CLK/OUT=1000000/40000=25 即N=19H MOVAL,00010110B;计数器0控制字 OUTDX,AL MOVAL,19H;计数器0计数初值为25=19HOUTDX,AL,8.38 设8253-5与8086相连,8253-5的时钟频率为2MHZ,其口地址为340H34
19、3H,通道0工作于定时方式,要求每20ms向8086发出一中断请求信号,通道1要求输出频率为1000HZ的方波,请编写初始化程序。,通道0计数初值为2MHZ/(1/20ms)=40000次=94c0;计数器0初始化程序段: MOV DX,343H MOV AL,34H ; 00110100=34H,通道0,方式 ;2,16位计数,二进制计数 OUT DX,AL MOV DX,340H MOV AL,0C0H ;计数初值94C0H,先写入低8位 OUT DX,AL MOV AL,94H ;计数初值94C0H,后写入高8位 OUT DX ,AL;,8.38 设8253-5与8086相连,8253-
20、5的时钟频率为2MHZ,其口地址为340H343H,通道0工作于定时方式,要求每20ms向8086发出一中断请求信号,通道1要求输出频率为1000HZ的方波,请编写初始化程序。,通道1计数初值为2000000HZ/1000HZ=2000次计数器1初始化程序段: MOV DX,343H MOV AL,01110111B ; 通道1,方式3,16位计数,BCD计数 OUT DX,AL MOV DX,341H MOV AL,00H ;先写入低8位 OUT DX,AL MOV AL,20H ;后写入高8位 OUT DX,AL;,8.40有8086系统同ADC0809的接口如习图8-11所示,请回答如下
21、问题:(1)启动ADC0809模拟通道IN7转换的指令(或指令段)(2)查询ADC0809转换是否结束,为结束则继续查询的指令段。(3)使ADC0809的OE有效的指令段。(4)若CLK88的重复频率为4kHz,则CLOCK的重复周期为多少?,XXXXX1101,控制字10010010地址1011001XX,启动IN7地址101101111,(1)MOV AL,92H; 8255初始化控制字10010010MOV DX,167H OUT 167H,AL;送控制字地址101100111MOV DX,16FHOUT 16FH,AL;启动IN7(2) LOP: MOV DX,165H ;判断PB0
22、IN AL DX; TEST AL 00H JZ LOP ;判断PB0=0,没有结束(3) MOV DX,164H IN AL , DX ; 从PA输入数据,RD有效, OE有效(4)T(CLOCK )=8* T(CLK88)=8/(4KHz)=0.002S,8.44有一温度控制电路如习图813所示。通过计数器/定时器8253的通道1产生周期为1s的方波,向可编程中断控制器8259的申请中断。若上无中断请求信号IRQ,则CPU响应,转向相应的中断服务程序INTJ。在INTJ中启动ADC0809,对IN5信号(来自温度传感器的温度信号)进行A/D转换,然后返回主程序。当A/D转换结束后,向825
23、9的发出中断请求。,若上无中断请求信号IRQ,则CPU响应,转向相应的中断服务程序INTK,在INTK中通过接同风扇与加热电炉来调节温度。上述程序中,若在上有IRQ信号,则程序结束返回操作系统。(1)计算8253,8255A,8259的端口地址。(2)对8253初始化。(3)启动0809工作的程序段。,100XX,地址1001 0XXX,地址1000 1XXX控制字01110111,地址1000 0XXX,地址1001 1XXX,(1)8253地址: 88H8FH, 8255 A地址90H97H, 8259地址80H87H(2)MOV AL,77HOUT 8BH,AL;对8253初始化。MOV
24、 AL ,50H;计数初值1s/(1/1.25kHz)=1250OUT 89H,ALMOV AL,12HOUT 89H,AL(3)启动0809工作的程序段。MOV AL,05H; IN5OUT 9DH,ALIN AL,9DHHTL,8.45 8255的PA口写8个LED管连接如习图814,用8253作定时器控制8个LED管自下向上闪动,8253连接如习图815,闪动频率为10次/s(既每秒钟每个LED管亮10次),8253 3个计数通道和控制字寄存器的地址为40H43H,8255A的端口地址为60H63H,其控制程序如下: 主程序 MOV AL, 80H (1) OUT 63H, AL (2)
25、 MOV AL, 34H (3)0011 0100B,方式2 OUT 43H, AL (4) MOV AL, 0A8H (5)计数初值61A8H=25000D, OUT 40H, AL (6) MOV AL, 61H (7) OUT 40H, AL (8) MOV AL, 7FH (9),01111111,从下向上闪动,PA7输出低电平 OUT 60H, AL (10) STI,中断服务程序:INTROUT SEGMENT (11) (设CS=1480H) ORG 3000H (12) ROR AL, 1 (13) OUT 60H, AL (14) IRET (15)试问:(1)从程序中给出的
26、数据,计算8253中的时钟周期以及该控制程序中所使用的中断服务程序的中断类型号n的值,中断向量表如习图 816所示。解答:(1)Tck0=1/(25000*(8*10)=1/2000000=5*10-7s中断向量地址为0034H=52D;终端类型号52/4=13,8.46 8086CPU通过8255A同发光二极管LED0LED7以及开关S0S7的接口电路如习图8-18所示,发光二极管LED0LED7不断显示对应开关S0S7的通断状态。要求:,(1)S0S7的状态每隔半分钟改变一次,把每次变化的状态记录在从2000H:1000H开始的内存单元中。 (2)S接通时,对应二极管熄灭,S断开时,对应的
27、二极管发亮(即断开,发亮;接通,熄灭)。 (3)连续工作24小时结束。 用8086汇编语言编写的控制程序如下,请填上程序中空缺的部分(包括指令,操作数或标号,初始化时无关项置“0”)。,1 00 1 0 0 0 0,地址1011100XX,START:MOV AL,(90H);初始化10010000BMOV DX,(173H)(OUT) DX,ALMOV AX,(2000H);送段地址1011100XXB;170H173H;MOV DS,AXLOP: MOV CX,(2880);工作24小时24*60*2=2880=0B40HLOP1:MOV BX,(1000H)LOP2:MOV DX,(17
28、0H);读PA口(IN) AL,DX MOV BX,AL;存 INC (BX)XOR AL,(FFH);写PB口MOV DX,(171H)(OUT) DX,AL(PUSH CX)( PUSH BX ) CALL DELAY30S( POP BX) ( POP CX) LOOP (LOP2)HLT,(2)若闪动频率改为1次/min,且为自上到下闪动,可采用如习图817所示的串接形式,中断类型为(1)中计算值加1,请对程序作最小程度的更改,以满足上述要求(计数通道0工作不变),(2)计数初值10/(1/60)=600=258H中断类型号14,地址0038H,CS=3000H,IP=1480H主程序
29、: (1)-(10) MOV AL, 74H (11)0111 0100B,方式2 OUT 43H, AL (12) MOV AL, 58H (13) ;计数初值=600=258H, OUT 41H, AL (14) MOV AL, 02H (15) OUT 41H, AL (16) MOV AL, 0FEH (17);11111110,从上向下闪动,PA0输出低电平 OUT 60H, AL (18) STI,847 让8253计数器0在1ms脉冲信号源CLK0且工作在方式3定时1min,用8255A的PC6提供GATE0,在定时期间,由PC7控制的灯亮(=1,亮),对OUT0的检测通过PC0
30、进行,定时结束灯灭,先画出脉冲信号源,8253,8255A的连接关系图,再编写程序段。,8255控制字10000001B=81HC口方式0,C口低四位输入8253计数初值60s/1ms=60000确定通道控制字00110110B=36HPC0置1 控制字00000001PC6置1 控制字00001101PC7置1 控制字00001111,8255PC7PC6 PC0,8253GATE0OUT0,CLK0,1 0 0 0 0 0 0 1,程序段MOV AL, 81H;8255A初始化:OUT 63H, AL MOV AL, 0FH ; 8255A的PC7输出高电平,OUT 63H, AL ;灯亮
31、MOV AL, 0DH ; 8255A的PA6输出高电平,OUT 63H, AL ;启动8253计数通道0工作MOV AL, 36H ; 8253计数通道0初始化:方式3,OUT 43H, AL ;二进制计数MOV AL, 60H OUT 40H, AL ;写计数初值低8位MOV AL, 0EAH OUT 40H, AL ; 写计数初值高8位WAIT: MOV DX,62HIN AL,DX; 8255A的PC0输入低电平,停止8253计数通道0工作CMP AL,01HJZ WAITMOV AL,0EHOUT 63H,ALIRET,8253计数初值60s/1ms=60000=EA60H控制字00
32、110110B=36H8255控制字10000001B=81H PC0置1 控制字00000001PC6置1 控制字00001101PC7置1 控制字00001111PC7置0 控制字00001110设8253的端口地址为40H43H, 8255A的端口地60H63H,848 有个1的脉冲信号源送8253的计数器1利用软件方式扩大定时1S,每秒钟从8255的PA口读入一组开关数并送PB口的LED管显示,设8253,8255A的端口地址分别为40H43H,60H63H且只用10条地址线()用于端口译码。(1) 请完成: 画出脉冲信号源与8253,8255A以及开关组和LED管之间的连接关系。写出
33、8253和8255A的表达式。画出8253和8255的的逻辑电路。(2)编写程序段:编写对8253计数器1初始化程序段(仅50ms)。编写对8253的初始化程序及1s到后从PA口读入一个字节开关数并送PB口显示的程序段,(2)编写程序段:编写对8253计数器1初始化程序段(仅50ms)。编写对8253的初始化程序及1s到后从PA口读入一个字节开关数并送PB口显示的程序段,(2)计数器1初始化程序段: MOV AL,01110110B ; 通道1,方式3,16位计数 OUT 43H,AL MOV AL,50H ;先写入低8位 OUT DX,AL MOV AL,0c3H ;后写入高8位 OUT 4
34、1,AL; MOV AL,10010000B ; 通道2,方式3,16位计数 OUT 43H,AL MOV AL,14H ;先写入低8位 OUT 42,AL; MOV AL, 10010000B;8255A初始化: OUT 63H, AL IN AL, 60H ; PA输入 OUT 61H, AL ;PB输出,补充题,已知中断类型码为09H,中断源的中断处理程序入口的位置由CS9和IP9确定,假定CS9和IP9的值分别为2000H,0050H,回答下列问题。(1)该中断源的中断处理程序入口的中断向量表的范围是多少?给出计算过程。(2)该中断处理程序的入口地址是什么?给出计算过程。,地址表项,(
35、1)24H-27H(2)2000:0050;20050,2.已知异步串行通信的帧信息为0101011001,其中包括1位起始位,7位数据位,1位校验位,1位停止位,此帧传输的是什么字符?采用的是偶校验还是奇校验?校验位是0还是1,假定波特率为12000b/s,每秒钟最多能够传输多少个字符?(“0”的ASC码为30H),0-1010110-0 1,在字符数据传送过程中,数据位从最低位开始传输。数据发送完之后,可以发送奇偶校验位。奇偶校验位:数据位加上这一位后,使得“1的位数应为偶数(偶校验)或奇数(奇校验) 传输数据为0110101,35H为“5”的ASC码,偶校验,校验位是012000/10=1200个,