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

📄 jiyi.asm

📁 基于51单片机的机器人巡线及路径记忆系统
💻 ASM
字号:
K1 EQU P3.0   ;左
K2 EQU P3.2   ;中
K3 EQU P3.1   ;右
HUOER EQU P3.4  ;车底霍尔原件
WLED EQU P1.2;工作灯
RWLED EQU P1.3 ;右转灯
LWLED EQU P1.1 ;左转灯
PULF EQU P1.7 ;左轮前进
PULB EQU P1.6  ;左轮后退
PURF EQU P1.4   ;右轮前进
PURB EQU P1.5  ;右轮后退
Q0 EQU 30H
Q1 EQU 31H
Q2 EQU 32H
Q3 EQU 33H
Q4 EQU 34H
Q5 EQU 35H
Q6 EQU 36H
Q7 EQU 37H

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0013H
LJMP INT1
ORG 001BH
LJMP INTT1
;;;;;;;;;;;;;;;;;;;;;;;;;
INT1: CPL WLED
CLR EA ;暂时关闭CPU的所有中断请求
MOV Q6,#10
SB: ACALL YS1;调用882微秒延时子程序
JB P3.3,EXIT;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
DJNZ Q6, SB;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
JNB P3.3, $ ;等待高电平避开9毫秒低电平引导脉冲
ACALL YS2 ;延时4.74毫秒避开4.5毫秒的结果码

JB P3.3,EXIT
MOV Q7,#16;忽略前26位系统识别码

JJJJA:JNB P3.3,$;等待地址码第一位的高电平信号
LCALL YS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.3;将P3.2引脚此时的电平状态0或1存入C中
JNC UUUA;如果为0就跳转到UUUA
LCALL YS3;检测到高电平1的话延时1毫秒等待脉冲高电平结束
UUUA: DJNZ Q7,JJJJA

MOV R1,#1AH ;设定1AH为起始RAM区
MOV Q2,#2;接收从1AH到1BH的2个内存,用于存放操作码和操作反码
PP: MOV Q3,#8;每组数据为8位

JJJJ: JNB P3.3,$;等待地址码第一位的高电平信号
LCALL YS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.3;将P3.2引脚此时的电平状态0或1存入C中
JNC UUU;如果为0就跳转到UUU
LCALL YS3;检测到高电平1的话延时1毫秒等待脉冲高电平结束
UUU: MOV A,@R1;将R1中地址的给A
RRC A;将C中的值0或1移入A中的最低位
MOV @R1,A;将A中的数暂时存放在R1数值的内存中
DJNZ Q3,JJJJ;接收满8位换一个内存
INC R1;对R1中的值加1,换下一个RAM
DJNZ Q2,PP ;接收完8位数据码和8位数据反码,存放在1AH/1BH中

MOV A,1AH
CPL A;对1AH取反后和1BH比较
CJNE A,1BH,EXIT;如果不等表示接收数据发生错误,放弃

EXIT: SETB EA ;允许中断
RETI ;退出解码子程序

YS1: MOV Q4,#20 ;延时子程序1,精确延时882微秒
D1: MOV Q5,#20;=863
DJNZ Q5,$
DJNZ Q4,D1
RET
YS2: MOV Q4,#10 ;延时子程序2,精确延时4740微秒
D2: MOV Q5,#235;1+(1+235*2+2)*10+2=4733
DJNZ Q5,$
DJNZ Q4,D2
RET

YS3: MOV Q4,#2;延时程序3,精确延时1000微秒
D3:MOV Q5,#248;1+(1+248*2+2)*2+2=1001
DJNZ Q5,$
DJNZ Q4,D3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTT0:MOV   TL0,#00H
      MOV   TH0,#0FCH
      CPL P1.0
      RETI
INTT1:JB 25H.4,ZZZ
      JNB 25H.4,JJJ
ZZZ:  INC R2
      MOV TL1,#00H
      MOV TH1,#00H
      JMP ZJ
JJJ:  DEC R2
      MOV TL1,#00H
      MOV TH1,#00H
