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

📄 1.asm

📁 单片机控制减速电机
💻 ASM
字号:
	L_EN    BIT     P1.4            ;左主电机使能端
        R_EN    BIT     P1.5            ;右主电机使能端
        L_IN1   BIT     P1.0            ;左主电机输入1
        L_IN2   BIT     P1.1           ;左主电机输入2
        R_IN1   BIT     P1.2            ;右主电机输入1
        R_IN2   BIT     P1.3            ;右主电机输入2
       	JS1     EQU     40H
        JS2     EQU     41H
        JSP1    EQU     42H
        JSP2    EQU     43H
        
        G_EN    BIT	    P2.6
        S_EN    BIT     P2.7
                                         ;高电平节能
                    ;下降沿有效
;***************************************************************
        ORG     0000H
        LJMP    START
                        
        ORG     000BH                ;定时器入口
        LJMP    TOP				;
        
        ORG     0020H
;**************************主程序*******************************
START:  SETB    P3.2
        CLR     P2.5
        SETB    P3.7
        SETB    P1.7
        SETB     P2.3
        SETB     P2.1   
        MOV     P0,#0FFH                ;初始化
        MOV     P1,#00h
        clr     p2.7
        clr     P2.6
       
        MOV     P0,#0eH                ;3
        LCALL   DELAY1S
        MOV     P0,#26H                ;2
        LCALL   DELAY1S
        MOV     P0,#09fH                ;1
        LCALL   DELAY1S
        MOV     P0,#03H                ;0
        SETB    P2.5


MAIN:                             
        MOV     JS1,#0
        MOV     JS2,#1
	MOV     JSP1,#40
        MOV     JSP2,#40
	MOV     R1,#47
	MOV     R0,#2
	MOV     R2,#11
	MOV     R3,#10
	MOV     50H,#03H
	MOV     51H,#03H
        MOV     TMOD,#01H
        MOV     TL0,#0E0H               ;定时器装入初值
        MOV     TH0,#0B1H 
        SETB    EA                      ;开中断
        SETB    ET0                     ;开电机PWM调速中断
        SETB    TR0                     ;启动T0开始计数 
	LCALL   QIDONG 
		
		
		
;-----------------------------------电机PWM调速 与定时器中断程序----------------------------
TOP:     PUSH    PSW
         PUSH    ACC
         MOV     TH0,#0B1H
         MOV     TL0,#0E0H 

LOP:     LCALL   DP
QQ:      POP      ACC
         POP      PSW
         RETI 
DP:      MOV     A,50H
         MOV     P0,A
		 CLR    P2.6
		 ACALL   D1MS
		 SETB     P2.6
		 MOV     A,51H
		 MOV     P0,A
		 CLR    P2.7
		 LCALL   D1MS
		 SETB     P2.7
		 DJNZ    R1,PP
		 MOV     R1,#47
		 MOV     DPTR,#NUMTAB
                 MOV     A,JS1
		 INC     JS1
		 MOVC    A,@A+DPTR
		 MOV     50H,A
		 DJNZ    R2,PP
                 MOV     R2,#11
		 MOV     JS1,#0
		 MOV     A,JS2
		 INC     JS2
		 MOVC    A,@A+DPTR
		 MOV     51H,A
		 DJNZ    R3,PP
                 MOV     R3,#10
		 MOV     JS2,#0
PP:		 RET 
NUMTAB:
       DB 03h,9fh,26h,0eh,9ah,4ah,42h,1fh      
       DB 02h,0ah,03h

;********************* 启动程序******************************
QIDONG:  CLR     P3.4
         CLR     P3.5
	 CLR     P3.6
	 SETB    P3.7
	 LCALL   DLY1
	 CLR     P3.7
         
                          
         SETB    L_EN
         SETB    R_EN
	 LCALL   QIAN
	 LCALL   DELAY1S

;*********************** 前进寻迹程序 **************************
ADVANCE: LCALL   QIAN
         LCALL   DELAY1S
;         LCALL   DLY1
         MOV     A,P2
	 ORL     A,#0F8H
	 CJNE    A,#0F8H,L7
	 LJMP    OVER1        ;检测是否到站
L7:      
         LCALL   XUNJI
         LJMP    ADVANCE

;-----------------------------------------寻迹子程序----------------------------------------
XUNJI:   
         MOV     A,P2              ;读入传感器数据
         ORL     A,#0FAH
S1:      CJNE    A,#0FEH,S2              ;110 急速右转
         LCALL   YOU
         LCALL   DLY2
         LJMP    XUNJI

S2:      CJNE    A,#0FCH,S3              ;100 右转
         LCALL   YOU
         LCALL   DLY3
         LJMP    XUNJI

S3:      CJNE    A,#0FBH,S4              ;011 急速左转
         LCALL   ZUO
         LCALL   DLY2
         LJMP    XUNJI

S4:      CJNE    A,#0F9H,S5              ;001左转
         LCALL   ZUO
         LCALL   DLY3
         LJMP    XUNJI

S5:      CJNE    A,#0F8H,S6
         LJMP    OVER1
S6:      RET




