微机原理上机实验八+十二实验报告 8086中断实验 步进电机实验.docx
《微机原理上机实验八+十二实验报告 8086中断实验 步进电机实验.docx》由会员分享,可在线阅读,更多相关《微机原理上机实验八+十二实验报告 8086中断实验 步进电机实验.docx(20页珍藏版)》请在冰豆网上搜索。
微机原理上机实验八+十二实验报告8086中断实验步进电机实验
微机原理上机实验报告
实验八:
8086中断实验
实验十二:
步进电机实验
微机原理上机实验(八)实验报告
实验八:
8086中断实验
一、实验目的
1、了解8086内部响应中断的机制;掌握中断向量的作用。
2、利用实验仪上单脉冲、74HC244电路,不使用8259,实现一个中断实例。
3、复习本节实验内容,可尝试自行编写程序,做好实验准备工作,填写实验报告。
二、实验内容
1、编制程序:
拨动单脉冲开关,“
”送给8086的INTR,触发中断;8086通过INTA信号,读取中断向量;8086计数中断次数,显示于F5区的数码管上
注意:
给INTR高电平信号,8086就会相应中断,所以实验开始前,保证单脉冲开关给8086低电平;中断程序中,加一个较长的延时程序,在中断结束前,有时间拨动单脉冲开关,恢复给8086低电平。
三、实验原理图
本实验,通过F4区的8个拨动开关,给74HC244设定中断向量;本实验的中断向量是08H,即IN7-IN0位数据是00001000。
同学可以自定义中断向量,实验程序中处理中断向量部分程序作相应调整
四、实验步骤
1、连线说明:
B4区:
CS244、BLE
——
C1区:
GND
B4区:
RD(IO区)
——
A3区:
INTA
A3区:
INTR
——
B2区:
单脉冲
B4区:
JP57(D0..D7)
——
A3区:
JP41
B4区:
JP52(IN0..7)
——
F4区:
JP27(1..8)
D3区:
CS、A0、A1
——
A3区:
CS1、A0、A1
D3区:
PC0、PC1
——
F5区:
KL1、KL2
D3区:
JP20、B、C
——
F5区:
A、B、C
2、运行程序
3、实验开始前,保证单脉冲开关给8086低电平;运行程序;向下拨动开关(触发中断),立即向上拨动开关,产生一个“
”,观察结果,数码管上显示的次数与拨动开关次数是否对应。
五、实验代码
EXTRN
InitKeyDisplay:
NEAR,Display8:
NEAR
_STACK
SEGMENT
STACK
DW
100DUP(?
)
_STACK
ENDS
_DATA
SEGMENT
WORDPUBLIC'DATA'
BUFFER
DB
8DUP(?
)
Counter
DB
?
ReDisplayFlag
DB
0
_DATA
ENDS
CODE
SEGMENT
START
PROC
NEAR
ASSUME
CS:
CODE,DS:
_DATA,SS:
_STACK
MOV
AX,_DATA
MOV
DS,AX
MOV
ES,AX
NOP
CALL
InitKeyDisplay
;对键盘、数码管控制器8255初始化
CALL
WriIntver
MOV
Counter,0
;中断次数
MOV
ReDisplayFlag,1
;需要显示
STI
;开中断
START1:
LEA
SI,Buffer
CALL
Display8
CMP
ReDisplayFlag,0
JZ
START1
CALL
LedDisplay
MOV
ReDisplayFlag,0
JMP
START1
WriIntver
PROC
NEAR
PUSH
ES
MOV
AX,0
MOV
ES,AX
MOV
DI,20H
LEA
AX,INT_0
STOSW
MOV
AX,CS
STOSW
POP
ES
RET
WriIntver
ENDP
LedDisplay
PROC
NEAR
MOV
AL,Counter
MOV
AH,AL
AND
AL,0FH
MOV
Buffer,AL
AND
AH,0F0H
ROR
AH,4
MOV
Buffer+1,AH
MOV
Buffer+2,10H
;高六位不需要显示
MOV
Buffer+3,10H
MOV
Buffer+4,10H
MOV
Buffer+5,10H
MOV
Buffer+6,10H
MOV
Buffer+7,10H
RET
LedDisplay
ENDP
INT_0:
PUSH
DX
PUSH
AX
MOV
AL,Counter
ADD
AL,1
DAA
MOV
Counter,AL
MOV
ReDisplayFlag,1
CALL
LedDisplay
DELAY:
PUSH
BX
PUSH
CX
PUSH
DI
PUSH
SI
MOV
CX,20
DELAY1:
LEA
SI,Buffer
CALL
Display8
loop
DELAY1
POP
SI
POP
DI
POP
CX
POP
BX
POP
AX
六、实验思考题
1.绘制本实验的详细实验电路图?
微机原理上机实验(十二)实验报告
实验十二:
步进电机实验
一、实验目的
1、了解步进电机的基本原理,掌握步进电机的转动编程方法
2、了解影响电机转速的因素有那些
二、实验内容
编写程序:
使用F5区的键盘控制步进电机的正反转、调节转速,连续转动或转动指定步数;将相应的数据显示在F5区的数码管上。
三、控制原理
步进电机的驱动原理是通过它每相线圈的电流的顺序切换来使电机作步进式旋转,驱动电路由脉冲来控制,所以调节脉冲的频率便可改变步进电机的转速,微控制器最适合控制步进电机。
另外,由于电机的转动惯量的存在,其转动速度还受驱动功率的影响,当脉冲的频率大于某一值(本实验为f.>100hz)时,电机便不再转动。
实验电机共有四个相位(A,B,C,D),按转动步骤可分单4拍(A->B->C->D->A),双4拍(AB->BC->CD->DA->AB)和单双8拍(A->AB->B->BC->C->CD->D->DA->A).
四、实验电路图
五、实验步骤
1、主机连线说明:
D1区:
A、B、C、D
——
D3区:
PC4、PC5、PC6、PC7
D3区:
CS、A0、A1
——
A3区:
CS1、A0、A1
D3区:
PC0、PC1
——
F5区:
KL1、KL2
D3区:
JP20(PB)、B、C
——
F5区:
A、B、C
B3区:
CS、A0
——
A3区:
CS3、A0
B3区:
INT、INTA
——
A3区:
INTR、INTA
C4区:
CS(8253)、A0、A1
——
A3区:
CS2、A0、A1
C4区:
GATE
——
C1区:
VCC
C4区:
CLK0
——
B2区:
1M
C4区:
OUT0
——
B3区:
IR0
2、调试程序,查看运行结果是否正确
六、实验代码
1、步进电机控制程序(STEP.ASM)
EXTRN
InitKeyDisplay:
NEAR,GetKeyA:
NEAR,DisPlay8:
NEAR
IO8259_0
EQU
0250H
IO8259_1
EQU
0251H
Con_8253
EQU
0263H
T0_8253
EQU
0260H
IO8255_Con
EQU
0273H
;CS3
IO8255_PC
EQU
0272H
_STACK
SEGMENT
STACK
DW
100DUP(?
)
_STACK
ENDS
_DATA
SEGMENT
WORDPUBLIC'DATA'
StepControl
DB
0
;下一次送给步进电机的值
buffer
DB
8DUP(0)
;显示缓冲区,8个字节
SpeedNo
DB
0
;选择哪一级速度
StepDelay
DB
0
;转动一步后,延时常数
StartStepDelay
DB
0;若选择速度过快,延时由长到短,最终使用对应延时常数
StartStepDelay1
DB
0
;StartStepDelay
bFirst
DB
0
;有没有转动过步进电机
bClockwise
DB
0;=1顺时针方向=0逆时针方向转动
bNeedDisplay
DB
0
;已转动一步,需要显示新步数
StepCount
DW
0
;需要转动的步数
StepDelayTab:
DB
250,125,83,62,50,42,36,32,28,25,22,21
_DATA
ENDS
CODE
SEGMENT
WORDPUBLIC'CODE'
START
PROC
NEAR
ASSUME
CS:
CODE,DS:
_DATA,SS:
_STACK
MOV
AX,_DATA
MOV
DS,AX
MOV
ES,AX
NOP
CALL
InitKeyDisplay
;初始化键盘、数码管控制器(8255)
MOV
bFirst,1
;有没有转动过步进电机
MOV
bClockwise,1
;顺时针方向
MOV
StepControl,33H
;下一次送给步进电机的值
MOV
SpeedNo,5
;第五级速度
CALL
Init8255
CALL
Init8253
CALL
Init8259
CALL
WriIntver
MOV
buffer,0
;显示缓冲器初始化
MOV
buffer+1,0
MOV
buffer+2,0
MOV
buffer+3,0
MOV
buffer+4,10H
MOV
AL,SpeedNo
MOV
buffer+5,AL
MOV
buffer+6,10H
MOV
buffer+7,0
STAR2:
LEA
SI,buffer
CALL
Display8
STAR3:
CALL
GetKeyA
JB
STAR5
CMP
bNeedDisplay,0
JZ
STAR3
MOV
bNeedDisplay,0
CALL
Adjust_Step
JMP
STAR2
STAR5:
CLI
;终止步进电机转动
CMP
AL,10
JNB
STAR1
MOV
AH,buffer+2
MOV
buffer+3,AH
MOV
AH,buffer+1
MOV
buffer+2,AH
MOV
AH,buffer
MOV
buffer+1,AH
MOV
buffer,AL
JMP
STAR2
STAR1:
CMP
AL,14
JNB
STAR2
LEA
SI,DriverTab
SUB
AL,10
SHL
AL,1
XOR
AH,AH
MOV
BX,AX
JMP
CS:
[SI+BX]
DriverTab:
DW
Direction
;转动方向
DW
Speed_up
;提高转速
DW
Speed_Down
;降低转速
DW
Exec
;步进电机根据方向、转速、步数开始转动
Direction:
CMP
bClockwise,0
JZ
Clockwise
MOV
bClockwise,0
MOV
buffer+7,1
AntiClockwise:
CMP
bFirst,0
JZ
AntiClockwise1
MOV
StepControl,91H
JMP
Direction1
AntiClockwise1:
MOV
AL,StepControl
ROR
AL,2
MOV
StepControl,AL
JMP
Direction1
Clockwise:
MOV
bClockwise,1
MOV
buffer+7,0
CMP
bFirst,0
JZ
Clockwise1
MOV
StepControl,33H
JMP
Direction1
Clockwise1:
MOV
AL,StepControl
ROL
AL,2
MOV
StepControl,AL
Direction1:
JMP
STAR2
Speed_up:
MOV
AL,SpeedNo
CMP
AL,11
JZ
Speed_up2
Speed_up1:
INC
AL
MOV
SpeedNo,AL
MOV
buffer+5,AL
Speed_up2:
JMP
STAR2
Speed_Down:
MOV
AL,SpeedNo
CMP
AL,0
JZ
Speed_Down1
DEC
AL
MOV
SpeedNo,AL
MOV
buffer+5,AL
Speed_Down1:
JMP
STAR2
Exec:
MOV
bFirst,0
CALL
TakeStepCount
LEA
BX,StepDelayTab
MOV
AL,SpeedNo
XLAT
MOV
StepDelay,AL
CMP
AL,50
JNB
Exec1
MOV
AL,50
Exec1:
MOV
StartStepDelay,AL
MOV
StartStepDelay1,AL
STI
JMP
STAR2
TIMER0:
PUSH
AX
PUSH
DX
DEC
StartStepDelay
JNZ
TIMER0_1
MOV
AL,StartStepDelay1
CMP
AL,StepDelay
JZ
TIMER0_2
DEC
AL
MOV
StartStepDelay1,AL
TIMER0_2:
MOV
StartStepDelay,AL
MOV
AL,StepControl
MOV
DX,IO8255_PC
OUT
DX,AL
CMP
bClockwise,0
JNZ
TIMER0_3
ROR
AL,1
JMP
TIMER0_4
TIMER0_3:
ROL
AL,1
TIMER0_4:
MOV
StepControl,AL
CMP
StepCount,0
JZ
TIMER0_1
MOV
bNeedDisplay,1
DEC
StepCount
JNZ
TIMER0_1
add
sp,8;小写部分不允许使用单步、单步进入命令
popf
cli
pushf
sub
sp,8
nop
TIMER0_1:
MOV
DX,IO8259_0
MOV
AL,20H
OUT
DX,AL
POP
DX
POP
AX
IRET
Adjust_Step
PROC
NEAR
MOV
CX,4
LEA
DI,buffer
CLD
MOV
AX,StepCount
MOV
BX,10
Adjust_Step1:
XOR
DX,DX
DIV
BX
XCHG
AX,DX
STOSB
MOV
AX,DX
LOOP
Adjust_Step1
RET
Adjust_Step
ENDP
TakeStepCount
PROC
NEAR
MOV
AL,buffer+3
;转动步数送入StepCount
MOV
BX,10
MUL
BL
ADD
AL,buffer+2
MUL
BL
ADD
AL,buffer+1
ADC
AH,0
MUL
BX
ADD
AL,buffer
ADC
AH,0
MOV
StepCount,AX
RET
TakeStepCount
ENDP
Init8255
PROC
NEAR
MOV
DX,IO8255_Con
MOV
AL,81H
OUT
DX,AL
;8255PC输出
DEC
DX
MOV
AL,0FFH
OUT
DX,AL
;0FFH->8255PC
RET
Init8255
ENDP
Init8253
PROC
NEAR
MOV
DX,Con_8253
MOV
AL,35H
OUT
DX,AL;计数器T0设置在模式2状态,BCD码计数
MOV
DX,T0_8253
MOV
AL,10H
OUT
DX,AL
MOV
AL,02H
OUT
DX,AL
;CLK0/210
RET
Init8253
ENDP
Init8259
PROC
NEAR
MOV
DX,IO8259_0
MOV
AL,13H
OUT
DX,AL
MOV
DX,IO8259_1
MOV
AL,08H
OUT
DX,AL
MOV
AL,09H
OUT
DX,AL
MOV
AL,0FEH
OUT
DX,AL
RET
Init8259
ENDP
WriIntver
PROC
NEAR
PUSH
ES
MOV
AX,0
MOV
ES,AX
MOV
DI,20H
LEA
AX,TIMER0
STOSW
MOV
AX,CS
STOSW
POP
ES
RET
WriIntver
ENDP
START
ENDP
CODE
ENDS
END
START
七、实验扩展及思考
1、怎样改变电机的转速?
通过调节键盘的按钮(C和D)可以改变电机的转速。
2、通过实验找出电机转速的上限,如何能进一步提高最大转速?
增大驱动电机的电流。
3、怎样能使电机反转?
通过调节键盘的按钮(A)可以改变电机的转动方向。