;-------------------------- DEA EQU 3 ;伺服机正旋转时间常数 DEB EQU 25 ;伺服机反旋转时间常数 TS EQU 18 ;脉冲信号个数 ;-------------------------- K1 EQU P2.4 ;按键1引脚定义 K2 EQU P2.3 ;按键2引脚定义 K3 EQU P2.2 ;按键3引脚定义 K4 EQU P2.1 ;按键4引脚定义 ;----------------------------------- WLED EQU P3.7 ;工作指示灯引脚定义 PUL EQU P1.7 ;伺服机1控制线 PUR EQU P1.6 ;伺服机2控制线 ;-------------------------------------- START: CLR PUL ;送出低电平信号至伺服机 CLR PUR CALL LED_BL ;LED闪动,表示程序开始执行 LOOP: ; SCAN KEY ON..... JB K1,X1 ;未按下K1键则继续扫描 JNB K1,$ ;等按键放开来 CALL LED_BL CALL GO_FOR ;车体前进 JMP LOOP ;继续循环执行 X1:JB K2,X2 ;未按下K2键则继续扫描 JNB K2,$ ;等按键放开来 CALL LED_BL CALL GO_BACK;车体后退 JMP LOOP ;继续循环执行 X2:JB K3,X3 ;未按下K3键则继续扫描 JNB K3,$ ;等按键放开来 CALL LED_BL CALL GO_LEFT;车体左转 JMP LOOP ;继续循环执行 X3:JB K4,X4 ;未按下K4键则继续扫描 JNB K4,$ ;等按键放开来 CALL LED_BL CALL GO_RIGHT;车体左转 JMP LOOP ;继续循环执行 X4: JMP LOOP ;继续循环执行 PROG: DB "S2 2 MODIFIED SERVO CAR" ;--------------------------------------- ;DELAY R5*10MS ;延迟子程序 DELAY: ;总延迟时间R5 * 10MS MOV R6,#50 D1:MOV R7,#100 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,DELAY RET ;------------------------------- LED_BL: ;工作指示灯闪烁 MOV R4,#2 L0:CPL WLED ;位反向 MOV R5,#5 ;延迟50MS CALL DELAY DJNZ R4,L0 SETB WLED ;LED OFF RET ;------------------------- ;伺服机刹车控制 PU_STOP: CLR P1.7 CLR P1.6 ;------------------------- ;伺服机反转控制 PU_BACK: SETB PUL ;送出高电平 MOV R4,#DEA A1:CALL DEL DJNZ R4,A1 CLR PUL ;送出低电平 ;延迟特定时间常数 MOV R4,#(200-DEA) A2:CALL DEL DJNZ R4,A2 RET ;------------------------- ;伺服机正转控制 PU_FOR:SETB PUL ;送出高电平 MOV R4,#DEB B1:CALL DEL DJNZ R4,B1 CLR PUL ;送出低电平 ;延迟特定时间常数 MOV R4,#(200-DEB) B2:CALL DEL DJNZ R4,B2 RET ;-------------------------- ; DEMO_FOR: ;伺服机正转展示 MOV R3,#TS ;重复送出脉冲 C1:CALL PU_FOR DJNZ R3,C1 RET ;--------------------------- DEMO_BACK: ;伺服机反转展示 MOV R3,#TS ;重复送出脉冲 E1:CALL PU_BACK DJNZ R3,E1 RET ;------------------------- ;DELAY R5*0.1ms ;0.1MS 延迟子程序 DEL: MOV R5,#1 DELAY1: MOV R6,#2 E2:MOV R7,#17 DJNZ R7,$ DJNZ R6,E2 DJNZ R5,DELAY1 RET ;---------------------- ;伺服机反转控制 PUR_BACK: SETB PUR ;送出高电平 MOV R4,#DEA G1: CALL DEL DJNZ R4,G1 CLR PUR ;送出低电平 ;延迟特定时间常数 MOV R4,#(200-DEA) G2:CALL DEL DJNZ R4,G2 RET ;---------------------- ; 伺服机正转展示 PUR_FOR: SETB PUR ;送出高电平 MOV R4,#DEB H1:CALL DEL DJNZ R4,H1 CLR PUR ;送出低电平 ;延迟特定时间常数 MOV R4,#(200-DEB) H2:CALL DEL DJNZ R4,H2 RET ;---------------------- GO_FOR: ;车子前进 MOV R3,#TS J1: CALL PU_FOR CALL PUR_BACK DJNZ R3,J1 LJMP DELAY CALL GO_STOP RET ;------------------------------ GO_BACK: ;车子后退 MOV R3,#TS S1: CALL PU_BACK CALL PUR_FOR DJNZ R3,S1 LJMP DELAY CALL GO_STOP RET ;------------------------- GO_LEFT: ;车子左转 MOV R3,#TS M1: CALL PU_BACK CALL PUR_BACK DJNZ R3,M1 LJMP DELAY CALL GO_STOP RET ;---------------------------- GO_RIGHT: ;车子右转 MOV R3,#TS Q1:CALL PU_FOR CALL PUR_FOR DJNZ R3,Q1 LJMP DELAY CALL GO_STOP RET ;---------------------------- GO_STOP: ;车体刹车 CALL PU_STOP RET END