MOV AL,05H ;低字节
OUT DX,AL ;写人低字节
;通道2初始化程序
MOV DX,306H
MOV AL, 10110100B ;通道2方式字,读写两字节,方式2,二进制码计数 OUT DX,AL MOV DX,304H
MOV AX,9C40H ;计数初值字节 OUT DX,AL ;写人低字节
MOV AL, AH
OUT DX, AL ;写人高字节 HLT
15. 某微机系统中,8253的端口地址为40----43H,时钟频率为5MHz,要求通道0输出方波,使计算机每秒钟产生18.2次中断;通道1每隔15μs向8237提出一次DMA1请求;通道2输出频率为2000Hz的方波。试编写8253的初始化程序,并画出有关的硬件连线图。 解:
8253的口地址为40H、41H、42H、43H。
(1)通道0输出方波,应工作在方式3,5MHz/18.2Hz=274725.3>16位定时器的最大定时初值65536。因此,需要两个计数器的级连。若以通道2的输出作为通道0的时钟输入,则可得通道0的定时初值=2000Hz/18.2Hz-1=110=6EH
(2)通道1每隔15μs向8237提出一次DMA1请求,可工作在方式2(或方式3),通道1的定时初值=15μs /(1/5MHz)=75=4BH。
(3)通道2输出频率为2000Hz的方波,应工作在方式3,通道2的定时初值=5MHz /2000Hz-1=2500-1=9C4H 硬件连结图如下图所示。
8253的初始化程序: ;通道2初始化程序
MOV AL,10110110B ;通道2控制字,读写两字节,方式3,二进制计数 OUT 43H, AL
MOV AX, 9C4H OUT 42H, AL ;写人低字节 MOV AL, AH
OUT 42H, AL ;写人高字节 ;通道0初始化程序
MOV AL,00010110B ;通道0控制字,只读写低宇节,方式3,二进制计数 OUT 43H,AL ;写人方式字 MOV AL, 6EH ;低字节
OUT 40H,AL ;写人低字节
;通道1初始化程序
41
MOV AL, 01010100B ;通道1方式字,只读写低字节,方式2,二进制码计数 OUT 43H,AL
MOV AL, 4BH ;低字节
OUT 41H,AL ;写人低字节 HLT
第9章 作业
P231
9. 8255A的方式选择字和置位复位字都写入什么端口?用什么方式区分它们? 答:
8255A的方式选择字和C口置位复位字都写入控制端口(写入控制字寄存器中)。用特征位D7区分, D7=1,为方式选择控制字, D7=0,为C口的按位置位/复位
12. 8255A的端口地址同第11题(80H, 82H, 84H, 86H),要求PC4输出高电平,PC5输出低电平,PC6输出一个正脉冲,试写出完成这些功能的指令序列。 解:
MOV AL,10000010B
OUT 86H,AL ;设置8255的工作方式 MOV AL,00001001B OUT 86H,AL MOV AL,00001010B OUT 86H,AL MOV AL,00001100B OUT 86H,AL MOV AL,00001101B OUT 86H,AL MOV AL,00001100B OUT 86H,AL HLT
15. 8255A的口地址为80H~83H。PA口接8个开关K7~K0,PB口接8个指示灯LED7~LED0,用来显示开关的状态。当开关合上时相应的指示灯点亮,断开时灯灭。试画出硬件连结电路图(含具体的译码电路),编写实现这种功能的程序段。
要求每隔20s检测一次开关状态,并随时在发光二极管LED7 ~LED0上显示出来。设CPU主频为5MHz,20秒子程序名为DELAY_20S) 解:
硬件电路如下图所示。
42
8255A 的4个端的地址分别为80H、81 H、82H和83 H,对应于8255A的PA口、PB口、PC口和控制字寄存器。
主频率为5MHz
时钟周期=主频率的倒数=1/(5×10-6)=0.2μs
延时20s需要的时钟周期数= 20s/ 0.2μs=100000000=N1×N2 假设N1=10000=2710H
[((10000-1)×17+5)+4+3+3+16] ×N2+2 ×10+2 ×8+20=100000000 N2=588=24CH 程序如下:
MOV AL, 10010000B ;控制字 OUT 83H, AL ;写人控制字
TEST- IT:IN AL, 80H ;从A口读人开关状态 NOT AL ;A口开关状态取反
OUT 81H ,AL ;B口控制LED,指示开关状态 CALL DELAY_20S
JMP TEST_ IT ;循环检测 DELAY_20S: PUSH BX
PUSH CX
MOV BX,24CH;延时20s,改变BX和CX中的值,即可改变延时时间。 DEL1: MOV CX,2710H; DEL2:LOOP DEL2 NOP DEC BX JNZ DEL1 POP CX POP BX RET
延时子程序的时钟周期数:((10000-1)×17+5)+4+3+3+16] ×588+2 ×10+2 ×8+20 =99968288 延时子程序的延时时间:99968288×(1/(5 ×106 ))=19.9936576s
不加NOP指令的计算:
延时子程序的时钟周期数:((10000-1)×17+5)+4+3+16] ×588+2 ×10+2 ×8+20 =99966524 延时子程序的延时时间:99968288×(1/(5 ×106 ))=19.9933048s P282
21. 某微机系统用8253做定时器,其口地址为40H~43H;8255A的PA口接8个开关K7~K0,PB口接8个指示灯LED7~LED0,其口地址为60H~63H;用8259A做中断控制器,其口地址为20H~21H;每隔1秒钟中断一次,读开关状态,并将开关状态显示在LED指示灯上。当开关合上时相应的指示灯点亮,断开时灯灭。要求: (1)画出硬件连结电路图
(2)编写程序。(设8253的CLK上接2MHz的时钟信号) 解:
43
8253口地址为40H~43H,8255A口地址为60H~63H, 8259A口地址为20H~21H;从地址连续可以看出:CPU是8088。
A7A6A5 A4 A3A2A1A0 十六进制地址
8259: 0010 0000 20H 0010 0001 21H
8253: 0100 0000 40H
0100 0001 41H 0100 0010 42H 0100 0011 43H
8255: 0110 0010 60H
0110 0011 61H 0110 0010 62H 0110 0011 63H
采用74LS138译码器,根据:
除用于接口芯片的内部端口的寻址的CPU低位地址线外,CPU的高位地址线中,所有芯片电平相同的地址通过逻辑电路(与、或门)连接到译码器的控制端上,所有芯片电平不同的地址作为译码器的译码输入线,译码器输出连接接口芯片的片选。
则:A7A6A5用于译码, A4A3A2=000(A4A3经与或门后接74LS138译码器的G2A、A2接74LS138译码器的G2B),74LS138译码器的G接电源。8259A片选接译码器的Y1,8253片选接译码器的Y2,8255A片选接译码器的Y3。
系统硬件电路如下:
设8259芯片中断类型码为40~47H。8253的OUT1接到8259的IR2上,用于产生中断。
8253的定时时间为1s,设8253的CLK上接2MHz时钟信号,则计数初值N=1/[1/(2×106)]=2×106,超过了8253一个通道的最大计数值216=65536,采用用2个8253通道(通道0和通道1)级连方式实现。N=N0×N1=2000×1000。 所以:通道0的初值N0 =2000,通道1的初值N1 =1000。通道0工作在方式2,通道1工作在方式3。
程序如下: ;设置8259的中断向量
MOV AX,SEG IRQ2
MOV DS,AX
MOV DX, OFFSET IRQ2
44