; eBASIC PIC16 Code Generator ; Copyright(c) 2004, Compubotics LLC ; www.Compubotics.com ORG 0x0 ; File: rover1.bas ; ' ; ' Test Rover Program ; ' (c)2004 Eric Lundquist ; ' Free to use for non-commercial purposes. ; ' ; ' Basic collision avoidance utilizing an IRPD infrared sensor. ; ' Controller is RC40. Robot is a CR01. All by CompuBotics. ; ' ; 'Pin assignments ; ' 0 = IRPD Left Sensor (PortB.0)/0=detect, 1=nothing detected ; ' 1 = Right servo (PortB.1)/Continuous Rotation Servo pulsed from 1.0ms-2.0ms ; ' 2 = Left Servo (PortB.2)/Continuous Rotation servo pulsed from 1.0ms-2.0ms ; ' 3 = IRPD Right Sensor (PortB.3)/0=detect, 1=nothing detected ; ' 4 = IRPD Range Select (PortB.4)/0=long range, 1=short range ; ' ; ' HISTORY: ; ' June 6, 2004 - Initial release - E.Lundquist ; ' ; #include "rc40.inc" ; ; ' Constant Declarations ; FOREVER CON 1 'Loop Control ; ; MS1 CON 500 'number of 2us ticks in 1ms ; MS15 CON 750 'number of 2us ticks in 1.5ms ; MS2 CON 1000 'number of 2us ticks in 2ms ; LEFT_IR CON 0 'pin number of left irpd sensor ; SERVO1 CON 1 'Pin number of Servo 1 ; SERVO2 CON 2 'Pin number of Servo 2 ; RIGHT_IR CON 3 'pin number of right irpd sensor ; RANGE CON 4 'pin number of ir range select 0=long 1=short) ; SPEED_INCREMENT CON ((MS2 - MS1) / 20) 'ticks per speed unit ; ; SERVO_SETTLE_TIME CON 20 'ms required between servo pulses ; ; ' Global Variable Declarations ; left_speed VAR WORD 'Current Speed of Left Servo (-10 to +10) ; right_speed VAR WORD 'Current Speed of Right Servo (-10 to +10) ; tmp VAR WORD 'Temp Holding Value ; tmp1 VAR WORD 'more temp space ; rpulse VAR WORD 'computed pulse length in 2us units ; lpulse VAR WORD ; rndseed VAR WORD 'Random number seed ; ; ' Main Program Start ; Main: nop clrf 0xa goto _startup ORG 0x4 retfie _STR001: retlw 0x54 retlw 0x65 retlw 0x73 retlw 0x74 retlw 0x20 retlw 0x52 retlw 0x6f retlw 0x76 retlw 0x65 retlw 0x72 retlw 0x20 retlw 0x76 retlw 0x31 retlw 0x2e retlw 0x31 retlw 0x0 _STR002: retlw 0x28 retlw 0x63 retlw 0x29 retlw 0x32 retlw 0x30 retlw 0x30 retlw 0x34 retlw 0x20 retlw 0x45 retlw 0x72 retlw 0x69 retlw 0x63 retlw 0x20 retlw 0x4c retlw 0x75 retlw 0x6e retlw 0x64 retlw 0x71 retlw 0x75 retlw 0x69 retlw 0x73 retlw 0x74 retlw 0x0 _STR003: retlw 0x77 retlw 0x65 retlw 0x69 retlw 0x72 retlw 0x64 retlw 0x20 retlw 0x62 retlw 0x75 retlw 0x6d retlw 0x70 retlw 0x20 retlw 0x76 retlw 0x61 retlw 0x6c retlw 0x3a retlw 0x0 _startup: movlw 0x83 bsf 0x3,5 bcf 0x3,6 movwf 0x81 bcf 0x3,5 bcf 0xb,5 bsf 0xb,6 movlw 0x31 movwf 0x10 movlw 0x60 movwf 0x78 call _uartSetup goto Main ; debug "Test Rover v1.1", CR, "(c)2004 Eric Lundquist", CR Main: movlw 0x5 movwf 0x70 movlw 0x0 movwf 0x71 call _dbgStr movlw 0xd call _uartTX movlw 0xa call _uartTX movlw 0x15 movwf 0x70 movlw 0x0 movwf 0x71 call _dbgStr movlw 0xd call _uartTX movlw 0xa call _uartTX ; OUTPUT SERVO1 'Right Servo Enable bcf 0x3,5 bcf 0x3,6 bsf 0x7a,1 bsf 0x3,5 bcf 0x86,1 ; OUTPUT SERVO2 'Left Servo Enable bcf 0x3,5 bsf 0x7a,2 bsf 0x3,5 bcf 0x86,2 ; OUTPUT RANGE ' 0=short range scan bcf 0x3,5 bsf 0x7a,4 bsf 0x3,5 bcf 0x86,4 ; HIGH RANGE 'set to short range scan bcf 0x3,5 bcf 0x3,6 bsf 0x6,4 bsf 0x3,5 bcf 0x86,4 bcf 0x3,5 bsf 0x7a,4 ; INPUT LEFT_IR 'Left IR sen bcf 0x7a,0 bsf 0x3,5 bsf 0x86,0 ; INPUT RIGHT_IR 'Right IR Sensor bcf 0x3,5 bcf 0x7a,3 bsf 0x3,5 bsf 0x86,3 ; ; ' Initialize Current Speed ; left_speed = 0 bcf 0x3,5 movlw 0x0 movwf 0x20 movlw 0x0 movwf 0x21 ; right_speed = 0 movlw 0x0 movwf 0x22 movlw 0x0 movwf 0x23 ; rndseed = TMR0 'set initial random number seed movf 0x1,0 movwf 0x70 clrf 0x71 movf 0x70,0 movwf 0x2c movf 0x71,0 movwf 0x2d ; ; while (FOREVER) ; 'Get bumpers into lower 2 bits ; tmp = PORTB.bit0 + (PORTB.bit3 << 1) _j000: movf 0x70,0 call _push movf 0x71,0 call _push btfss 0x6,3 goto _j002 movlw 0x1 movwf 0x70 movlw 0x0 movwf 0x71 goto _j003 _j002: clrf 0x70 clrf 0x71 _j003: movlw 0x1 movwf 0x72 movlw 0x0 movwf 0x73 call _shftl16a movf 0x70,0 movwf 0x72 movf 0x71,0 movwf 0x73 call _pop movwf 0x71 call _pop movwf 0x70 bcf 0x3,5 bcf 0x3,6 btfss 0x6,0 goto _j004 movlw 0x1 movwf 0x70 movlw 0x0 movwf 0x71 goto _j005 _j004: clrf 0x70 clrf 0x71 _j005: call _add16a bcf 0x3,5 bcf 0x3,6 movf 0x70,0 movwf 0x24 movf 0x71,0 movwf 0x25 ; '0 = both left and right detected ; '1 = right detected ; '2 = left detected ; '3 = all clear. full speed ahead! ; branch tmp, [FRONTBUMP, RIGHTBUMP, LEFTBUMP, NOBUMP] movf 0x24,0 movwf 0x70 movf 0x25,0 movwf 0x71 movlw 0x0 xorwf 0x70,0 btfsc 0x3,2 goto FRONTBUMP movlw 0x1 xorwf 0x70,0 btfsc 0x3,2 goto RIGHTBUMP movlw 0x2 xorwf 0x70,0 btfsc 0x3,2 goto LEFTBUMP movlw 0x3 xorwf 0x70,0 btfsc 0x3,2 goto NOBUMP ; debug "weird bump val:", hex tmp, CR movlw 0x2c movwf 0x70 movlw 0x0 movwf 0x71 call _dbgStr bcf 0x3,5 bcf 0x3,6 movf 0x24,0 movwf 0x70 movf 0x25,0 movwf 0x71 call _dbgHex movlw 0xd call _uartTX movlw 0xa call _uartTX ; goto ENDLOOP goto ENDLOOP ; NOBUMP: ; 'debug "." ; 'Full speed ahead! ; gosub INCLEFT NOBUMP: call INCLEFT ; gosub INCRIGHT call INCRIGHT ; goto ENDLOOP goto ENDLOOP ; RIGHTBUMP: ; 'debug "R" ; 'Turn left ; gosub DECLEFT RIGHTBUMP: call DECLEFT ; gosub INCRIGHT call INCRIGHT ; goto ENDLOOP goto ENDLOOP ; LEFTBUMP: ; 'debug "L" ; 'Turn right ; gosub DECRIGHT LEFTBUMP: call DECRIGHT ; gosub INCLEFT call INCLEFT ; goto ENDLOOP goto ENDLOOP ; FRONTBUMP: ; 'debug "F" ; 'Back up ; gosub DECRIGHT FRONTBUMP: call DECRIGHT ; gosub DECLEFT call DECLEFT ; gosub PULSEMOTORS call PULSEMOTORS ; 'Skew left or right randomly to get out of this ; RANDOM rndseed bcf 0x3,5 bcf 0x3,6 movf 0x2c,0 movwf 0x70 movf 0x2d,0 movwf 0x71 call _rand16 bcf 0x3,5 bcf 0x3,6 movf 0x70,0 movwf 0x2c movf 0x71,0 movwf 0x2d ; tmp = rndseed // 3 movf 0x2c,0 movwf 0x70 movf 0x2d,0 movwf 0x71 movlw 0x3 movwf 0x72 movlw 0x0 movwf 0x73 call _div16x bcf 0x3,5 bcf 0x3,6 movf 0x70,0 movwf 0x24 movf 0x71,0 movwf 0x25 ; branch tmp, [RIGHTBUMP, LEFTBUMP, FRONTBUMP] movf 0x24,0 movwf 0x70 movf 0x25,0 movwf 0x71 movlw 0x0 xorwf 0x70,0 btfsc 0x3,2 goto RIGHTBUMP movlw 0x1 xorwf 0x70,0 btfsc 0x3,2 goto LEFTBUMP movlw 0x2 xorwf 0x70,0 btfsc 0x3,2 goto FRONTBUMP ; ENDLOOP: ; gosub PULSEMOTORS ENDLOOP: call PULSEMOTORS ; wend goto _j000 ; ' ; ' Increase Speed of left motor ; INCLEFT: _j001: nop ; left_speed = left_speed + 1 INCLEFT: bcf 0x3,5 bcf 0x3,6 movf 0x20,0 movwf 0x70 movf 0x21,0 movwf 0x71 movlw 0x1 movwf 0x72 movlw 0x0 movwf 0x73 call _add16a bcf 0x3,5 bcf 0x3,6 movf 0x70,0 movwf 0x20 movf 0x71,0 movwf 0x21 ; 'Check if negative ; if left_speed > $8000 then return movf 0x20,0 movwf 0x70 movf 0x21,0 movwf 0x71 movlw 0x0 movwf 0x72 movlw 0x80 movwf 0x73 call _lcompgt16 clrf 0x72 clrf 0x73 call _comp16 btfsc 0x3,2 goto _j006 return ; 'Make sure we don't go faster than the max ; if left_speed > 10 then _j006: bcf 0x3,5 bcf 0x3,6 movf 0x20,0 movwf 0x70 movf 0x21,0 movwf 0x71 movlw 0xa movwf 0x72 movlw 0x0 movwf 0x73 call _lcompgt16 clrf 0x72 clrf 0x73 call _comp16 btfsc 0x3,2 goto _j007 ; left_speed = 10 bcf 0x3,5 bcf 0x3,6 movlw 0xa movwf 0x20 movlw 0x0 movwf 0x21 ; endif ; return _j007: return ; ' ; ' Increase speed of right motor ; INCRIGHT: ; right_speed = right_speed + 1 INCRIGHT: movf 0x22,0 movwf 0x70 movf 0x23,0 movwf 0x71 movlw 0x1 movwf 0x72 movlw 0x0 movwf 0x73 call _add16a bcf 0x3,5 bcf 0x3,6 movf 0x70,0 movwf 0x22 movf 0x71,0 movwf 0x23 ; 'Check if negative ; if right_speed > $8000 then return movf 0x22,0 movwf 0x70 movf 0x23,0 movwf 0x71 movlw 0x0 movwf 0x72 movlw 0x80 movwf 0x73 call _lcompgt16 clrf 0x72 clrf 0x73 call _comp16 btfsc 0x3,2 goto _j008 return ; 'Make sure we dont go faster than max ; if right_speed > 10 then _j008: bcf 0x3,5 bcf 0x3,6 movf 0x22,0 movwf 0x70 movf 0x23,0 movwf 0x71 movlw 0xa movwf 0x72 movlw 0x0 movwf 0x73 call _lcompgt16 clrf 0x72 clrf 0x73 call _comp16 btfsc 0x3,2 goto _j009 ; right_speed = 10 bcf 0x3,5 bcf 0x3,6 movlw 0xa movwf 0x22 movlw 0x0 movwf 0x23 ; endif ; return _j009: return ; ' ; ' Slow down left motor ; DECLEFT: ; left_speed = left_speed - 1 DECLEFT: movf 0x20,0 movwf 0x70 movf 0x21,0 movwf 0x71 movlw 0x1 movwf 0x72 movlw 0x0 movwf 0x73 call _sub16a bcf 0x3,5 bcf 0x3,6 movf 0x70,0 movwf 0x20 movf 0x71,0 movwf 0x21 ; if ABS(left_speed) > 10 then movlw 0xa movwf 0x72 movlw 0x0 movwf 0x73 call _lcompgt16 clrf 0x72 clrf 0x73 call _comp16 btfsc 0x3,2 goto _j010 ; left_speed = 0-10 bcf 0x3,5 bcf 0x3,6 movlw 0xf6 movwf 0x20 movlw 0xff movwf 0x21 ; endif ; return _j010: return ; ' ; ' Slow down right motor ; DECRIGHT: ; right_speed = right_speed - 1 DECRIGHT: movf 0x22,0 movwf 0x70 movf 0x23,0 movwf 0x71 movlw 0x1 movwf 0x72 movlw 0x0 movwf 0x73 call _sub16a bcf 0x3,5 bcf 0x3,6 movf 0x70,0 movwf 0x22 movf 0x71,0 movwf 0x23 ; if ABS(right_speed) > 10 then movlw 0xa movwf 0x72 movlw 0x0 movwf 0x73 call _lcompgt16 clrf 0x72 clrf 0x73 call _comp16 btfsc 0x3,2 goto _j011 ; right_speed = 0-10 bcf 0x3,5 bcf 0x3,6 movlw 0xf6 movwf 0x22 movlw 0xff movwf 0x23 ; endif ; return _j011: return ; ' ; ' Drive the motors according to speed values ; PULSEMOTORS: ; tmp1 = 0-right_speed 'invert right side so that +values mean forward PULSEMOTORS: movlw 0x0 movwf 0x70 movlw 0x0 movwf 0x71 movf 0x22,0 movwf 0x72 movf 0x23,0 movwf 0x73 call _sub16a bcf 0x3,5 bcf 0x3,6 movf 0x70,0 movwf 0x26 movf 0x71,0 movwf 0x27 ; 'Check for negative speed ; 'Compute number of 2us ticks ; if tmp1 > $8000 then movf 0x26,0 movwf 0x70 movf 0x27,0 movwf 0x71 movlw 0x0 movwf 0x72 movlw 0x80 movwf 0x73 call _lcompgt16 clrf 0x72 clrf 0x73 call _comp16 btfsc 0x3,2 goto _j012 ; rpulse = MS15 - ((0-tmp1) * SPEED_INCREMENT) movf 0x70,0 call _push movf 0x71,0 call _push movlw 0x0 movwf 0x70 movlw 0x0 movwf 0x71 bcf 0x3,5 bcf 0x3,6 movf 0x26,0 movwf 0x72 movf 0x27,0 movwf 0x73 call _sub16a movlw 0x19 movwf 0x72 movlw 0x0 movwf 0x73 call _mult16a movf 0x70,0 movwf 0x72 movf 0x71,0 movwf 0x73 call _pop movwf 0x71 call _pop movwf 0x70 movlw 0xee movwf 0x70 movlw 0x2 movwf 0x71 call _sub16a bcf 0x3,5 bcf 0x3,6 movf 0x70,0 movwf 0x28 movf 0x71,0 movwf 0x29 ; else goto _j013 ; rpulse = MS15 + (tmp1 * SPEED_INCREMENT) _j012: movf 0x70,0 call _push movf 0x71,0 call _push movf 0x26,0 movwf 0x70 movf 0x27,0 movwf 0x71 movlw 0x19 movwf 0x72 movlw 0x0 movwf 0x73 call _mult16a movf 0x70,0 movwf 0x72 movf 0x71,0 movwf 0x73 call _pop movwf 0x71 call _pop movwf 0x70 movlw 0xee movwf 0x70 movlw 0x2 movwf 0x71 call _add16a bcf 0x3,5 bcf 0x3,6 movf 0x70,0 movwf 0x28 movf 0x71,0 movwf 0x29 ; endif ; pulsout SERVO1, rpulse _j013: movlw 0x1 movwf 0x74 movlw 0x0 movwf 0x75 movf 0x28,0 movwf 0x70 movf 0x29,0 movwf 0x71 call _pulsout ; pause SERVO_SETTLE_TIME movlw 0x14 movwf 0x70 movlw 0x0 movwf 0x71 call _pause ; ; 'Check for negative(reverse) speed ; 'Compute number of 2us ticks ; if left_speed > $8000 then bcf 0x3,5 bcf 0x3,6 movf 0x20,0 movwf 0x70 movf 0x21,0 movwf 0x71 movlw 0x0 movwf 0x72 movlw 0x80 movwf 0x73 call _lcompgt16 clrf 0x72 clrf 0x73 call _comp16 btfsc 0x3,2 goto _j014 ; lpulse = MS15 - ((0-left_speed) * SPEED_INCREMENT) movf 0x70,0 call _push movf 0x71,0 call _push movlw 0x0 movwf 0x70 movlw 0x0 movwf 0x71 bcf 0x3,5 bcf 0x3,6 movf 0x20,0 movwf 0x72 movf 0x21,0 movwf 0x73 call _sub16a movlw 0x19 movwf 0x72 movlw 0x0 movwf 0x73 call _mult16a movf 0x70,0 movwf 0x72 movf 0x71,0 movwf 0x73 call _pop movwf 0x71 call _pop movwf 0x70 movlw 0xee movwf 0x70 movlw 0x2 movwf 0x71 call _sub16a bcf 0x3,5 bcf 0x3,6 movf 0x70,0 movwf 0x2a movf 0x71,0 movwf 0x2b ; else goto _j015 ; lpulse = MS15 + (left_speed * SPEED_INCREMENT) _j014: movf 0x70,0 call _push movf 0x71,0 call _push movf 0x20,0 movwf 0x70 movf 0x21,0 movwf 0x71 movlw 0x19 movwf 0x72 movlw 0x0 movwf 0x73 call _mult16a movf 0x70,0 movwf 0x72 movf 0x71,0 movwf 0x73 call _pop movwf 0x71 call _pop movwf 0x70 movlw 0xee movwf 0x70 movlw 0x2 movwf 0x71 call _add16a bcf 0x3,5 bcf 0x3,6 movf 0x70,0 movwf 0x2a movf 0x71,0 movwf 0x2b ; endif ; pulsout SERVO2, lpulse _j015: movlw 0x2 movwf 0x74 movlw 0x0 movwf 0x75 movf 0x2a,0 movwf 0x70 movf 0x2b,0 movwf 0x71 call _pulsout ; pause SERVO_SETTLE_TIME movlw 0x14 movwf 0x70 movlw 0x0 movwf 0x71 call _pause ; return return _uartSetup: movlw 0x67 bsf 0x3,5 bcf 0x3,6 movwf 0x99 bsf 0x98,2 bsf 0x98,5 bcf 0x3,5 bsf 0x18,4 bsf 0x18,7 return _uartTX: bcf 0x3,5 bcf 0x3,6 btfss 0xc,4 goto $-1 movwf 0x19 return _inc16: incfsz 0x70,0 decf 0x71,1 incf 0x71,1 movwf 0x70 iorwf 0x71,0 return _dbgStr: call _j016 iorlw 0x0 btfsc 0x3,2 return call _uartTX call _inc16 goto _dbgStr _j016: movf 0x71,0 movwf 0xa movf 0x70,0 movwf 0x2 _push: bcf 0xb,7 movwf 0x79 movf 0x78,0 movwf 0x4 movf 0x79,0 movwf 0x0 incf 0x78,1 bsf 0xb,7 return _shftl16a: bcf 0x3,0 movf 0x72,1 btfsc 0x3,2 return rlf 0x70,1 rlf 0x71,1 decfsz 0x72,1 goto _shftl16a return _pop: bcf 0xb,7 decf 0x78,1 movf 0x78,0 movwf 0x4 movf 0x0,0 bsf 0xb,7 return _add16a: movf 0x72,0 addwf 0x70,1 movf 0x73,0 btfsc 0x3,0 incf 0x73,0 addwf 0x71,1 return _dbgIHex: movlw 0x24 call _uartTX _dbgHex: movf 0x71,0 movwf 0x50 swapf 0x50,0 call _outhex movf 0x50,0 call _outhex movf 0x70,0 movwf 0x50 swapf 0x50,0 call _outhex movf 0x50,0 call _outhex return _outhex: andlw 0xf addlw 0xf6 btfsc 0x3,0 addlw 0x7 addlw 0xa addlw 0x30 call _uartTX return _add16x: movf 0x70,0 addwf 0x76,1 movf 0x71,0 btfsc 0x3,0 incf 0x71,0 addwf 0x77,1 return _MULT16A: clrf 0x76 clrf 0x77 clrf 0x74 clrf 0x75 movf 0x70,0 iorwf 0x71,0 btfss 0x3,2 goto _j017 retlw 0x0 _j017: movf 0x72,0 iorwf 0x73,0 btfsc 0x3,2 goto _j020 btfss 0x72,0 goto _j019 _j018: call _add16x btfss 0x3,0 goto _j019 rlf 0x74,1 rlf 0x75,1 _j019: bcf 0x3,0 rrf 0x73,1 rrf 0x72,1 bcf 0x3,0 rlf 0x70,1 rlf 0x71,1 goto _j017 _j020: movf 0x76,0 movwf 0x70 movf 0x77,0 movwf 0x71 retlw 0x0 _rand16: movlw 0xd movwf 0x72 clrf 0x73 call _mult16a movlw 0xeb movwf 0x72 movlw 0xc movwf 0x73 call _add16a return _shftl16: bcf 0x3,0 rlf 0x72,1 rlf 0x73,1 decfsz 0x74,1 goto _shftl16 return _shftr16: bcf 0x3,0 rrf 0x73,1 rrf 0x72,1 decfsz 0x74,1 goto _shftr16 return _sub16a: movf 0x72,0 subwf 0x70,1 movf 0x73,0 btfss 0x3,0 incf 0x73,0 subwf 0x71,1 return _div16x: clrf 0x76 clrf 0x77 movf 0x72,0 iorwf 0x73,0 btfsc 0x3,2 retlw 0xff movlw 0x1 movwf 0x74 movf 0x73,0 iorlw 0x0 btfss 0x3,2 goto _j021 movf 0x72,0 xorlw 0x1 btfss 0x3,2 goto _j021 movf 0x70,0 movwf 0x76 movf 0x71,0 movwf 0x77 clrf 0x70 clrf 0x71 retlw 0x0 _j021: movf 0x70,0 iorwf 0x71,0 btfss 0x3,2 goto _j022 retlw 0x0 _j022: btfsc 0x73,7 goto _j023 incf 0x74,1 movf 0x74,0 call _push movlw 0x1 movwf 0x74 call _shftl16 call _pop movwf 0x74 goto _j022 _j023: movf 0x72,0 call _push movf 0x73,0 call _push movf 0x76,0 movwf 0x72 movf 0x77,0 movwf 0x73 movf 0x74,0 call _push movlw 0x1 movwf 0x74 call _shftl16 call _pop movwf 0x74 movf 0x72,0 movwf 0x76 movf 0x73,0 movwf 0x77 call _pop movwf 0x73 call _pop movwf 0x72 call _sub16a btfsc 0x3,0 goto _j024 call _add16a goto _j025 _j024: bsf 0x76,0 _j025: decf 0x74,1 btfsc 0x3,2 retlw 0x0 movf 0x74,0 call _push movlw 0x1 movwf 0x74 call _shftr16 call _pop movwf 0x74 goto _j023 _comp16: movf 0x73,0 subwf 0x71,0 btfss 0x3,2 return movf 0x72,0 subwf 0x70,0 return _lcomplt16: call _comp16 btfss 0x3,0 goto _j026 _j027: clrf 0x70 clrf 0x71 return _j026: movlw 0x1 movwf 0x70 clrf 0x71 return _lcomplteq16: call _comp16 btfss 0x3,2 goto _lcomplt16 goto _j026 _lcompgteq16: call _comp16 btfss 0x3,2 goto _LCOMPGT16 goto _j026 _lcompgt16: call _comp16 btfsc 0x3,2 goto _j027 btfsc 0x3,0 goto _j026 goto _j027 _LCOMPNE16: call _comp16 btfsc 0x3,2 goto _j027 goto _j026 _LNOT16: clrf 0x70 clrf 0x71 call _comp16 btfss 0x3,2 goto _j026 goto _j027 _DCD: movf 0x70,0 movwf 0x72 movf 0x71,0 movwf 0x73 movlw 0x1 movwf 0x70 clrf 0x71 call _shftl16a return _low: call _DCD bsf 0x3,5 bcf 0x3,6 movf 0x70,0 iorwf 0x86,1 movf 0x71,0 iorwf 0x87,1 movlw 0xff xorwf 0x70,1 xorwf 0x71,1 movf 0x70,0 bcf 0x3,5 andwf 0x6,1 movf 0x71,0 andwf 0x7,1 movf 0x70,0 bsf 0x3,5 andwf 0x86,1 movf 0x70,0 andwf 0x87,1 return _high: call _DCD bcf 0x3,5 bcf 0x3,6 movf 0x70,0 iorwf 0x7a,1 movf 0x71,0 iorwf 0x7b,1 movf 0x70,0 iorwf 0x6,1 movf 0x71,0 iorwf 0x7,1 movlw 0xff xorwf 0x70,1 xorwf 0x71,1 movf 0x70,0 bsf 0x3,5 andwf 0x86,1 movf 0x71,0 andwf 0x87,1 return _pulsout: movf 0x70,0 movwf 0x72 movf 0x71,0 movwf 0x73 movlw 0xff movwf 0x70 movwf 0x71 call _sub16a movf 0x70,0 bcf 0x3,5 bcf 0x3,6 movwf 0xe movf 0x71,0 movwf 0xf movf 0x74,0 movwf 0x70 clrf 0x71 call _high bcf 0x3,5 bcf 0x3,6 bcf 0xc,0 btfss 0xc,0 goto $-1 bcf 0xc,0 movf 0x74,0 movwf 0x70 clrf 0x71 call _low return _dec16: decf 0x70,1 incfsz 0x70,0 incf 0x71,1 decf 0x71,1 movf 0x70,0 iorwf 0x71,0 return _pause: bcf 0x3,5 bcf 0x3,6 bcf 0xb,2 btfss 0xb,2 goto $-1 call _dec16 btfss 0x3,2 goto _pause return END ; end of code generation