⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 直流电机pwm调速的单片机控制.asm

📁 直流电机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 + -