华北电力大学 接口实验参考程序.docx
《华北电力大学 接口实验参考程序.docx》由会员分享,可在线阅读,更多相关《华北电力大学 接口实验参考程序.docx(22页珍藏版)》请在冰点文库上搜索。
华北电力大学接口实验参考程序
4.38259A中断控制实验
表1中断类型码及中断向量地址
主片中断类型码和中断向量地址
中断序号
IR0
IR1
IR2
IR3
IR4
IR5
IR6
(MIR6)
IR7(MIR7)
中断类型码
08H
09H
0AH
0BH
0CH
0DH
0EH
0FH
矢量地址
0020H~0023H
0024H~0027H
0028H~002BH
002CH~002FH
0030H~0033H
0034H~0037H
0038H~003BH
003CH~003FH
说明
未开放
未开放
未开放
未开放
串口
未开放
可用
可用
从片中断类型码和中断向量地址
中断序号
IR0
IR1
(SIR1)
IR2
IR3
IR4
IR5
IR6
IR7
中断类型码
30H
31H
32H
33H
34H
35H
36H
37H
矢量地址
00C0H~00C3H
00C4H~00C7H
00C8H~00CBH
00CCH~00CFH
00C0H~00C3H
00C4H~00C7H
00C8H~00CBH
00CCH~00CFH
说明
开放
4.3.3
1.8259单次实验
(1)实验步骤:
1)按图4-17所示连接实验线路
2)编写实验程序,经编译、链接无误后装入系统。
3)运行程序,重复按单次脉冲开关KK1+,记录实验
结果或看到的现象。
(2)实验参考程序清单:
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
CLI
PUSHDS
MOVAX,0000H
MOVDS,AX
MOVAX,OFFSETMIR7;取中断入口地址
MOVSI,003CH;中断矢量地址
MOV[SI],AX;填IRQ7的偏移矢量
MOVAX,SEGMIR7;段地址
MOVSI,003EH
POPDS
;初始化主片8259
MOVAL,11H
OUT20H,AL;ICW1
MOVAL,08H
OUT21H,AL;ICW2
MOVAL,04H
OUT21H,AL;ICW3
MOVAL,01H
OUT21H,AL;ICW4
MOVAL,7FH
OUT21H,AL;主8259OCW1
STI
AA1:
NOP
JMPAA1
MIR7:
CALLDELAY
MOVAX,0137H
INT10H;显示字符7
MOVAX,0120H
INT10H
MOVAL,20H
OUT20H,AL;中断结束命令
IRET
DELAY:
PUSHCX
MOVCX,0F00H
AA0:
PUSHAX
POPAX
LOOPAA0
POPCX
RET
CODEENDS
ENDSTART
4)改变接线方式,将KK1+接入MIR6,修改程序,重复按单次脉冲开关KK1+,使显示屏显示字符”6”。
记录实验结果或看到的现象。
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
CLI
PUSHDS
MOVAX,0000H
MOVDS,AX
MOVAX,OFFSETMIR6;取中断入口地址
MOVSI,0038H;中断矢量地址
MOV[SI],AX;填IRQ7的偏移矢量
MOVAX,SEGMIR6;段地址
MOVSI,003AH
POPDS
;初始化主片8259
MOVAL,11H
OUT20H,AL;ICW1
MOVAL,08H
OUT21H,AL;ICW2
MOVAL,04H
OUT21H,AL;ICW3
MOVAL,01H
OUT21H,AL;ICW4
MOVAL,0BFH
OUT21H,AL;主8259OCW1
STI
AA1:
NOP
JMPAA1
MIR6:
CALLDELAY
MOVAX,0136H
INT10H;显示字符7
MOVAX,0120H
INT10H
MOVAL,20H
OUT20H,AL;中断结束命令
IRET
DELAY:
PUSHCX
MOVCX,0F00H
AA0:
PUSHAX
POPAX
LOOPAA0
POPCX
RET
CODEENDS
ENDSTART
思考题:
分析中断响应过程,主程序如何调用中断服务程序的
2.8259级联实验
1)按图4-17所示连接实验线路
2)编写实验程序,经编译、链接无误后装入系统。
3)运行程序,重复按单次脉冲开关KK1+,记录实验
结果或看到的现象。
4)实验参考程序清单:
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
PUSHDS
MOVAX,0000H
MOVDS,AX
MOVAX,OFFSETMIR7;取中断入口地址
MOVSI,003CH;中断矢量地址
MOV[SI],AX;填IRQ7的偏移矢量
MOVAX,SEGMIR7;段地址
MOVSI,003EH
MOV[SI],AX;填IRQ7的段地址矢量
MOVAX,OFFSETSIR1
MOVSI,00C4H
MOV[SI],AX
MOVAX,SEGSIR1
MOVSI,00C6H
MOV[SI],AX
CLI
POPDS
;初始化主片8259
MOVAL,11H
OUT20H,AL;ICW1
MOVAL,08H
OUT21H,AL;ICW2
MOVAL,04H
OUT21H,AL;ICW3
MOVAL,01H
OUT21H,AL;ICW4
;初始化从片8259
MOVAL,11H
OUT0A0H,AL;ICW1
MOVAL,30H
OUT0A1H,AL;ICW2
MOVAL,02H
OUT0A1H,AL;ICW3
MOVAL,01H
OUT0A1H,AL;ICW4
MOVAL,0FDH
OUT0A1H,AL;OCW1=11111101
MOVAL,6BH
OUT21H,AL;主8259OCW1
STI
AA1:
NOP
JMPAA1
MIR7:
CALLDELAY
MOVAX,014DH
INT10H;M
MOVAX,0137H
INT10H;显示字符7
MOVAX,0120H
INT10H
MOVAL,20H
OUT20H,AL;中断结束命令
IRET
SIR1:
CALLDELAY
MOVAX,0153H
INT10H;S
MOVAX,0131H
INT10H;显示字符1
MOVAX,0120H
INT10H
MOVAL,20H
OUT0A0H,AL
OUT20H,AL
IRET
DELAY:
PUSHCX
MOVCX,0F00H
AA0:
PUSHAX
POPAX
LOOPAA0
POPCX
RET
CODEENDS
ENDSTART
实验现象分析:
M7S1:
MIR7中断请求先到
S1M7:
SIR1中断请求先送到或MIR7与SIR1中断请求信号同时到,但SIR1优先级高,先响应SIR1中断请求
MS17:
M7S1:
MIR7中断请求先到,但未执行完时,SIR1中断请求送到,其优先级高,打断MIR7中断服务程序
3.8259综合实验
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
CLI
PUSHDS
MOVAX,0000H
MOVDS,AX
MOVAX,OFFSETMIR7;取中断入口地址
MOVSI,003CH;中断矢量地址
MOV[SI],AX;填IRQ7的偏移矢量
MOVAX,SEGMIR7;段地址
MOVSI,003EH
POPDS
;初始化主片8259
MOVAL,11H
OUT20H,AL;ICW1
MOVAL,08H
OUT21H,AL;ICW2
MOVAL,04H
OUT21H,AL;ICW3
MOVAL,01H
OUT21H,AL;ICW4
MOVAL,7FH
OUT21H,AL;主8259OCW1
STI
MOVSI,10
AA1:
MOVCX,10;显示字符个数10送入CX
MOVBL,30H;显示字符‘0’,填入字符0的编码
MOVAH,01H;显示一个字符
A1:
MOVAL,BL
INT10H
INCBL;显示下一个字符
PUSHCX
MOVCX,0FFFFH
A2:
LOOPA2;延时
POPCX
DECCX
JNZA1
JMPAA1;循环显示0~9
MIR7:
CALLDELAY
MOVAX,014FH
INT10H;显示字符O
MOVAX,014BH
INT10H;显示字符K
MOVAL,20H
OUT20H,AL;中断结束命令
DECSI
JNZAA2
CLI
MOVAL,0FFH
OUT21H,AL
AA2:
IRET
DELAY:
PUSHCX
MOVCX,0F00H
AA0:
PUSHAX
POPAX
LOOPAA0
POPCX
RET
CODEENDS
ENDSTART
4.48254定时/计数器应用实验
1.计数应用实验
编写程序,用开关模拟事件,用8254的计数功能进行计数。
将8254的计数器0设置为方式0,计数初值为十进制数3,单次脉冲KK1+接入CLK0作为输入,OUT0连接MIR7,每当KK1+按动4次后产生中断请求,在屏幕上显示一个字符“M”。
实验步骤:
(1)实验接线如图4-21所示;
(2)编写实验程序,经编译、链接无误后装入系统;
(3)运行程序,按动KK1+产生单次脉冲,观察实验现象;
(4)改变计数值,验证8254的计数功能。
2.修改内容1—计数应用实验程序,完成按动开关3次后产生中断,屏幕显示“M”。
3.修改内容1—计数应用实验程序,要求屏幕显示第几次中断中断?
参考程序:
A8254EQU06C0H
B8254EQU06C2H
C8254EQU06C4H
CON8254EQU06C6H
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
SSTACK
START:
PUSHDS
MOVAX,0000H
MOVDS,AX
MOVAX,OFFSETIRQ7;取中断入口地址
MOVSI,003CH;中断矢量地址
MOV[SI],AX;填IRQ7的偏移矢量
MOVAX,CS;段地址
MOVSI,003EH
MOV[SI],AX;填IRQ7的段地址矢量
CLI
POPDS
;初始化主片8259
MOVAL,11H
OUT20H,AL;ICW1
MOVAL,08H
OUT21H,AL;ICW2
MOVAL,04H
OUT21H,AL;ICW3
MOVAL,01H
OUT21H,AL;ICW4
MOVAL,6FH;OCW1
OUT21H,AL
;8254
MOVDX,CON8254
MOVAL,10H;计数器0,方式0
OUTDX,AL
MOVDX,A8254
MOVAL,04H
OUTDX,AL
STI
AA1:
JMPAA1
IRQ7:
MOVDX,A8254
MOVAL,04H
OUTDX,AL
MOVAX,014DH
INT10H;显示字符M
MOVAX,0120H
INT10H
MOVAL,20H
OUT20H,AL;中断结束命令
IRET
CODEENDS
ENDSTART
2定时应用实验
1)编写程序,应用8254的定时功能,将8254的计数器0设置为方式3,用信号源1MHz作为CLK0时钟,OUT0输出周期为60ms的方波接到发光二极管上,运行程序,观察发光二极管状态。
(时钟源和GATE信号实验箱内部已经接好线)
发光二极管点亮实验程序清单
A8254EQU06C0H
B8254EQU06C2H
C8254EQU06C4H
CON8254EQU06C6H
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,CON8254;8254
MOVAL,36H;计数器0,方式3
OUTDX,AL
MOVDX,A8254
MOVAL,0E8H
OUTDX,AL
MOVAL,03H
OUTDX,AL
AA1:
JMPAA1
CODEENDS
ENDSTART
1)编写程序,应用8254的定时功能,实现一个秒表计时并在屏幕上显示。
(时钟源和GATE信号实验箱内部已经接好线)
A8254EQU06C0H
B8254EQU06C2H
C8254EQU06C4H
CON8254EQU06C6H
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
CLI
PUSHDS
MOVAX,0000H
MOVDS,AX
MOVAX,OFFSETMIR7;取中断入口地址
MOVSI,003CH;中断矢量地址
MOV[SI],AX;填IRQ7的偏移矢量
MOVAX,SEGMIR7;段地址
MOVSI,003EH
POPDS
;初始化主片8259
MOVAL,11H
OUT20H,AL;ICW1
MOVAL,08H
OUT21H,AL;ICW2
MOVAL,04H
OUT21H,AL;ICW3
MOVAL,01H
OUT21H,AL;ICW4
MOVAL,7FH
OUT21H,AL;主8259OCW1
STI
MOVDX,CON8254;8254
MOVAL,36H;计数器0,方式3
OUTDX,AL
MOVDX,A8254
MOVAL,0E8H
OUTDX,AL
MOVAL,03H
OUTDX,AL
MOVBL,30H
MOVDX,CON8254;8254
MOVAL,50H;计数器1,方式0,01010000
OUTDX,AL
MOVDX,B8254
MOVAL,9H
AA1:
NOP
JMPAA1
MIR7:
MOVDX,B8254
MOVAL,9H
CALLDELAY
INCBL
MOVAL,BL
MOVAH,01H
INT10H;显示字符1
MOVAX,0120H
INT10H
MOVAL,20H
OUT20H,AL;中断结束命令
IRET
DELAY:
PUSHCX
MOVCX,0F00H
AA0:
PUSHAX
POPAX
LOOPAA0
POPCX
RET
CODEENDS
ENDSTART
1.基本输入输出实验。
编写程序,使8255的A口为输入,B口为输出,完成拨动开关到数据灯的数据传输。
要求只要开关拨动,数据灯的显示就发生相应改变。
接线图如下:
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,0646H
MOVAL,90H
OUTDX,AL
AA1:
MOVDX,0640H
INAL,DX
CALLDELAY
MOVDX,0642H
OUTDX,AL
JMPAA1
DELAY:
PUSHCX
MOVCX,0F00H
AA2:
PUSHAX
POPAX
LOOPAA2
POPCX
RET
CODEENDS
ENDSTART
2.流水灯显示实验。
编写程序,使8255的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0正相反,由右向左,每次仅点亮一个灯,循环显示。
接线图如下:
3.修改流水灯显示程序,改变流水灯的显示方式,每次显示2个指示灯。
4.按下图接线编程,如何使数码管循环显示0~9.请编程。
定义数据区:
TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH.;七段显示码表
代码段部分程序:
MOVDX,0646H.;8255初始化,方式控制字
MOVAL,80H;10000000
OUTDX,AL
MOVDX,0642H
MOVAL,0
OUTDX,AL;B口输出0
NEXT0:
MOVCX,10
LEABX,TABLE
NEXT1:
MOVAL,[BX]
MOVDX,0640H;从8255A口输出
OUTDX,AL
CALLDELL延时程序
INCBX
DECCX
JNZNEXT1
JMPNEXT0
DELL:
PUSHAX;延时1s
MOVCX,0100
T1:
:
MOVAX,0560
T2:
DECAX
JNET2
LOOPT1
POPAX
RET