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

📄 motorasm.asm

📁 单片机控制多台电机的程序,汇编写的,用的芯片是L298
💻 ASM
字号:

RIGHTKEY EQU P1.0
LEFTKEY EQU P1.1
RSTKEY EQU P1.2
ENA_1 EQU P0.0
ENB_1 EQU P0.1
ENA_2 EQU P0.4
ENB_2 EQU P0.5
MOTOR1 EQU P0.2
MOTOR2 EQU P0.3
MOTOR3 EQU P0.6
MOTOR4 EQU P0.7
SENSOR1 EQU P2.0
SENSOR2 EQU P2.1
SENSOR3 EQU P2.2
SENSOR4 EQU P2.3
SENSOR5 EQU P2.4
SENSOR6 EQU P2.5
RST EQU P3.0
READY_MOTOR1 EQU 20H.3
READY_MOTOR2 EQU 20H.4
READY_MOTOR3 EQU 20H.5
FLAG_RIGHT EQU 20H.1
FLAG_LEFT EQU 20H.2
FLAG_SENSOR1 EQU 21H.1
FLAG_SENSOR2 EQU 21H.2
FLAG_SENSOR3 EQU 21H.3
FLAG_SENSOR4 EQU 21H.4
FLAG_SENSOR5 EQU 21H.5
FLAG_SENSOR6 EQU 21H.6
FLAG_TIMER0 EQU 21H.7
FLAG_ERROR EQU 20H.6
RIGHTSENSOR EQU 30H
LEFTSENSOR EQU 31H
NUM EQU 32H


ORG 0000H
SJMP START
ORG 000BH
AJMP TIMER0
ORG 0030H
START:
   MOV P0,#00H
   MOV P1,#0FFH
   MOV P2,#0FFH
   CLR FLAG_RIGHT
   CLR FLAG_LEFT
   CLR FLAG_SENSOR1
   CLR FLAG_SENSOR2
   CLR FLAG_SENSOR3
   CLR FLAG_SENSOR4
   CLR FLAG_SENSOR5
   CLR FLAG_SENSOR6
   CLR FLAG_TIMER0
   CLR FLAG_ERROR
   CLR READY_MOTOR1
   CLR READY_MOTOR2
   CLR READY_MOTOR3

 ;  LCALL DELAY3S
 ;  MOV P0,#00H
   
   MOV RIGHTSENSOR,#00H
   MOV LEFTSENSOR,#00H
   MOV NUM,#00H
   MOV TMOD,#01H
   MOV TH0,#03CH
   MOV TL0,#0B0H
   SETB EA
   SETB ET0



J1:
   CPL RST
   
   JB RIGHTKEY,K1
   LCALL DELAY
   JNB RIGHTKEY,J2
   SJMP J1
K1:
   JB LEFTKEY,K2
   LCALL DELAY
   JNB LEFTKEY,J5
   SJMP J1
K2:
   JB RSTKEY,J1
   LCALL DELAY
   JB RSTKEY,J1
   LJMP J8


J2:
   SETB ENA_1
   SETB ENB_1
   SETB ENA_2
   SETB MOTOR1
   SETB MOTOR2
   SETB MOTOR3
   CLR FLAG_ERROR
   MOV RIGHTSENSOR,#00H
   CLR FLAG_TIMER0
   CPL RST
   LCALL DELAY3S
   LCALL READ_SENSOR
   JB FLAG_ERROR,J1
   CLR FLAG_RIGHT 
   CLR FLAG_LEFT
  ; CLR FLAG_TIMER0
   LCALL DELAY3S
   CLR FLAG_SENSOR1
   CLR FLAG_SENSOR2
   CLR FLAG_SENSOR3
   CLR FLAG_SENSOR4
   CLR FLAG_SENSOR5
   CLR FLAG_SENSOR6
   CLR MOTOR1
   CLR MOTOR2
   CLR MOTOR3
   SETB ENA_1
   SETB ENB_1
   SETB ENA_2
   LCALL DELAY3S
   CLR ENA_1
   CLR ENB_1
   CLR ENA_2
   SJMP J1


J5:
   SETB ENA_1
   SETB ENB_1
   SETB ENA_2
   CLR MOTOR1
   CLR MOTOR2
   CLR MOTOR3
   CLR FLAG_ERROR
   MOV LEFTSENSOR,#00H
   CLR FLAG_TIMER0
   CPL RST
   LCALL DELAY3S
   LCALL READ_SENSOR1
   JNB FLAG_ERROR,M1
   AJMP J1
M1:
   CLR FLAG_RIGHT 
   CLR FLAG_LEFT
