INC R0 ;调整数据指针 DJNZ R7,LP ; RET
键盘中断子程序如下:
KEY:PUSH PSW PUSH DPL PUSH DPH PUSH ACC PUSH B SETB PSW.3
MOV DPTR,#7FFFH ;置状态口地址 MOVX A,@DPTR ;读FIFO状态 ANL A,#0FH ; JZ PKYR ;
MOV A,#40H ;置读FIFO命令 MOVX @DPTR,A ;送读FIFO命令 MOV DPTR,#7FFEH ;置数据口地址 MOVX A,@DPTR ;读数据
LJMP KEY1 ;转键值处理程序PKYR: POP B POP ACC POP DPH POP DPL POP PSW
RETI ; 驱动电路子程序的设计
49
PUSH:MOV R3 , # NUM
PUSH A PUSH PSW LOOP: SETB P1.0 ACALL DELAY1 CLR P1.0 ACALL DELAY2 DJNZ R3,LOOP POP PSW POP A RET 延时子程序的设计 MOV R2,#18H LCALL 7FEBH RET
ORG 7FEBH 序(07EBH & 0FEBH & ...)
L7FEB: PUSH 02H 02H)存放时间常数,进栈保护
L7FED: PUSH 02H L7FEF: PUSH 02H L7FF1: DJNZ R2,$ POP 02H DJNZ R2,L7FEF POP 02H
;通用延时子程复位后R2即为R2进栈保护 进栈 ;R2不为零等待 ;出栈 ; R2不为零转 ; 出栈
50
;R2( ; ;
DJNZ R2,L7FED ; R2不为零转 POP 02H ; 出栈 DJNZ R2,L7FEB ; R2不为零转 RET ;子程序返回
END
图6-4-1 主程序流程图
主程序如下:
CON: MOV R3, # N MOV TMOD , # 10H MOV TL1 , # LOW MOV TH1 , # H IGH JNB FLAG ,LEFT MOV R0 , RM AJMP TIME - S LEFT: MOV R0 , LM TIME: SETB EA SETB ET1 SETB TR1
步进电机控制程序p3.2正转,p3.3反转,p3.4停止 步进电机接p1.0p1.1p1.2p1.3
org 00h
stop: orl p1,#0ffh ; 步进电机停止 loop:jnB p3.2,for2 ; 如果p3.2按下正转
51
jnB p3.3,rev2 ; 如果p3.3按下反转 jnB p3.4,stop1 ; 如果p3.4按下停止 jmp loop ;反复监测键盘 for: mov r0,#00h ;正转到tAB取码指针初值
for1:mov A,r0 mov dptr,#tABle movC A,@A+dptr
jz for 结束码00h
Cpl A 向
mov p1,A 始正转
jnB p3.4,stop1 止
jnB p3.3,rev2 反转
CAll delAy inC r0 码
jmp for1 rev:mov r0,#05h 初值
rev1:mov A,r0
mov dptr,#tABle
;取码 ; ;是否到了 ;把ACC反 ;输出到p1开 ; 如果p3.4按下停 ; 如果p3.3按下 ;转动的速度 ;取下一个 ;继续正转 ;反转到tAB取码指针 ;取码
52
movC A,@A+tABle
jz rev ;是否到了结束码00h
Cpl A ;把ACC反向
mov p1,A 始反转
jnB p3.4,stop1 止
jnB p3.3,rev2 反转
CAll delAy inC r0 码
jmp rev1 stop1:CAll delAy 动
jnB p3.4,$ CAll delAy jmp stop
for2:CAll delAy 除抖动
jnB p3.2,$ CAll delAy jmp for
rev2:CAll delAy
;输出到p1开 如果p3.4按下停 ; 如果p3.3按下 ;转动的速度 ;取下一个 ;继续反转 按p3.4的消除抖 ; p3.4放开否? ;放开消除抖动 ; 按p3.2的消 ; p3.2放开否? ;放开消除抖动 ; 按p3.3的消
53
; ;