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) 解:
硬件电路如下图所示。
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:MOVCX,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的时钟信号) 解:
8253口地址为40H~43H,8255A口地址为60H~63H, 8259A口地址为20H~21H;从地址连续可以看出:CPU是8088。
A7A6A5 A4 A3A2A1A0十六进制地址
8259: 0010 0000 20H 0010 000121H
8253: 0100 0000 40H
0100 000141H
0100 0010 42H 0100 001143H
8255: 0110 0010 60H
0110 001161H
0110 0010 62H 0110 001163H
采用74LS138译码器,根据:
除用于接口芯片的内部端口的寻址的CPU低位地址线外,CPU的高位地址线中,所有芯片电平相同的地址通过逻辑电路(与、或门)连接到译码器的控制端上,所有芯片电平不同的地址作为译码器的译码输入线,译码器输出连接接口芯片的片选。
则:A7A6A5用于译码, A4A3A2=000(A4A3经与或门后接74LS138译码器的G2A、A2接74LS138
译码器的G2B),74LS138译码器的G接电源。8259A片选接译码器的,8253片选接译码器的,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 MOV AL,42H MOV AH,25H INT 21H ;8259初始化
MOV AL,13H;ICW1边沿触发,单片8259,有ICW4
OUT 20H,AL
MOV AL,40H ;ICW2 中断类型号基值为40H OUT 21H,AL
MOV AL,01H ;ICW4 8088系统,普通EOI,;完全嵌套式 OUT 21H,AL MOV AL,0FDH
OUT 21H ,AL ;OCW1,设置IMR,中断屏蔽 ;8255初始化
MOV AL,90H;PA口输入,方式0;PB口输出,方式0
OUT 63H,AL ;8253初始化
;通道0初始化程序
MOV AL,00110101B ;通道0控制字,读写两字节,方式2,十进制计数
OUT 43H,AL
MOV AL, 00H
OUT 40H, AL ;写人低字节 MOV AL, 20H
OUT 40H, AL ;写人高字节
;通道1初始化程序
MOV AL,01110111B ;通道1控制字,读写两字节,方式3,十进制计数
OUT 43H,AL MOV AL, 00H
OUT 41H, AL ;写人低字节 MOV AL, 10H
OUT 41H, AL ;写人高字节 ;主程序
STI
ZX: NOP JMP ZX ;中断服务子程序 IRQ2: PUSH AX
STI
IN AL, 60H ;从8255的PA口读人开关状态 NOT AL ;8255的PA口开关状态取反
OUT 61H ,AL ;8255的PB口控制LED,指示开关状态 MOV AL,20H
OUT 20H,AL ;发中断结束普通EOI命令 POP AX IRET
19. 8255A的口地址为80H~83H,8253的口地址为84H~87H。
(1)若A口接8个开关K7~K0,B口接8个指示灯LED7~LED0,当开关合上时相应的指示灯点亮,断开时灯灭。要求每隔0.5s检测一次开关状态,并随时在发光二极管LED7 ~LED0上显示出来。试画出硬件连结电路图,编写实现这种功能的程序。
(2)若把A口接的开关去掉,要求B口接的8个指示灯轮流熄灭(轮流点亮为跑马灯),每只灯熄灭1s,编写实现这种功能的程序。 解: (1)
硬件电路如下图所示。