目录
8254-计时器应用实验
实验代码
8254-对比实验
接线说明
实验代码
8255-验证实验
实验代码
8255-自设计实验
接线图
实验代码
8259-PC机内中断嵌套实验
实验代码
8259-扩展多中断应用实验
实验代码
Proteus练习
实验代码:
8254-计时器应用实验
要求:将计数器0设为方式0,设定计数器初值为5,GATE接开关。
程序开始运行后,按如下要求操作:
将开关置高电平,观察Led灯的亮灭,然后按动单次脉冲,数一数到底经过多少个单次脉冲后,Led灯的亮灭发生变化。
实验代码
IO8254_MODE EQU 283H ;8254 控制寄存器端口地址
IO8254_COUNT0 EQU 280H ;8254 计数器 0 端口地址
IO8254_COUNT1 EQU 281H ;8254 计数器 1 端口地址
IO8254_COUNT2 EQU 282H ;8254 计数器 2 端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX, IO8254_MODE ;初始化 8254 工作方式
MOV AL,11H ;计数器 0,方式 0,十进制编码
;依据8254的方式控制字格式,计数器0对应D7D6位00,读写格式选择读写低 8位即D6D5位01,工作方式0对应D3D2D1位000,十进制数对应D0位1,即00010001,十六进制即11H
OUT DX, AL
MOV DX, IO8254_COUNT0;装入计数初值
MOV AL, 05H
OUT DX,AL
MOV AX,4C00H ;返回到 DOS
INT 21
CODE ENDS
END STAR
8254-对比实验
要求:参考实验一的程序,使用计数器0和计数器1,计数器0设方式2,计数器1设方式3,修改代码和接线图,观察不同工作方式下,GATE信号变化,实验运行现象的不同,对比分析8254不同工作方式的差别。
接线说明
GATE接到同一个开关上(利用扩展区),Led灯分别接到两个灯上,CLK0和CLK1同时接到上升沿单次脉冲上。
实验代码IO8254_MODE EQU 283H ;8254控制寄存器端口地址
IO8254_COUNT0 EQU 280H ;8254计数器0端口地址
IO8254_COUNT1 EQU 281H ;8254计数器1端口地址
IO8254_COUNT2 EQU 282H ;8254计数器2端口地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX, IO8254_MODE ;初始化8254工作方式
MOV AL,15H ;计数器0,方式2, 10进制 0001 0101
OUT DX, AL
MOV DX, IO8254_COUNT0 ;装入计数初值到计数器0
MOV AL,05H
OUT DX,AL
MOV DX, IO8254_MODE ;初始化8254工作方式
MOV AL,57H ;计数器1,方式3, 10进制 0101 0111
OUT DX, AL
MOV DX, IO8254_COUNT1 ;装入计数初值到计数器1
MOV AL,05H ;计数初值为5
OUT DX,AL
MOV AX,4C00H ;返回到DOS
INT 21H
CODE ENDS
END START
8255-验证实验
要求:在设计接线以及填写代码时,选择用B口输入、A口输出,实现基本输入输出实验。
编写程序,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就改变。
实验代码IO8255_MODE EQU 28BH IO8255_A EQU 288H IO8255_B EQU 289H IO8255_C EQU 28AH CODE SEGMENT ASSUME CS: CODE START: MOV DX, IO8255_MODE ;8255 初始化 MOV AL, 82H;1 00 0 0 0 1 0 OUT DX, AL INOUT: MOV DX, IO8255_B ;读入数据 IN AL,DX MOV DX,IO8255_A ;输出数据 OUT DX,AL MOV DL,0FFH ;判断是否有按键 MOV AH, 06H INT 21H JZ INOUT ;若无,则继续 MOV AH,4CH ;否则返回 INT 21H CODE ENDS END START
8255-自设计实验
要求:利用数码管和8255芯片,设计并实现9到0数字在数码管上的循环显示。
接线图
实验代码MY8255_A EQU 288H ;8255的端口A地址
MY8255_B EQU 289H ;8255的端口B地址
MY8255_C EQU 28AH ;8255的端口C地址
MY8255_MODE EQU 28BH ;8255的控制寄存器地址
DATA SEGMENT ;定义LED段码表
COUNT DB -1
TAB_LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ,7FH,6FH ;0-9
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA, CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV AL,82H ;1000 0010 A端口方式0输出,B方式0输入
MOV DX,MY8255_MODE
OUT DX,AL
LOOP1:
MOV AL, COUNT
MOV BX,OFFSET TAB_LED ;取LED段码表首地址
XLAT ;查出AL对应的LED段控制码
MOV DX,MY8255_A ;8255的A端口是LED段码输出口
OUT DX,AL ;输出段控制信号
CALL DALLY
ADD COUNT,1
CMP COUNT,10
JL LOOP1
SUB COUNT,10
JZ LOOP1
DALLY PROC NEAR ;软件延时子程序
D1: MOV AX,00FFH
D2: DEC AX
JNZ D2
LOOP D1
RET
DALLY ENDP
CODE ENDS
END START
8259-PC机内中断嵌套实验
要求:使用单次脉冲模拟两个中断源的中断产生,填写中断处理程序,体会中断嵌套的过程。
程序开始运行后,按如下要求操作:
A、按下连接IRQ的单次脉冲按键,屏幕上会显示6个L,在屏幕上6次显示未结束之前,按下连接IRQ10的单次脉冲按键,观察现象;
B、按下连接IRQ10的单次脉冲按键,屏幕上会显示6个R,在屏幕上6次显示未结束之前,按下连接IRQ的单次脉冲按键,观察现象。
实验代码CODE SEGMENT ASSUME CS:CODE ,DS: DATA START: .86 CLI MOV AX,CS MOV DS,AX MOV DX,OFFSET INT10 MOV AX,2572H INT 21H MOV DX,OFFSET INT3 MOV AX,250BH INT 21H IN AL,21H AND AL,0F3H OUT 21H,AL IN AL,0A1H AND AL,0FBH OUT 0A1H,AL MOV CX,6 STI WAIT: JMP WAI INT10: CLI PUSHAD PUSHFD MOV CX,6 NEXT10_1: MOV DX,4CH MOV AH,02H INT 21H MOV DX,20H MOV AH,02H INT 21H CALL DELAY1 LOOP NEXT10_1 MOV DX,0DH MOV AH,02H INT 21H MOV DX,0AH MOV AH,02H INT 21H MOV AL,20H OUT 0A0H,AL OUT 20H,AL POPFD POPAD STI IRET INT3: CLI PUSHAD PUSHFD MOV CX,10 NEXT3_1: MOV DX,52H MOV AH,02H INT 21H MOV DX,20H MOV AH,02H INT 21H CALL DELAY1 LOOP NEXT3_1 MOV DX,0DH MOV AH,02H INT 21H MOV DX,0AH MOV AH,02H INT 21H MOV AL,20H OUT 20H,AL OUT 0A0H,AL POPFD POPAD STI IRET DELAY1 PROC PUSHAD PUSHFD MOV CX,0FH DELAY_LOOP1: MOV BX,0FFFFH DELAY_LOOP2: DEC BX NOP JNZ DELAY_LOOP2 LOOP DELAY_LOOP1 POPFD POPAD RET DELAY1 ENDP CODE ENDS END START
8259-扩展多中断应用实验
要求:采用查询方式,应用实验箱提供的8259中断源,向PC机提交中断请求。拨动开关发起请求一次中断,屏幕上显示相应的中断请求号。
实验代码;***************************************************************** ; 8259中断查询方式应用实验 ;请根据所学原理推断横线处需填写的源代码 ;***************************************************************** I8259_1 EQU 2B0H ; 8259 的 ICW1 端口地址 I8259_2 EQU 2B1H ; 8259 的 ICW2 端口地址 I8259_3 EQU 2B1H ; 8259 的 ICW3 端口地址 I8259_4 EQU 2B1H ; 8259 的 ICW4 端口地址 O8259_1 EQU 2B1H ; 8259 的 OCW1 端口地址 O8259_2 EQU 2B0H ; 8259 的 OCW2 端口地址 O8259_3 EQU 2B0H ; 8259 的 OCW3 端口地址 DATA SEGMENT MES1 DB ‘YOU CAN PLAY A KEY ON THE KEYBOARD!',0DH, 0AH, 24H MES2 DD MES1 MESS1 DB 'Oops, 2021 is coming to an end * 0 *!',0DH,0AH,'$' MESS2 DB 'Oops, 2021 is coming to an end * 1 *!',0DH,0AH,'$' MESS3 DB 'Oops, 2021 is coming to an end * 2 *!',0DH,0AH,'$' MESS4 DB 'Oops, 2021 is coming to an end * 3 *!',0DH,0AH,'$' MESS5 DB 'Oops, 2021 is coming to an end * 4 *!',0DH,0AH,'$' MESS6 DB 'Oops, 2021 is coming to an end * 5 *!',0DH,0AH,'$' MESS7 DB 'Oops, 2021 is coming to an end * 6 *!',0DH,0AH,'$' MESS8 DB 'Oops, 2021 is coming to an end * 7 *!',0DH,0AH,'$' DATA ENDS STACKS SEGMENT DB 100 DUP(?) STACKS ENDS STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKS, ES:DATA .386 START: MOV AX,DATA MOV DS, AX MOV ES, AX MOV AX, STACKS MOV SS, AX MOV DX, I8259_1 ;初始化 8259 的 ICW1 MOV AL, 13H ;边沿触发、单片 8259、需要 ICW4 OUT DX,AL MOV DX,I8259_2 ;初始化 8259 的 ICW2 MOV AL,0B0H OUT DX,AL MOV AL,03H OUT DX,AL MOV DX, O8259_1 ;初始化 8259 的中断屏蔽操作命令字 MOV AL, 00H ;打开屏蔽位 OUT DX,AL QUERY: MOV AH,1 ;判断是否有按键按下 INT 16H JNZ QUIT ;有按键则退出 MOV DX, O8259_3 ;向 8259 发送查询命令 MOV AL, 6CH ;设置OCW3,由OCW3的格式和实验要求得,系统可以响应任何未被屏蔽信号,即ESMM=1,SMM=1,终端查询方式P=1,OCW3命令为0110 1100B,即6CH OUT DX,AL IN AL,DX ;读出查询字 TEST AL,80H ;判断中断是否已响应 JZ QUERY ;没有响应则继续查询 AND AL,07H CMP AL,00H JE IR0ISR ;若为 IR0 请求,跳到 IR0 处理程序 CMP AL,01H JE IR1ISR ;若为 IR1 请求,跳到 IR1 处理程序 CMP AL,02H JE IR2ISR ;若为 IR2 请求,跳到 IR2 处理程序 CMP AL,03H JE IR3ISR ;若为 IR3 请求,跳到 IR3 处理程序 CMP AL,04H JE IR4ISR ;若为 IR4 请求,跳到 IR4 处理程序 CMP AL,05H JE IR5ISR ;若为 IR5 请求,跳到 IR5 处理程序 CMP AL,06H JE IR6ISR ;若为 IR6 请求,跳到 IR6 处理程序 CMP AL,07H JE IR7ISR ;若为 IR7 请求,跳到 IR7 处理程序 JMP QUERY IR0ISR: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESS1 ;显示提示信息 MOV AH,09 INT 21H JMP EOI IR1ISR: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESS2 ;显示提示信息 MOV AH,09 INT 21H JMP EOI IR2ISR: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESS3 ;显示提示信息 MOV AH,09 INT 21H JMP EOI IR3ISR: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESS4 ;显示提示信息 MOV AH,09 INT 21H JMP EOI IR4ISR: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESS5 ;显示提示信息 MOV AH,09 INT 21H JMP EOI IR5ISR: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESS6 ;显示提示信息 MOV AH,09 INT 21H JMP EOI IR6ISR: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESS7 ;显示提示信息 MOV AH,09 INT 21H JMP EOI IR7ISR: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESS8 ;显示提示信息 MOV AH,09 INT 21H EOI: MOV DX,O8259_2 ;向 8259 发送中断结束命令 MOV AL,20H ;设置OCW2命令字,当为中断结束命令时EOI=1,R=0,SL=0,D4D3=00,结束当前正在处理的中断,L2-L0均为0,即0010 0000B=20H OUT DX,AL ;将设置好的命令字的值写入OCW2端口,使中断结束 JMP QUERY QUIT: MOV AX,4C00H ;结束程序退出 INT 21H CODE ENDS END START
Proteus练习
8255仿真设计:使用8255芯片,实现八盏灯自右向左循环亮灭。



