
C汇编中断控制步进电机程序.pdf
3页C51 汇编初学汇编初学 功能:使用 INT0 的中断服务程序控制步进电机正向步进;使用 INT1 中断服务程 序控制步进电机反向步进 电路: 设计思路: ① 主程序在完成对 INT0 和 INT1 的设置后,可进入死循环(等待中断请求) ② 为便于实验观察和操作,设 INT0 和 INT1 中断触发方式为边沿 ③ 步进电机的转动控制由外部中断的服务程序来实现 ④ 当前步进电机的相位通电状态信息可以使用片内 RAM 中的一个字节单元来 存储 设计参考: ① 主程序需要设置的中断控制位如下: IT0 和 IT1 外部中断触发方式控制 0=电平 1=边沿(下降沿) EX0 和 EX1 外部中断允许控制 0=屏蔽 1=允许 PX0 和 PX1 中断优先级级别控制 0=低级 1=高级 在同级别(PX0=PX1)时 INT0 的优先级高于 INT1 EA 中断允许总控制 0=屏蔽 1=允许 ② 外部中断服务程序的入口地址: 0003H 外部中断 0 0013H 外部中断 1 程序程序:: PHASE_OUT EQU 30H ;步进电机相位通电状态 VAR_END EQU 31H ;转动次数 STACK_INI EQU VAR_END+1 ORG 0000H ;复位入口 LJMP RESET ORG 0003H ;外部中断 0 服务程序入口 LJMP INT_EX0 ORG 000BH ;定时器/计数器 0 溢出中断服务程序入口 RETI ORG 0013H ;外部中断 1 服务程序入口 LJMP INT_EX1 ORG 001BH ;定时器/计数器 1 溢出中断服务程序入口 RETI ORG 0023H ;串行口中断服务程序入口 RETI ORG 040H ;复位处理程序 RESET: MOV SP,#STACK_INI ;设置栈底指针 MAIN: SETB IT0 SETB IT1 SETB EX0 SETB EX1 SETB PX0 SETB PX1 MOV PHASE_OUT,#01H MOV VAR_END,#03H ;转动次数为 3 SETB EA SJMP $ INT_EX0: MOV R0,VAR_END ;转动次数 INTX0: MOV A,PHASE_OUT RR A CJNE A,#80H,I0 MOV A,#08H I0: MOV PHASE_OUT,A MOV P1,A DELAY0: MOV R1,#5 LP10: MOV R2,#255 LP20: MOV R3,#255 DJNZ R3,$ DJNZ R2,LP20 DJNZ R1,LP10 DJNZ R0,INTX0 RETI INT_EX1: MOV R0,VAR_END ;转动次数 INTX1: MOV A,PHASE_OUT RL A CJNE A,#10H,I1 MOV A,#01H I1: MOV PHASE_OUT,A MOV P1,A DELAY1: MOV R1,#5 LP11: MOV R2,#255 LP21: MOV R3,#255 DJNZ R3,$ DJNZ R2,LP21 DJNZ R1,LP11 DJNZ R0,INTX1 RETI END 。