ZJ:      RETI

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN:MOV DPTR,#0200H
     MOV R0,#0000H
     MOV A,#00H
   SETB PULF
   SETB PULB
   SETB PURF
   SETB PURB
   SETB EA
   SETB EX1
   SETB IT1
   SETB ET0
   SETB ET1
        MOV   TMOD,#11H
     MOV   TL0,#00H
     MOV   TH0,#0FCH
   SETB TR0
   LJMP PD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;路径重复;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SSS:SETB PULF
   SETB PULB
   SETB PURF
   SETB PURB
   LCALL DELAY1
    CLR EX1
    CLR P3.5
    CLR 25H.4
    SETB TR1
    MOV R0,#0000H
    MOV DPTR,#0200H
    JMP CCC
EER:INC DPTR
CCC:CPL WLED
    MOVX A,@R0
    LCALL DELAY1
    INC R0
    CJNE A,#0,CCC1
    LJMP PD
CCC1:CJNE A,#0FFH,CCC2
    LJMP PD
CCC2:CJNE A,#1,J1
     LJMP GO_R
 J1:
    CJNE A,#4,J2
    LJMP GO_L
 J2:
    CJNE A,#2,EER
    MOVX A,@DPTR
    LCALL DELAY1
    INC DPTR
    MOV R2,A
    CLR PURB
    CLR PULB
    ;SETB TR1
HH1:CJNE R2,#0,HH1
    ;CLR TR1
    LJMP CCC
GO_R:SETB RWLED
     SETB PURB
     MOVX A,@DPTR
     LCALL DELAY1
     LCALL DELAY1
     INC DPTR
     MOV R2,A

     ;SETB TR1
HH2: CJNE R2,#0,HH2
     ;CLR TR1
     CLR PURB
     CLR RWLED
     LJMP CCC
GO_L:SETB LWLED
     SETB PULB
     MOVX A,@DPTR
     LCALL DELAY1
     LCALL DELAY1
     INC DPTR
     MOV R2,A
     ;SETB PULB
     ;SETB TR1
HH3: CJNE R2,#0,HH3
     ;CLR TR1
     CLR PULB
     CLR LWLED
     LJMP CCC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;开头判断;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;PX:SETB PULF
;;   SETB PULB
;   SETB PURF
 ;  SETB PURB
 ;  SETB EX1
 ;  LCALL DELAY1
 ;  MOV 1AH,#00H
;PX1:   MOV A,1AH
;CJNE A,#01000110B,PX1  ;上
;LJMP W_FORWARD
PD:MOV 1AH,#00H
   SETB EX1
   SETB PULF
   SETB PULB
   SETB PURF
   SETB PURB
   LCALL DELAY1
PDD:
MOV A,1AH
CJNE A,#01000111B,PD1  ;左
LJMP W_LEFT
PD1:CJNE A,#00010101B,PD2   ;右
LJMP W_RIGHT

PD2:CJNE A,#01000110B,PD3   ;上
LJMP W_FORWARD
PD3:CJNE A,#00000011B,PD4    ;播放,暂停
LJMP SSS
PD4:CJNE A,#00010110B,PD5    ;下
LJMP W_STOP
PD5:CJNE A,#01010101B,PD6 ;确认
LJMP START1

PD6:AJMP PDD
W_LEFT:CLR RWLED
SETB LWLED
SETB PULB
LJMP PDD
W_RIGHT:CLR LWLED
SETB RWLED
SETB PURB
LJMP PDD
W_FORWARD:SETB RWLED
SETB LWLED
CLR PULB
CLR PURB
LJMP PDD
W_STOP:CLR RWLED
CLR LWLED
   SETB PULF
   SETB PULB
   SETB PURF
   SETB PURB
   LJMP PDD
;PW_LEFT1:SETB LWLED
;SETB PULB
;LJMP ZHONG1
;W_RIGHT1:SETB RWLED
;SETB PURB
;LJMP ZHONG1
;W_FORWARD1:CLR PULB
;CLR PURB
;LJMP ZHONG1
;W_STOP1:SETB PULF
 ;  SETB PULB
  ; SETB PURF
  ; SETB PURB
   ;LJMP ZHONG1
;ZHONG:SETB EX1
 ;  SETB PULF
  ; SETB PULB
   ;SETB PURF
   ;SETB PURB
   ;LCALL DELAY1
