Specifications
46
the robot has turned in either direction the backup subroutine is exited and the main
loop continues.
BACKUP ;LDAA #'K' ;SEND K THROUGH SERIAL PORT
;JSR TXBYTE ;(DEBUG)
;MOVB #$00,PWDTY0 ;|
;MOVB #$00,PWDTY2 ;|STOP MOTORS (DRIVING FORWARDS)
;JSR DELAY ;WAIT DELAY PERIOD
;MOVB #$A0,PWDTY1 ;|
;MOVB #$A0,PWDTY3 ;|REVERSE STRAIGHT
WFCLR BRCLR PORTA,$02,OUTL ;IF LEFT NOT SET BRA TO OUTL
;BRCLR PORTA,$04,OUTR ;IF RIGHT NOT SET BRA TO OUTR
BRA WFCLR ;IF L&R SET, BRA WFCLR. WAIT FOR L OR
R TO CLEAR
OUTL JSR TURNL ;TURN L WHEN L SENSOR IS CLEAR
OUTR JSR TURNR ;TURN R WHEN R SENSOR IS CLEAR
JSR DELAY
RTS ;RETURN TO MAIN LOOP
4.6.6 Delay
The delay code works with a loop inside a loop decrementing a value slowly. The inner
loop increments index register X by one for every loop, until it ‘rolls over’ from $FFFF
to $0000. When index register X reaches zero, the outer loop value (stored in index
register Y) decrements by one. Thus, the delay is the time it takes to increment X
$FFFF times, multiplied by the number initially stored into index register Y. To adjust
the delay time it is easiest to adjust the initial value in index register Y.
;*************DELAY*******************************************************
;CODE TO ADD A DELAY TO EASE THE SWITCHING OF MOTORS
;GIVES APPROX 2 SEC DELAY. CAN SHORTEN TIME BY INCREASING INITIAL Y
VALUE
DELAY LDY #$FFDC ;INITIAL VALUE FOR Y
DELA LDX #$0000 ;INITIAL CONDITION OF X
DEL INX ;INCREMENT X BY 1
BNE DEL ;IF Z NOT = 0 BRANCH TO DELAY
INY
BNE DELA
RTS