;XUNJI1:   
;         MOV     A,P2              ;读入传感器数据
;         ORL     A,#0F8H
;S11:      CJNE    A,#0FEH,S12              ;110 急速右转
 ;        LCALL   ZUO
 ;        LCALL   DLY22
 ;        LJMP    XUNJI1

;S12:      CJNE    A,#0FCH,S13              ;100 右转
 ;        LCALL   ZUO
 ;        LCALL   DLY33
 ;        LJMP    XUNJI1 
;
;S13:      CJNE    A,#0FBH,S14              ;011 急速左转
;         LCALL   YOU
;         LCALL   DLY22
;         LJMP    XUNJI1
;
;S14:      CJNE    A,#0F9H,S15              ;001左转
;         LCALL   YOU
 ;        LCALL   DLY33
;         LJMP    XUNJI1	

;S15:      CJNE    A,#0F8H,S16
 ;        LJMP    OVER2
;S16:      RET
;----------------------------------------常用子程序---------------------------------------
HOU:     MOV     P1,#0F0H                ;小车后退子程序
         SETB    L_IN1
         SETB    R_IN1
         RET
QIAN:    MOV     P1,#0F0H                ;小车前进子程序
         SETB    L_IN2
         SETB    R_IN2
         RET
YOU:     MOV     P1,#0F0H                ;小车左转子程序
         SETB    L_IN2
         SETB    R_IN1
         RET
ZUO:     MOV     P1,#0F0H                ;小车右转子程序
         SETB    L_IN1
         SETB    R_IN2
         RET
;****************************停车倒水程序***************************
OVER1:   MOV     P1,#3FH                 ;	急停
         CLR     P3.2
         LCALL   DLY1
         SETB    P3.2
         
	 LCALL   DELAY1S
         LCALL   DELAY1S
	 LCALL   DELAY1S
         LCALL   DELAY1S
         
         LCALL  FANHUI 
;******************************************************************* 

DLY1:   MOV     R7,#0F8H      ;0.5ms
        DJNZ    R7,$
        RET

DLY2:   MOV     R4,#0      ;140ms
DLL1:   MOV     R5,#0
        DJNZ    R5,$
        DJNZ    R4,DLL1
        RET



DLY22:   
         MOV     R4,#200      ;140ms
DLL11:   MOV     R5,#200
        DJNZ    R5,$
        DJNZ    R4,DLL11
       
        RET
         
LB:      CLR     P2.5                   ;取反小喇叭(p2.5)
         LCALL   DLY4
         SETB    P2.5
         RET
  

DLY3:    MOV     R6,#100       ;20MS
DLQQ:     MOV     R5,#100
         DJNZ    R5,$
         DJNZ    R6,DLQQ
         RET

DLY33:   MOV     R6,#100       ;20MS
DLQQ3:    MOV     R5,#100
         DJNZ    R5,$
         DJNZ    R6,DLQQ3
         RET
       
        

DLY4:    MOV     R6,#0
DLQ:     MOV     R5,#0
         DJNZ    R5,$
         DJNZ    R6,DLQ
         RET

DELAY1S: MOV     R4,#100
Lo1:     MOV     R6,#50
Lo2:     MOV     R5,#80
         DJNZ    R5,$
         DJNZ    R6,Lo2
         DJNZ    R4,Lo1
         RET


D1MS:    
     MOV     R5,#0
     DJNZ    R5,$
     RET
             
         
;---------------------------------------后退返回程序---------------------------------------
FANHUI: CLR     P2.3
        CLR     P2.1
        CLR     P1.7
         SETB    P3.4
	 CLR     P3.5
	 CLR     P3.6
	 CLR     P3.7
	 LCALL   DLY1
	 SETB    P3.7            ;语音播报(倒车请注意)
        
                          ;驱动继电器,转换传感器
         LCALL   HOU
         LCALL   DELAY1S        
BACK:    LCALL   HOU
         
         
	
      
          
         MOV     A,P2
         ORL     A,#0F8H
         CJNE    A,#0F8H,L8           ;判断是否到起点       
         LJMP    OVER2
L8:      LCALL   XUNJI
         LJMP    BACK

OVER2:   DJNZ    R0,LL
         CLR     EA                   ;到起点后关总中断  
         MOV	 P0,#0
	 MOV	 P1,#0
	 setb    p2.5
	 CLR     P3.6                 ; 语音播报(任务完成 谢谢观赏)
         LCALL   DLY1
         SETB    P3.6  
         LJMP    HH	              ;全部任务完成 程序暂停
      
         				   

LL:      MOV     P1,#0F0H              ;停车接水
         LCALL   DELAY1S
         LCALL   DELAY1S
	 LCALL   DELAY1S
         LCALL   DELAY1S
         SETB    P2.3


         SETB    P2.1
         SETB    P1.7

	 LJMP    ADVANCE
HH:      CLR     P3.4
         CLR     P3.5
         SETB     P3.6
	 SETB    P3.7
	 LCALL   DLY1
	 CLR     P3.7
DD:      MOV     A,50H
         MOV     P0,A
         CLR     P2.6
         ACALL   D1MS
	 SETB    P2.6
         MOV     A,51H
	 MOV     P0,A
         CLR     P2.7
	 LCALL   D1MS
	 SETB    P2.7
	 LJMP    DD
         END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -