I3 equ P1.7 I4 equ P1.6 I2 equ P1.5 I1 equ P1.4 EN equ P1.3 OU equ P3.5 OD equ P3.4 OR equ P3.3 OL equ P3.2 OT equ P3.1 OF equ P3.0 TLED equ P3.7 MOTMSK equ 0fh UPMSK equ 20h DNMSK equ 10h UDMSK equ 30h RTMSK equ 08h LFMSK equ 04h RUDMSK equ 38h LUDMSK equ 34h LRMSK equ 0ch UDLRMSK equ 3ch FTMSK equ 01h FRNT equ 0a8h BACK equ 58h RGHT equ 98h LFT equ 68h org 00h sjmp 30h org 30h mov P1,#00h mov P3,#7fh mov r7,#14h acall delay setb TLED sense: mov P3,#0ffh mov a,P3 anl a,#FTMSK cjne a,#01h,track sjmp sfn1 sjmp track sfn1: clr EN acall toggle sjmp sout track: clr EN mov a,P3 anl a,#LRMSK jz st01 mov a,P3 anl a,#LFMSK jz st02 mov a,P3 anl a,#RTMSK jz st03 mov a,P3 anl a,#UDMSK jz st04 mov a,P3 anl a,#RUDMSK jz st01 mov a,P3 anl a,#LUDMSK jz st01 mov a,P3 anl a,#UPMSK jz st01 mov a,P3 anl a,#DNMSK jz st05 sjmp notrck st01: acall forw1 sjmp sout st02: acall right sjmp sout st03: acall left sjmp sout st04: acall forw2 sjmp sout st05: acall revs sjmp sout notrck: acall revs sout: acall dlymot1 mov P3,#0ffh sjmp sense toggle: mov r6,#03h tg01: cpl TLED mov r7,#07h acall delay djnz r6,tg01 ret forw1: mov a,#MOTMSK anl a,P1 orl a,#FRNT mov P1,a acall dlymot1 ret forw2: mov a,#MOTMSK anl a,P1 orl a,#FRNT mov P1,a acall dlymot2 ret revs: mov a,#MOTMSK anl a,P1 orl a,#BACK mov P1,a acall dlymot1 ret left: mov a,#MOTMSK anl a,P1 orl a,#LFT mov P1,a acall dlymot2 ret right: mov a,#MOTMSK anl a,P1 orl a,#RGHT mov P1,a acall dlymot2 ret delay: nop ;Custom delay l1: acall dly50ms djnz r7,l1 ret dly50ms:mov r3,#0c3h ;50ms c350 l2: mov r4,#50h l3: djnz r4,l3 djnz r3,l2 ret dlymot1:mov r3,#60h ;Delay for motor driving slow -- 100us l4: nop djnz r3,l4 ret dlymot2:mov r3,#68h ;Delay for motor driving slow -- 125us l5: nop djnz r3,l5 ret end