;LZHONG1:MOV A,1AH
;CJNE A,#01000111B,PD11  ;左
;LJMP W_LEFT1
;PD11:CJNE A,#00010101B,PD22   ;右
;LJMP W_RIGHT1
;PD22:CJNE A,#01000110B,PD33    ;上
;LJMP W_FORWARD1
;PD33:CJNE A,#00000011B,PD44    ;播放,暂停
;LJMP SSS
;PD44:CJNE A,#00010110B,PD55    ;下
;LJMP W_STOP1
;PD55:JMP ZHONG1
ZHONG:LJMP PD
;;;;;;;;;;;;;;;;;;;;;;
;;;;;;寻线;;;;;
;;;;;;;;;;;;;;;;;
START1:CLR EX1
   SETB PULF
   SETB PULB
   SETB PURF
   SETB PURB
CACHU1:
     CPL P1.2
     mov a,#00H
      MOVX @DPTR,A
     LCALL DELAY1
     INC DPTR
     MOVX @R0,A
     LCALL DELAY1
     INC R0
     CJNE R0,#00FFH,CACHU1
     MOV IP,#02H
     MOV DPTR,#0200H
     MOV R0,#0000H
   CLR WLED
   CLR RWLED
   CLR LWLED
   SETB 25H.4
   SETB WLED
   MOV TL1,#00H
   MOV TH1,#00H
   MOV R2,#00H
   MOV A,#2
   MOVX @R0,A
   INC R0
   SETB TR1
   CLR PURB
   CLR PULB
LOOP:
   CPL WLED
 ;  JNB HUOER,ZHONG
   JNB HUOER,ZHONG
   LCALL DELAY1
   JB K1,X1
   JNB K1,X2
   JMP LOOP
X1:
   JB K2,X3
   JNB K2,X4
   JMP LOOP
X2:
   JB K2,X5
   JNB K2,X6
   JMP LOOP
X3:
   ;JB K3,CH1
   JNB K3,GO_RIGHT      ;001右转
   JMP LOOP
X4:
   JNB K3,GO_RIGHT       ;011右转
   JMP LOOP
X5:
   JB K3,GO_LEFT         ;100左转
   JMP LOOP              ;101不可能
X6:
   JB K3,GO_LEFT         ;110,左转
   JMP LOOP
CH1:
  MOV A,R3
  CJNE A,#1,JMP1
  LJMP GO_RIGHT
 JMP1:
    MOV A,R3
    CJNE A,#4,JMP2
    LJMP GO_LEFT
 JMP2:
    JMP LOOP
GO_RIGHT:
   MOV R3,#1
   MOV A,#1
   MOVX @R0,A
   LCALL DELAY1
   INC R0
   MOV A,R2
   MOVX @DPTR,A
   LCALL DELAY1
   INC DPTR
   MOV R2,#0
   SETB RWLED
   SETB PURB
   MOV R4,#5
   H1:LCALL DELAY1
      DJNZ R4,H1
   JNB K3,$
   JB K2,$
   MOV A,#2
   MOVX @R0,A
   LCALL DELAY1
   INC R0
   MOV A,R2
   ;ADD A,R2
   MOVX @DPTR,A
   LCALL DELAY1
   INC DPTR
   MOV R2,#0
      CLR PURB
      CLR RWLED
   JMP LOOP
GO_LEFT:
   MOV R3,#4
     MOV A,#4
   MOVX @R0,A
   LCALL DELAY1
   INC R0
   MOV A,R2
   MOVX @DPTR,A
   LCALL DELAY1
   INC DPTR
   MOV R2,#0
   SETB LWLED
   SETB PULB
   MOV R4,#5
   G1:LCALL DELAY1
      DJNZ R4,G1
   JNB K1,$
   JB K2,$
   MOV A,#2
   MOVX @R0,A
   LCALL DELAY1
   INC R0
   MOV A,R2
   ;ADD A,R2
   MOVX @DPTR,A
   LCALL DELAY1
   INC DPTR
   MOV R2,#0
      CLR PULB
      CLR LWLED
   JMP LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DELAY1:     ;延迟
  MOV R6,#100
   E2:MOV R7,#140
      DJNZ R7,$
      DJNZ R6,E2
      RET
      END

⌨️ 快捷键说明

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