;   CLR FLAG_TIMER0
   
   LCALL DELAY3S
   CLR FLAG_SENSOR1
   CLR FLAG_SENSOR2
   CLR FLAG_SENSOR3
   CLR FLAG_SENSOR4
   CLR FLAG_SENSOR5
   CLR FLAG_SENSOR6
   SETB MOTOR1
   SETB MOTOR2
   SETB MOTOR3
   SETB ENA_1
   SETB ENB_1
   SETB ENA_2
   LCALL DELAY3S
   CLR ENA_1
   CLR ENB_1
   CLR ENA_2
   LJMP J1





J8:
   SETB ENA_1
   SETB ENB_1
   SETB ENA_2
   CLR MOTOR1
   CLR MOTOR2
   CLR MOTOR3
L1:
   CPL RST
   JB SENSOR1,L2
   CLR ENA_1
   SETB READY_MOTOR1
   
L2:
   JB SENSOR2,L3
   CLR ENB_1
   SETB READY_MOTOR2
L3:
   JB SENSOR3,L4
   CLR ENA_2
   SETB READY_MOTOR3
L4:
   JNB READY_MOTOR1,L1
   JNB READY_MOTOR2,L1
   JNB READY_MOTOR3,L1
   CLR READY_MOTOR1
   CLR READY_MOTOR2
   CLR READY_MOTOR3
   LJMP J1


READ_SENSOR:
S0:
   JB FLAG_ERROR,S9
   CPL RST
   JB FLAG_SENSOR1,S1
   JB SENSOR1,S1
   CLR ENA_1
   SETB FLAG_SENSOR1
   INC RIGHTSENSOR
S1:
   JB FLAG_SENSOR2,S2
   JB SENSOR2,S2
   CLR ENB_1
   SETB FLAG_SENSOR2
   INC RIGHTSENSOR
S2:
   JB FLAG_SENSOR3,S6
   JB SENSOR3,S6
   CLR ENA_2
   SETB FLAG_SENSOR3
   INC RIGHTSENSOR 
S6: 
   MOV R4,RIGHTSENSOR
   CJNE R4,#01H,S5
   JB FLAG_TIMER0,S5
   SETB TR0
   SETB FLAG_TIMER0
S5:
   CJNE R4,#02H,S7
   JB FLAG_TIMER0,S7
   SETB TR0
   SETB FLAG_TIMER0
S7:
   CJNE R4,#03H,S8
   MOV RIGHTSENSOR,#00H
   SETB FLAG_RIGHT
S8:
   JB FLAG_RIGHT,S9
   SJMP S0
S9:
   CLR TR0
   RET

   
   
READ_SENSOR1:
S10:
   JB FLAG_ERROR,S19
   CPL RST   
   JB FLAG_SENSOR4,S14
   JB SENSOR4,S14
   CLR ENA_1
   SETB FLAG_SENSOR4
   INC LEFTSENSOR
S14:
   JB FLAG_SENSOR5,S15
   JB SENSOR5,S15
   CLR ENB_1
   SETB FLAG_SENSOR5
   INC LEFTSENSOR
S15:
   JB FLAG_SENSOR6,S16
   JB SENSOR6,S16
   CLR ENA_2
   SETB FLAG_SENSOR6
   INC LEFTSENSOR   
S16: 
   MOV R4,LEFTSENSOR
   CJNE R4,#01H,S11
   JB FLAG_TIMER0,S11
   SETB TR0
   SETB FLAG_TIMER0
S11:
   CJNE R4,#02H,S12
   JB FLAG_TIMER0,S12
   SETB TR0
   SETB FLAG_TIMER0
   
S12:
   CJNE R4,#03H,S17
   MOV LEFTSENSOR,#00H
   SETB FLAG_LEFT   
S17:
   JB FLAG_LEFT,S19
   SJMP S10
S19:
   CLR TR0
   RET   

   

TIMER0:
   CLR TR0
   MOV TH0,#03CH
   MOV TL0,#0B0H
   INC NUM
   MOV R0,NUM
   CJNE R0,#28H,D1
   MOV NUM,#00H
   CLR ENA_1
   CLR ENB_1
   CLR ENA_2
   CLR FLAG_SENSOR1
   CLR FLAG_SENSOR2
   CLR FLAG_SENSOR3
   CLR FLAG_SENSOR4
   CLR FLAG_SENSOR5
   CLR FLAG_SENSOR6
  ; CLR FLAG_TIMER0
   SETB FLAG_ERROR
   CPL P2.6
   SJMP D2
D1:
   SETB TR0
   CPL RST
D2:
   RETI   
   


DELAY:
          MOV R2,#50
   L10:
          MOV R3,#200
          DJNZ R3,$
          DJNZ R2,L10 
RET

DELAY3S:
          MOV R5,#100
   L11:  
          MOV R2,#150
   L12:
          MOV R3,#200
   L13:
       	  CPL RST
          DJNZ R3,L13
          DJNZ R2,L12
 	  DJNZ R5,L11
RET
         


   END

⌨️ 快捷键说明

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