📄 ͦ-
字号:
;直流电机PWM调速的单片机控制.asm
;*************************************************************
;CMD_ST indicate the rotate parameters.
;bit7: 1-motor1 rotate,0-motor1 stop. bit6: 1-CW,0-CCW,bit5~bit4 rotate mode.
;The same with bit3~bit0 for motor2.
;CMD_M1 indicate the degrees the motor1 rotate.
;CMD_M2 indicate the degrees the motor2 rotate.
;*************************************************************
RADDR EQU 07H
QADDR EQU 08H
CMD_ST EQU 31H
ORG 0000H
AJMP MAIN ;转主程序
ORG 000BH
AJMP INT_T0
ORG 0023H
AJMP INT_RT ;转接收中断
ORG 0030H
;TABLE: DB 00H,00H,0FH,07H,00H,00H,00H,00H,0F0H,00H,0FFH,0F7H,70H,00H,7FH,77H
TABLE: DB 00H,00H,0FH,07H,00H,00H,00H,00H,0F0H,00H,0FFH,0F7H,70H,00H,7FH,77H
MAIN: MOV SP,#60H
MOV SCON,#0D0H ;方式3,允许串口接收数据,接收为地址信号。Enable transmit and receive
MOV TMOD,#21H ;Counter0 in Timmer mode
MOV PCON,#80H ;Double the baud rate
MOV TL1,#0FDH ;Set the baud rate to 19.2Kbps
MOV TH1,#0FDH ;Load TH1 to TL1 automatically when Time is out.
SETB EA ;Enable the CPU interrupt
SETB ET0
MOV P1,#0H
MOV P3,#0FFH
MOV CMD_ST,#0H
MOV DPTR,#TABLE
MOV R5,#04H
MOV R6,#00H
MOV R7,#00H
SETB ES ;Enable the UART interrupt
SETB TR1 ;Laugh Timer 1
SETB SM2
JMP $
INT_T0:
ADDC A,#0H
INC R1
MOV A,R1
ANL A,#0FH
MOV R1,A
SUBB A,R5
JNC INT_T0_CONTIUNE
CLR ES
MOV A,CMD_ST
ANL A,#0FH
JZ Step_Over
ANL A,#03H
JZ Is_M2_Run
Is_M1_Run:
DJNZ R6,Is_M2_Run
ANL CMD_ST,#0CH
Is_M2_Run:
MOV A,CMD_ST
ANL A,#0CH
JZ Count_End
DJNZ R7,Count_End
ANL CMD_ST,#03H
Count_End:
MOV A,CMD_ST
ANL A,#0FH
JZ Step_Over
MOVC A,@A+DPTR
MOV P1,A
SETB ES
MOV TL0,#00H
MOV TH0,#0F0H
RETI
Step_Over:
MOV P1,#0H
CLR TR0
SETB ES
RETI
INT_T0_CONTIUNE:
ANL P1,#88H
MOV TL0,#00H
MOV TH0,#0F0H
RETI
INT_RT:
JBC TI,RETURN ;Check if the Send interrupt
CLR RI ;Clear the RI
JNB SM2,INSDATA ;Check if it is Data
MOV A,SBUF ;Is address,identify it.
CJNE A,#RADDR,INQUERY
CLR SM2 ;Clear the Address identifier
MOV P1,#0H
CLR ET0
MOV R0,#0H
RETURN:
RETI
INQUERY:
CJNE A,#QADDR,RETURN
CLR TB8
MOV SBUF,CMD_ST
SETB SM2
RETI
INSDATA:
CJNE R0,#0H,Second
First:
MOV A,SBUF
Is_M1_Cw:
CJNE A,#02H,Is_M1_CCw
Is_M1:
ANL CMD_ST,#0CH
ORL CMD_ST,A
MOV R0,#01H
RETI
Is_M1_CCw:
CJNE A,#03H,Is_M2_Cw
JMP Is_M1
Is_M2_Cw:
CJNE A,#08H,Is_M2_CCw
Is_M2:
ANL CMD_ST,#03H
ORL CMD_ST,A
MOV R0,#02H
RETI
Is_M2_CCw:
CJNE A,#0CH,Is_Speed
JMP Is_M2
Is_Speed:
CJNE A,#00H,RT_Finish
MOV R0,#03H
RETI
Second:
Is_M1_Angle:
CJNE R0,#01H,Is_M2_Angle
MOV R6,SBUF
CLR TB8
MOV SBUF,#RADDR
SETB TR0
JMP RT_Finish
Is_M2_Angle:
CJNE R0,#02H,Is_SpeedH
MOV R7,SBUF
CLR TB8
MOV SBUF,#RADDR
SETB TR0
JMP RT_Finish
Is_SpeedH:
CJNE R0,#03H,RT_Finish
MOV A,SBUF
ANL A,#0FH
MOV R5,A
CLR TB8
MOV SBUF,#RADDR
RT_Finish:
SETB SM2
SETB ET0
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -