The Rock
This robot is controlled by a visual basic program (through the serial port), and can move in three different velocities by a pulse width modulated (PWM) signal generated by a PIC microcontroller (16F877).
The robot can be operated in two modes, "normal control" and "light tracker" modes. In the normal control mode, the robot can carry objects sized from 3 - 18 cm from place to another within 150 m. whereas in the light tracker mode, it follows the light in a dark room.
Many sensors were used, such as light sensors; tilt sensor, stall current sensing, battery level sensing, and some limit switches and touch sensors used in the hand. It can keep its speed constant when it goes on a hill (tilted) and automatically turns the light on when it becomes dark dark. Also to keep the IC's safe, it disconnects the current when it's stuck and the hand stops when holding something.
4 DC motors were used controlled by a PIC microcontroller 16F877 and 3 motor driver circuits.
It took about 4 months, and costs about 600$
The robot can be operated in two modes, "normal control" and "light tracker" modes. In the normal control mode, the robot can carry objects sized from 3 - 18 cm from place to another within 150 m. whereas in the light tracker mode, it follows the light in a dark room.
Many sensors were used, such as light sensors; tilt sensor, stall current sensing, battery level sensing, and some limit switches and touch sensors used in the hand. It can keep its speed constant when it goes on a hill (tilted) and automatically turns the light on when it becomes dark dark. Also to keep the IC's safe, it disconnects the current when it's stuck and the hand stops when holding something.
4 DC motors were used controlled by a PIC microcontroller 16F877 and 3 motor driver circuits.
It took about 4 months, and costs about 600$
Design the Project
at the initial stage, a design of the project was provided. mainly, defining the block diagram; see the figure.
A more detailed Circuit Diagram is required at this stage, however, to facilitate this, the main modules identified were:
1. Microcontroller
2. Sensors
3. Motors
4. Wireless circuit
5. PC program.
A 3d Design was done as well, see the figure.
A more detailed Circuit Diagram is required at this stage, however, to facilitate this, the main modules identified were:
1. Microcontroller
2. Sensors
3. Motors
4. Wireless circuit
5. PC program.
A 3d Design was done as well, see the figure.
Choose the Devices and Components
At this stage, the designer should choose the devices and components required to build the robot.
This includes: the wireless circuit (MAX232, LM331, FM transmitter and Receiver modules), motors (4 DC motors), motors drivers circuit (H-bridge), the microcontroller PIC (16F877), Battery, Voltage regulators (MC7805), Microswitches, Photoresistors, Tilt sensor ... etc.
It is important to understand the computability of these devices and how they work together.
This includes: the wireless circuit (MAX232, LM331, FM transmitter and Receiver modules), motors (4 DC motors), motors drivers circuit (H-bridge), the microcontroller PIC (16F877), Battery, Voltage regulators (MC7805), Microswitches, Photoresistors, Tilt sensor ... etc.
It is important to understand the computability of these devices and how they work together.
The Microcontroller
This step is the most important step. at the beginning, the codes that will be received and transmitted from the PIC should be identified.
Start connecting the components to the appropriate pins of the PIC, and program the microcontroller. This may require to build small circuits using the regulators, resistors, sensors ...etc.
Start connecting the components to the appropriate pins of the PIC, and program the microcontroller. This may require to build small circuits using the regulators, resistors, sensors ...etc.
Write the PC Program
The program was written on visual basic.
The communication was established through the RS-232. Using MSComm to send the data to the microcontroller by configuring the settings (port number, baud rate, parity number of data bits, stop bits).
I used 8-bit data with one stop bit and parity at a baud rate 9600 bps.
The communication was established through the RS-232. Using MSComm to send the data to the microcontroller by configuring the settings (port number, baud rate, parity number of data bits, stop bits).
I used 8-bit data with one stop bit and parity at a baud rate 9600 bps.
Build the Body
A good design of the body is important. Also choosing the wheel arrangement, see the figure.
he robot was built after insuring that the programs are working fine. This step can be done before programming also.
he robot was built after insuring that the programs are working fine. This step can be done before programming also.
Build the Wireless Circuit
Building the wireless circuit can be independent. At the initial stage, I have used a wire to connect the PC with the robot, and after finalizing the robot, the wireless circuit was integrated.
Integrate
This is the moment were we integrated our components, and tested the robot.
Microcontroller Program Code
;***************FINAL********************************
list p=16f877
include <P16F877.INC>
radix dec
idlocs "V"<<8 | "1" ; Version No.
config _CP_OFF&_PWRTE_OFF&_WDT_OFF&_XT_OSC
;********** main variable ***************************
cblock 0x20 ;start of bank 0 ram area
INPUT_VAR
L1
L2
X
SPEED11
SPEED12
SPEED21
SPEED22
MSTOP
LDET
LR1
LR2
endc
;********** start of the main program ***************
start
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X40
MOVWF ADCON1
MOVLW 0XFF ;PORT A IS I
MOVWF TRISA
MOVLW 0X00 ;PORT B IS O
MOVWF TRISB
MOVLW 0XF0 ;PORT C IS I/O
MOVWF TRISC
MOVLW 0XF0 ;PORT D IS I/O
MOVWF TRISD
MOVLW 0X07 ;PORT E IS I
MOVWF TRISE
BANKSEL OPTION_REG
BCF OPTION_REG,T0CS
BCF STATUS,RP1
BCF STATUS,RP0
;*******************************************
;*******************************************
WAIT
BCF PORTB,1
BCF PORTB,2
BCF PORTB,6
CALL PWM1OFF
CALL PWM2OFF
BCF PORTD,0
BCF PORTD,1
BCF PORTD,2
BCF PORTD,3
BTFSS LDET,0
BCF PORTB,7
MOVLW 0X00
MOVF MSTOP
MOVF LDET
BANKSEL INTCON
BCF INTCON,GIE
BANKSEL TXSTA
BSF TXSTA,BRGH
MOVLW 0X40
MOVWF SPBRG
BCF TXSTA,SYNC
BANKSEL RCSTA
BSF RCSTA,SPEN
BTFSC RCSTA,OERR
GOTO CLROE
BANKSEL PIE1
BSF PIE1,RCIE
BANKSEL RCSTA
BCF RCSTA,RX9
BSF RCSTA,CREN
WAIT1
BANKSEL PORTB
BSF PORTB,3
BSF PORTB,4
BANKSEL PIR1
BTFSS PIR1,RCIF
GOTO WAIT1
BCF MSTOP,0
BCF PORTB,3
BCF PORTB,4
CALL PWM1OFF
CALL PWM2OFF
CALL DARKLIGHT
BTFSC LDET,0
BSF PORTB,7
RXDATA
;BANKSEL RCSTA
;BTFSC RCSTA,OERR
;GOTO STOPS
CALL PWM1OFF
CALL PWM2OFF
CALL DARKLIGHT
BTFSC LDET,0
BSF PORTB,7
BANKSEL PIR1
BCF PIR1,RCIF
BANKSEL RCREG
MOVF RCREG,0
;*******************************************
;*******************************************
MOVWF INPUT_VAR
MOVLW 0X00
MOVWF RCREG
BCF STATUS,RP0
BCF STATUS,RP1
MOVF INPUT_VAR,0 ;STOP
SUBLW 0X53
BTFSC STATUS,Z
GOTO STOPS
MOVF INPUT_VAR,0 ;LIGHT ON
SUBLW 0X4E
BTFSC STATUS,Z
GOTO LON
MOVF INPUT_VAR,0 ;LIGHT OFF
SUBLW 0X51
BTFSC STATUS,Z
GOTO LOFF
MOVF INPUT_VAR,0 ;MOVE FORWARD SLOW
SUBLW 0X66
BTFSC STATUS,Z
GOTO FSLOW
MOVF INPUT_VAR,0 ;MOVE RIGHT SLOW
SUBLW 0X72
BTFSC STATUS,Z
GOTO RSLOW
MOVF INPUT_VAR,0 ;MOVE LEFT SLOW
SUBLW 0X6C
BTFSC STATUS,Z
GOTO LSLOW
MOVF INPUT_VAR,0 ;MOVE BACKWARD SLOW
SUBLW 0X62
BTFSC STATUS,Z
GOTO BSLOW
MOVF INPUT_VAR,0 ;MOVE FORWARD MEDIUM
SUBLW 0X46
BTFSC STATUS,Z
GOTO FMED
MOVF INPUT_VAR,0 ;MOVE RIGHT MEDIUM
SUBLW 0X52
BTFSC STATUS,Z
GOTO RMED
MOVF INPUT_VAR,0 ;MOVE LEFT MEDIUM
SUBLW 0X4C
BTFSC STATUS,Z
GOTO LMED
MOVF INPUT_VAR,0 ;MOVE BACKWARD MEDIUM
SUBLW 0X42
BTFSC STATUS,Z
GOTO BMED
MOVF INPUT_VAR,0 ;MOVE FORWARD FAST
SUBLW 0X55
BTFSC STATUS,Z
GOTO FFAST
MOVF INPUT_VAR,0 ;MOVE RIGHT FAST
SUBLW 0X57
BTFSC STATUS,Z
GOTO RFAST
MOVF INPUT_VAR,0 ;MOVE LEFT FAST
SUBLW 0X56
BTFSC STATUS,Z
GOTO LFAST
MOVF INPUT_VAR,0 ;MOVE BACKWARD FAST
SUBLW 0X58
BTFSC STATUS,Z
GOTO BFAST
MOVF INPUT_VAR,0 ;HAND CLOSE
SUBLW 0X43
BTFSC STATUS,Z
GOTO HCLOSE
MOVF INPUT_VAR,0 ;HAND OPEN
SUBLW 0X4F
BTFSC STATUS,Z
GOTO HOPEN
MOVF INPUT_VAR,0 ;HAND UP
SUBLW 0X75
BTFSC STATUS,Z
GOTO HUP
MOVF INPUT_VAR,0 ;HAND DOWN
SUBLW 0X64
BTFSC STATUS,Z
GOTO HDOWN
MOVF INPUT_VAR,0 ;LIGHT FOLOWER
SUBLW 0X54
BTFSC STATUS,Z
GOTO LFOLLOW
;*******************************************
;*******************************************
GOTO CLROE
FSLOW
;BANKSEL RCSTA
;BCF RCSTA,OERR
;BCF RCSTA,CREN
;NOP
;BSF RCSTA,CREN
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
;BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
NORMALSLOW
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X66
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X66
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BSF PORTB,1
BSF PORTB,2
REP3
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP3
GOTO CLROE
;*******************************************
LSLOW
BCF STATUS,RP0
BCF STATUS,RP1
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XCF
MOVWF SPEED21
MOVLW 0X66
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BCF PORTD,1
BSF PORTB,1
BCF PORTB,2
REP4
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP4
GOTO CLROE
;*******************************************
RSLOW
BCF STATUS,RP0
BCF STATUS,RP1
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XCF
MOVWF SPEED11
MOVLW 0X66
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BSF PORTD,1
BCF PORTB,1
BSF PORTB,2
REP35
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP35
GOTO CLROE
;*****************************
BSLOW
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XCF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XCF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BSF PORTD,1
BCF PORTB,1
BCF PORTB,2
REP5
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP5
GOTO CLROE
;*******************************************
FMED
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
NORMALMED
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BSF PORTB,1
BSF PORTB,2
CALL SDELAY
REP6
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
NOP
BTFSS PORTD,7
GOTO REP6
PLUSEMED
MOVLW 0XCF
MOVWF SPEED11
MOVLW 0XCC
MOVWF SPEED12
MOVLW 0XCF
MOVWF SPEED21
MOVLW 0XCC
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BSF PORTB,1
BSF PORTB,2
CALL SDELAY
REP7
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
BTFSS PORTD,7
GOTO NORMALMED
GOTO REP7
GOTO CLROE
;*******************************************
RMED
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X66
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BSF PORTD,1
BCF PORTB,1
BSF PORTB,2
REP8
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP8
GOTO CLROE
;*******************************************
LMED
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X66
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BCF PORTD,1
BSF PORTB,1
BCF PORTB,2
REP9
;CALL STALL1
;BTFSC MSTOP,0
;GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP9
GOTO CLROE
;*******************************************
BMED
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X7F
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X7F
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BSF PORTD,1
BCF PORTB,1
BCF PORTB,2
REP10
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP10
GOTO CLROE
;*******************************************
FFAST
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
BSF MSTOP,4
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XEF
MOVWF SPEED11
MOVLW 0X7F
MOVWF SPEED12
MOVLW 0XEF
MOVWF SPEED21
MOVLW 0X7F
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BSF PORTB,1
BSF PORTB,2
CALL SDELAY
NORMALFAST
MOVLW 0XCF
MOVWF SPEED11
MOVLW 0XCC
MOVWF SPEED12
MOVLW 0XCF
MOVWF SPEED21
MOVLW 0XCC
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BTFSC LDET,0
BSF PORTB,7
BSF PORTB,1
BSF PORTB,2
REP11
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
NOP
BTFSS PORTD,7
GOTO REP11
PLUSEFAST
MOVLW 0XCF
MOVWF SPEED11
MOVLW 0XFF
MOVWF SPEED12
MOVLW 0XCF
MOVWF SPEED21
MOVLW 0XFF
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BSF PORTB,1
BSF PORTB,2
REP12
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
BTFSS PORTD,7
GOTO NORMALFAST
GOTO REP12
GOTO CLROE
;*******************************************
RFAST
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X66
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BSF PORTD,1
BCF PORTB,1
BSF PORTB,2
REP13
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP13
GOTO CLROE
;*******************************************
LFAST
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X66
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BCF PORTD,1
BSF PORTB,1
BCF PORTB,2
CALL SDELAY
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X4C
MOVWF SPEED12
MOVLW 0XEF
MOVWF SPEED21
MOVLW 0XB3
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BCF PORTD,1
BSF PORTB,1
BCF PORTB,2
REP14
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP14
GOTO CLROE
;*******************************************
BFAST
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XDF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XDF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BSF PORTD,1
BCF PORTB,1
BCF PORTB,2
CALL SDELAY
MOVLW 0XEF
MOVWF SPEED11
MOVLW 0X66
MOVWF SPEED12
MOVLW 0XEF
MOVWF SPEED21
MOVLW 0X66
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BSF PORTD,1
BCF PORTB,1
BCF PORTB,2
REP15
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP15
GOTO CLROE
;*******************************************
HCLOSE
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
BTFSC PORTD,5
GOTO STOPS
BTFSC PORTD,6
GOTO STOPS
BSF PORTD,2
BCF PORTD,3
REP16
BTFSC PORTD,5
GOTO STOPS
BTFSC PORTD,6
GOTO STOPS
CALL SDELAY
CALL STALL2
BTFSC MSTOP,2
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP16
GOTO CLROE
;*******************************************
HOPEN
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
BTFSC PORTD,4
GOTO STOPS
BCF PORTD,2
BSF PORTD,3
REP17
BTFSC PORTD,4
GOTO STOPS
CALL SDELAY
CALL STALL2
BTFSC MSTOP,2
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP17
GOTO CLROE
;*******************************************
HUP
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
BTFSC PORTC,4
GOTO STOPS
BCF PORTC,0
BSF PORTC,3
REP18
BTFSC PORTC,4
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP18
GOTO CLROE
;*******************************************
HDOWN
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
BTFSC PORTC,5
GOTO STOPS
BSF PORTC,0
BCF PORTC,3
REP19
BTFSC PORTC,5
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP19
GOTO CLROE
;*******************************************
LON
BSF PORTB,7
BSF LDET,0
GOTO CLROE
;*******************************************
LOFF
BCF PORTB,7
BCF LDET,0
GOTO CLROE
;*******************************************
LFOLLOW
BCF STATUS,RP0
BCF STATUS,RP1
BCF PORTB,1
BCF PORTB,2
BCF PORTB,6
BCF PORTB,7
CALL PWM1OFF
CALL PWM2OFF
BCF PORTD,0
BCF PORTD,1
BCF PORTD,2
BCF PORTD,3
BSF MSTOP,6
REPLF
;BANKSEL OPTION_REG
;BSF OPTION_REG,3
;BSF OPTION_REG,3
;BSF OPTION_REG,3
;BSF OPTION_REG,3
;CLRFWDT
BCF STATUS,RP0
BCF STATUS,RP1
;BANKSEL INTCON
;BCF INTCON,T0IE
;BCF INTCON,T0IF
;BANKSEL PIE1
;BCF PIE1,6
;BCF PIE1,0
;BANKSEL INTCON
;BCF INTCON,GIE
BANKSEL PCON
BCF PCON,0
BCF PCON,1
NOP
BSF PCON,0
BSF PCON,1
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
CALL SDELAY
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSC STATUS,Z
GOTO FRONT
CALL SDELAY
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSC STATUS,C
GOTO LR2G
LR1G
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X66
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BCF PORTD,1
BSF PORTB,1
BCF PORTB,2
LR1GREP
;CALL STALL1
;BTFSC MSTOP,0
;GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSC STATUS,Z
GOTO REPLF
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSS STATUS,C
GOTO LR1GREP
GOTO REPLF
LR2G
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X66
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BSF PORTD,1
BCF PORTB,1
BSF PORTB,2
LR2GREP
;CALL STALL1
;BTFSC MSTOP,0
;GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSC STATUS,Z
GOTO REPLF
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSC STATUS,C
GOTO LR2GREP
GOTO REPLF
FRONT
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BSF PORTB,1
BSF PORTB,2
CALL SDELAY
FROREP
;CALL STALL1
;BTFSC MSTOP,0
;GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
;CALL LDIN
;BTFSC MSTOP,3
;GOTO STOPS
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSC STATUS,Z
GOTO FROREP
GOTO REPLF
GOTO CLROE
;*******************************************
STOPS
BTFSS MSTOP,4
GOTO STOPA
MOVLW 0XCF
MOVWF SPEED11
MOVLW 0XB3
MOVWF SPEED12
MOVLW 0XCF
MOVWF SPEED21
MOVLW 0XB3
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
CALL SDELAY
STOPA
BCF STATUS,RP0
BCF STATUS,RP1
BCF PORTB,1
BCF PORTB,2
BCF PORTB,6
BTFSS LDET,0
;BCF PORTB,7
BCF PORTC,0
BCF PORTC,3
CALL PWM1OFF
CALL PWM2OFF
BCF PORTD,0
BCF PORTD,1
BCF PORTD,2
BCF PORTD,3
MOVLW 0X00
MOVWF MSTOP
;*******************************************
CLROE
BANKSEL RCSTA
BCF RCSTA,CREN
BCF RCSTA,FERR
BCF RCSTA,OERR
BSF RCSTA,CREN
BSF INTCON,GIE
BSF INTCON,PEIE
GOTO WAIT1
;*******************************************
;*******************************************
;*******************************************
STALL1
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BANKSEL ADCON0
BCF ADCON0,3
BCF ADCON0,4
BCF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,0
SUBLW 0X70
BTFSS STATUS,C
BSF MSTOP,0
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
STALL2
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BANKSEL ADCON0
BSF ADCON0,3
BCF ADCON0,4
BCF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,0
SUBLW 0X40
BTFSS STATUS,C
BSF MSTOP,2
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
BUTTLEVEL
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BANKSEL ADCON0
BCF ADCON0,3
BCF ADCON0,4
BSF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,0
SUBLW 0X7F
BTFSS STATUS,C
GOTO BL1
GOTO BL2
BL1
BSF MSTOP,1
BSF PORTB,6
BL2
RETURN
DARKLIGHT
BCF STATUS,RP0
BCF STATUS,RP1
BTFSC LDET,0
GOTO RETFDL
BANKSEL ADCON0
BCF ADCON0,3
BSF ADCON0,4
BCF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,0
SUBLW 0XEE
BTFSS STATUS,C
BSF PORTB,7
RETFDL
RETURN
CONVERT
MOVLW 0X49
BANKSEL ADCON1
MOVWF ADCON1
BANKSEL ADCON0
BCF ADCON0,7
BSF ADCON0,6
BSF ADCON0,0
BSF ADCON0,GO
WAITADC
BTFSC ADCON0,GO
GOTO WAITADC
BCF STATUS,RP1
BCF STATUS,RP0
RETURN
PWM1ON
BANKSEL PR2
MOVLW 0XFF
MOVWF PR2
BCF STATUS,RP0
BCF STATUS,RP1
MOVF SPEED11,0
MOVWF CCP1CON
MOVF SPEED12,0
MOVWF CCPR1L
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW 0XF0
MOVWF TRISC
BCF STATUS,RP0
BCF STATUS,RP1
BCF T2CON,T2CKPS1
BCF T2CON,T2CKPS0
BSF T2CON,TMR2ON
BSF CCP1CON,2
BSF CCP1CON,3
RETURN
PWM2ON
BANKSEL PR2
MOVLW 0XFF
MOVWF PR2
BCF STATUS,RP0
BCF STATUS,RP1
MOVF SPEED21,0
MOVWF CCP2CON
MOVF SPEED22,0
MOVWF CCPR2L
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW 0XF0
MOVWF TRISC
BCF STATUS,RP0
BCF STATUS,RP1
BCF T2CON,T2CKPS1
BCF T2CON,T2CKPS0
BSF T2CON,TMR2ON
BSF CCP2CON,2
BSF CCP2CON,3
RETURN
PWM1OFF
BCF CCP1CON,2
BCF CCP1CON,3
BSF T2CON,T2CKPS1
BSF T2CON,T2CKPS0
BCF T2CON,TMR2ON
MOVLW 0X00
MOVWF CCP1CON
MOVLW 0X00
MOVWF CCPR1L
BANKSEL PR2
MOVLW 0X00
MOVWF PR2
BCF STATUS,RP1
BCF STATUS,RP0
RETURN
PWM2OFF
BCF CCP2CON,2
BCF CCP2CON,3
BSF T2CON,T2CKPS1
BSF T2CON,T2CKPS0
BCF T2CON,TMR2ON
MOVLW 0X00
MOVWF CCP2CON
MOVLW 0X00
MOVWF CCPR2L
BANKSEL PR2
MOVLW 0X00
MOVWF PR2
BCF STATUS,RP1
BCF STATUS,RP0
RETURN
LFC1
BANKSEL ADCON0
BSF ADCON0,3
BCF ADCON0,4
BSF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,W
ANDLW 0XF0
MOVWF LR1
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
LFC2
BANKSEL ADCON0
BCF ADCON0,3
BSF ADCON0,4
BSF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,0
ANDLW 0XF0
MOVWF LR2
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
LDIN
BANKSEL ADCON0
BCF ADCON0,3
BSF ADCON0,4
BCF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,0
SUBLW 0X4C
BTFSC STATUS,C
GOTO COMP4
BSF MSTOP,3
COMP4
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
SDELAY
CLRF L2
XL3
CLRF L1
XL2
CLRF TMR0
XL1
MOVLW 0XFF
SUBWF TMR0,W
BTFSS STATUS,C
GOTO XL1
MOVLW 0X20
INCF L1
SUBWF L1,W
BTFSS STATUS,C
GOTO XL2
MOVLW 0X10
INCF L2
SUBWF L2,W
BTFSS STATUS,C
GOTO XL3
RETURN
NOP
NOP
END
list p=16f877
include <P16F877.INC>
radix dec
idlocs "V"<<8 | "1" ; Version No.
config _CP_OFF&_PWRTE_OFF&_WDT_OFF&_XT_OSC
;********** main variable ***************************
cblock 0x20 ;start of bank 0 ram area
INPUT_VAR
L1
L2
X
SPEED11
SPEED12
SPEED21
SPEED22
MSTOP
LDET
LR1
LR2
endc
;********** start of the main program ***************
start
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X40
MOVWF ADCON1
MOVLW 0XFF ;PORT A IS I
MOVWF TRISA
MOVLW 0X00 ;PORT B IS O
MOVWF TRISB
MOVLW 0XF0 ;PORT C IS I/O
MOVWF TRISC
MOVLW 0XF0 ;PORT D IS I/O
MOVWF TRISD
MOVLW 0X07 ;PORT E IS I
MOVWF TRISE
BANKSEL OPTION_REG
BCF OPTION_REG,T0CS
BCF STATUS,RP1
BCF STATUS,RP0
;*******************************************
;*******************************************
WAIT
BCF PORTB,1
BCF PORTB,2
BCF PORTB,6
CALL PWM1OFF
CALL PWM2OFF
BCF PORTD,0
BCF PORTD,1
BCF PORTD,2
BCF PORTD,3
BTFSS LDET,0
BCF PORTB,7
MOVLW 0X00
MOVF MSTOP
MOVF LDET
BANKSEL INTCON
BCF INTCON,GIE
BANKSEL TXSTA
BSF TXSTA,BRGH
MOVLW 0X40
MOVWF SPBRG
BCF TXSTA,SYNC
BANKSEL RCSTA
BSF RCSTA,SPEN
BTFSC RCSTA,OERR
GOTO CLROE
BANKSEL PIE1
BSF PIE1,RCIE
BANKSEL RCSTA
BCF RCSTA,RX9
BSF RCSTA,CREN
WAIT1
BANKSEL PORTB
BSF PORTB,3
BSF PORTB,4
BANKSEL PIR1
BTFSS PIR1,RCIF
GOTO WAIT1
BCF MSTOP,0
BCF PORTB,3
BCF PORTB,4
CALL PWM1OFF
CALL PWM2OFF
CALL DARKLIGHT
BTFSC LDET,0
BSF PORTB,7
RXDATA
;BANKSEL RCSTA
;BTFSC RCSTA,OERR
;GOTO STOPS
CALL PWM1OFF
CALL PWM2OFF
CALL DARKLIGHT
BTFSC LDET,0
BSF PORTB,7
BANKSEL PIR1
BCF PIR1,RCIF
BANKSEL RCREG
MOVF RCREG,0
;*******************************************
;*******************************************
MOVWF INPUT_VAR
MOVLW 0X00
MOVWF RCREG
BCF STATUS,RP0
BCF STATUS,RP1
MOVF INPUT_VAR,0 ;STOP
SUBLW 0X53
BTFSC STATUS,Z
GOTO STOPS
MOVF INPUT_VAR,0 ;LIGHT ON
SUBLW 0X4E
BTFSC STATUS,Z
GOTO LON
MOVF INPUT_VAR,0 ;LIGHT OFF
SUBLW 0X51
BTFSC STATUS,Z
GOTO LOFF
MOVF INPUT_VAR,0 ;MOVE FORWARD SLOW
SUBLW 0X66
BTFSC STATUS,Z
GOTO FSLOW
MOVF INPUT_VAR,0 ;MOVE RIGHT SLOW
SUBLW 0X72
BTFSC STATUS,Z
GOTO RSLOW
MOVF INPUT_VAR,0 ;MOVE LEFT SLOW
SUBLW 0X6C
BTFSC STATUS,Z
GOTO LSLOW
MOVF INPUT_VAR,0 ;MOVE BACKWARD SLOW
SUBLW 0X62
BTFSC STATUS,Z
GOTO BSLOW
MOVF INPUT_VAR,0 ;MOVE FORWARD MEDIUM
SUBLW 0X46
BTFSC STATUS,Z
GOTO FMED
MOVF INPUT_VAR,0 ;MOVE RIGHT MEDIUM
SUBLW 0X52
BTFSC STATUS,Z
GOTO RMED
MOVF INPUT_VAR,0 ;MOVE LEFT MEDIUM
SUBLW 0X4C
BTFSC STATUS,Z
GOTO LMED
MOVF INPUT_VAR,0 ;MOVE BACKWARD MEDIUM
SUBLW 0X42
BTFSC STATUS,Z
GOTO BMED
MOVF INPUT_VAR,0 ;MOVE FORWARD FAST
SUBLW 0X55
BTFSC STATUS,Z
GOTO FFAST
MOVF INPUT_VAR,0 ;MOVE RIGHT FAST
SUBLW 0X57
BTFSC STATUS,Z
GOTO RFAST
MOVF INPUT_VAR,0 ;MOVE LEFT FAST
SUBLW 0X56
BTFSC STATUS,Z
GOTO LFAST
MOVF INPUT_VAR,0 ;MOVE BACKWARD FAST
SUBLW 0X58
BTFSC STATUS,Z
GOTO BFAST
MOVF INPUT_VAR,0 ;HAND CLOSE
SUBLW 0X43
BTFSC STATUS,Z
GOTO HCLOSE
MOVF INPUT_VAR,0 ;HAND OPEN
SUBLW 0X4F
BTFSC STATUS,Z
GOTO HOPEN
MOVF INPUT_VAR,0 ;HAND UP
SUBLW 0X75
BTFSC STATUS,Z
GOTO HUP
MOVF INPUT_VAR,0 ;HAND DOWN
SUBLW 0X64
BTFSC STATUS,Z
GOTO HDOWN
MOVF INPUT_VAR,0 ;LIGHT FOLOWER
SUBLW 0X54
BTFSC STATUS,Z
GOTO LFOLLOW
;*******************************************
;*******************************************
GOTO CLROE
FSLOW
;BANKSEL RCSTA
;BCF RCSTA,OERR
;BCF RCSTA,CREN
;NOP
;BSF RCSTA,CREN
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
;BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
NORMALSLOW
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X66
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X66
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BSF PORTB,1
BSF PORTB,2
REP3
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP3
GOTO CLROE
;*******************************************
LSLOW
BCF STATUS,RP0
BCF STATUS,RP1
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XCF
MOVWF SPEED21
MOVLW 0X66
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BCF PORTD,1
BSF PORTB,1
BCF PORTB,2
REP4
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP4
GOTO CLROE
;*******************************************
RSLOW
BCF STATUS,RP0
BCF STATUS,RP1
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XCF
MOVWF SPEED11
MOVLW 0X66
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BSF PORTD,1
BCF PORTB,1
BSF PORTB,2
REP35
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP35
GOTO CLROE
;*****************************
BSLOW
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XCF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XCF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BSF PORTD,1
BCF PORTB,1
BCF PORTB,2
REP5
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP5
GOTO CLROE
;*******************************************
FMED
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
NORMALMED
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BSF PORTB,1
BSF PORTB,2
CALL SDELAY
REP6
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
NOP
BTFSS PORTD,7
GOTO REP6
PLUSEMED
MOVLW 0XCF
MOVWF SPEED11
MOVLW 0XCC
MOVWF SPEED12
MOVLW 0XCF
MOVWF SPEED21
MOVLW 0XCC
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BSF PORTB,1
BSF PORTB,2
CALL SDELAY
REP7
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
BTFSS PORTD,7
GOTO NORMALMED
GOTO REP7
GOTO CLROE
;*******************************************
RMED
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X66
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BSF PORTD,1
BCF PORTB,1
BSF PORTB,2
REP8
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP8
GOTO CLROE
;*******************************************
LMED
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X66
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BCF PORTD,1
BSF PORTB,1
BCF PORTB,2
REP9
;CALL STALL1
;BTFSC MSTOP,0
;GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP9
GOTO CLROE
;*******************************************
BMED
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X7F
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X7F
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BSF PORTD,1
BCF PORTB,1
BCF PORTB,2
REP10
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP10
GOTO CLROE
;*******************************************
FFAST
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
BSF MSTOP,4
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XEF
MOVWF SPEED11
MOVLW 0X7F
MOVWF SPEED12
MOVLW 0XEF
MOVWF SPEED21
MOVLW 0X7F
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BSF PORTB,1
BSF PORTB,2
CALL SDELAY
NORMALFAST
MOVLW 0XCF
MOVWF SPEED11
MOVLW 0XCC
MOVWF SPEED12
MOVLW 0XCF
MOVWF SPEED21
MOVLW 0XCC
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BTFSC LDET,0
BSF PORTB,7
BSF PORTB,1
BSF PORTB,2
REP11
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
NOP
BTFSS PORTD,7
GOTO REP11
PLUSEFAST
MOVLW 0XCF
MOVWF SPEED11
MOVLW 0XFF
MOVWF SPEED12
MOVLW 0XCF
MOVWF SPEED21
MOVLW 0XFF
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BSF PORTB,1
BSF PORTB,2
REP12
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
BTFSS PORTD,7
GOTO NORMALFAST
GOTO REP12
GOTO CLROE
;*******************************************
RFAST
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X66
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BSF PORTD,1
BCF PORTB,1
BSF PORTB,2
REP13
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP13
GOTO CLROE
;*******************************************
LFAST
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X66
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BCF PORTD,1
BSF PORTB,1
BCF PORTB,2
CALL SDELAY
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X4C
MOVWF SPEED12
MOVLW 0XEF
MOVWF SPEED21
MOVLW 0XB3
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BCF PORTD,1
BSF PORTB,1
BCF PORTB,2
REP14
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP14
GOTO CLROE
;*******************************************
BFAST
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
MOVLW 0XDF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XDF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BSF PORTD,1
BCF PORTB,1
BCF PORTB,2
CALL SDELAY
MOVLW 0XEF
MOVWF SPEED11
MOVLW 0X66
MOVWF SPEED12
MOVLW 0XEF
MOVWF SPEED21
MOVLW 0X66
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BSF PORTD,1
BCF PORTB,1
BCF PORTB,2
REP15
CALL STALL1
BTFSC MSTOP,0
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP15
GOTO CLROE
;*******************************************
HCLOSE
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
BTFSC PORTD,5
GOTO STOPS
BTFSC PORTD,6
GOTO STOPS
BSF PORTD,2
BCF PORTD,3
REP16
BTFSC PORTD,5
GOTO STOPS
BTFSC PORTD,6
GOTO STOPS
CALL SDELAY
CALL STALL2
BTFSC MSTOP,2
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP16
GOTO CLROE
;*******************************************
HOPEN
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
BTFSC PORTD,4
GOTO STOPS
BCF PORTD,2
BSF PORTD,3
REP17
BTFSC PORTD,4
GOTO STOPS
CALL SDELAY
CALL STALL2
BTFSC MSTOP,2
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP17
GOTO CLROE
;*******************************************
HUP
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
BTFSC PORTC,4
GOTO STOPS
BCF PORTC,0
BSF PORTC,3
REP18
BTFSC PORTC,4
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP18
GOTO CLROE
;*******************************************
HDOWN
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BCF LDET,0
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
CALL DARKLIGHT
BTFSC LDET,0
;BSF PORTB,7
BTFSC PORTC,5
GOTO STOPS
BSF PORTC,0
BCF PORTC,3
REP19
BTFSC PORTC,5
GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
GOTO REP19
GOTO CLROE
;*******************************************
LON
BSF PORTB,7
BSF LDET,0
GOTO CLROE
;*******************************************
LOFF
BCF PORTB,7
BCF LDET,0
GOTO CLROE
;*******************************************
LFOLLOW
BCF STATUS,RP0
BCF STATUS,RP1
BCF PORTB,1
BCF PORTB,2
BCF PORTB,6
BCF PORTB,7
CALL PWM1OFF
CALL PWM2OFF
BCF PORTD,0
BCF PORTD,1
BCF PORTD,2
BCF PORTD,3
BSF MSTOP,6
REPLF
;BANKSEL OPTION_REG
;BSF OPTION_REG,3
;BSF OPTION_REG,3
;BSF OPTION_REG,3
;BSF OPTION_REG,3
;CLRFWDT
BCF STATUS,RP0
BCF STATUS,RP1
;BANKSEL INTCON
;BCF INTCON,T0IE
;BCF INTCON,T0IF
;BANKSEL PIE1
;BCF PIE1,6
;BCF PIE1,0
;BANKSEL INTCON
;BCF INTCON,GIE
BANKSEL PCON
BCF PCON,0
BCF PCON,1
NOP
BSF PCON,0
BSF PCON,1
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
CALL SDELAY
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSC STATUS,Z
GOTO FRONT
CALL SDELAY
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSC STATUS,C
GOTO LR2G
LR1G
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X66
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BSF PORTD,0
BCF PORTD,1
BSF PORTB,1
BCF PORTB,2
LR1GREP
;CALL STALL1
;BTFSC MSTOP,0
;GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSC STATUS,Z
GOTO REPLF
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSS STATUS,C
GOTO LR1GREP
GOTO REPLF
LR2G
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X66
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BSF PORTD,1
BCF PORTB,1
BSF PORTB,2
LR2GREP
;CALL STALL1
;BTFSC MSTOP,0
;GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSC STATUS,Z
GOTO REPLF
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSC STATUS,C
GOTO LR2GREP
GOTO REPLF
FRONT
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
;CALL BUTTLEVEL
;BTFSC MSTOP,1
;GOTO STOPS
MOVLW 0XFF
MOVWF SPEED11
MOVLW 0X99
MOVWF SPEED12
MOVLW 0XFF
MOVWF SPEED21
MOVLW 0X99
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
BSF PORTB,1
BSF PORTB,2
CALL SDELAY
FROREP
;CALL STALL1
;BTFSC MSTOP,0
;GOTO STOPS
BANKSEL PIR1
BTFSC PIR1,RCIF
GOTO RXDATA
;CALL LDIN
;BTFSC MSTOP,3
;GOTO STOPS
CALL LFC1
NOP
CALL LFC2
NOP
MOVF LR2,0
SUBWF LR1,0
BTFSC STATUS,Z
GOTO FROREP
GOTO REPLF
GOTO CLROE
;*******************************************
STOPS
BTFSS MSTOP,4
GOTO STOPA
MOVLW 0XCF
MOVWF SPEED11
MOVLW 0XB3
MOVWF SPEED12
MOVLW 0XCF
MOVWF SPEED21
MOVLW 0XB3
MOVWF SPEED22
CALL PWM1ON
CALL PWM2ON
BCF PORTD,0
BCF PORTD,1
CALL SDELAY
STOPA
BCF STATUS,RP0
BCF STATUS,RP1
BCF PORTB,1
BCF PORTB,2
BCF PORTB,6
BTFSS LDET,0
;BCF PORTB,7
BCF PORTC,0
BCF PORTC,3
CALL PWM1OFF
CALL PWM2OFF
BCF PORTD,0
BCF PORTD,1
BCF PORTD,2
BCF PORTD,3
MOVLW 0X00
MOVWF MSTOP
;*******************************************
CLROE
BANKSEL RCSTA
BCF RCSTA,CREN
BCF RCSTA,FERR
BCF RCSTA,OERR
BSF RCSTA,CREN
BSF INTCON,GIE
BSF INTCON,PEIE
GOTO WAIT1
;*******************************************
;*******************************************
;*******************************************
STALL1
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BANKSEL ADCON0
BCF ADCON0,3
BCF ADCON0,4
BCF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,0
SUBLW 0X70
BTFSS STATUS,C
BSF MSTOP,0
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
STALL2
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BANKSEL ADCON0
BSF ADCON0,3
BCF ADCON0,4
BCF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,0
SUBLW 0X40
BTFSS STATUS,C
BSF MSTOP,2
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
BUTTLEVEL
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW 0X00
MOVWF MSTOP
BANKSEL ADCON0
BCF ADCON0,3
BCF ADCON0,4
BSF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,0
SUBLW 0X7F
BTFSS STATUS,C
GOTO BL1
GOTO BL2
BL1
BSF MSTOP,1
BSF PORTB,6
BL2
RETURN
DARKLIGHT
BCF STATUS,RP0
BCF STATUS,RP1
BTFSC LDET,0
GOTO RETFDL
BANKSEL ADCON0
BCF ADCON0,3
BSF ADCON0,4
BCF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,0
SUBLW 0XEE
BTFSS STATUS,C
BSF PORTB,7
RETFDL
RETURN
CONVERT
MOVLW 0X49
BANKSEL ADCON1
MOVWF ADCON1
BANKSEL ADCON0
BCF ADCON0,7
BSF ADCON0,6
BSF ADCON0,0
BSF ADCON0,GO
WAITADC
BTFSC ADCON0,GO
GOTO WAITADC
BCF STATUS,RP1
BCF STATUS,RP0
RETURN
PWM1ON
BANKSEL PR2
MOVLW 0XFF
MOVWF PR2
BCF STATUS,RP0
BCF STATUS,RP1
MOVF SPEED11,0
MOVWF CCP1CON
MOVF SPEED12,0
MOVWF CCPR1L
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW 0XF0
MOVWF TRISC
BCF STATUS,RP0
BCF STATUS,RP1
BCF T2CON,T2CKPS1
BCF T2CON,T2CKPS0
BSF T2CON,TMR2ON
BSF CCP1CON,2
BSF CCP1CON,3
RETURN
PWM2ON
BANKSEL PR2
MOVLW 0XFF
MOVWF PR2
BCF STATUS,RP0
BCF STATUS,RP1
MOVF SPEED21,0
MOVWF CCP2CON
MOVF SPEED22,0
MOVWF CCPR2L
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW 0XF0
MOVWF TRISC
BCF STATUS,RP0
BCF STATUS,RP1
BCF T2CON,T2CKPS1
BCF T2CON,T2CKPS0
BSF T2CON,TMR2ON
BSF CCP2CON,2
BSF CCP2CON,3
RETURN
PWM1OFF
BCF CCP1CON,2
BCF CCP1CON,3
BSF T2CON,T2CKPS1
BSF T2CON,T2CKPS0
BCF T2CON,TMR2ON
MOVLW 0X00
MOVWF CCP1CON
MOVLW 0X00
MOVWF CCPR1L
BANKSEL PR2
MOVLW 0X00
MOVWF PR2
BCF STATUS,RP1
BCF STATUS,RP0
RETURN
PWM2OFF
BCF CCP2CON,2
BCF CCP2CON,3
BSF T2CON,T2CKPS1
BSF T2CON,T2CKPS0
BCF T2CON,TMR2ON
MOVLW 0X00
MOVWF CCP2CON
MOVLW 0X00
MOVWF CCPR2L
BANKSEL PR2
MOVLW 0X00
MOVWF PR2
BCF STATUS,RP1
BCF STATUS,RP0
RETURN
LFC1
BANKSEL ADCON0
BSF ADCON0,3
BCF ADCON0,4
BSF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,W
ANDLW 0XF0
MOVWF LR1
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
LFC2
BANKSEL ADCON0
BCF ADCON0,3
BSF ADCON0,4
BSF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,0
ANDLW 0XF0
MOVWF LR2
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
LDIN
BANKSEL ADCON0
BCF ADCON0,3
BSF ADCON0,4
BCF ADCON0,5
BCF STATUS,RP0
BCF STATUS,RP1
CALL CONVERT
MOVF ADRESH,0
SUBLW 0X4C
BTFSC STATUS,C
GOTO COMP4
BSF MSTOP,3
COMP4
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
SDELAY
CLRF L2
XL3
CLRF L1
XL2
CLRF TMR0
XL1
MOVLW 0XFF
SUBWF TMR0,W
BTFSS STATUS,C
GOTO XL1
MOVLW 0X20
INCF L1
SUBWF L1,W
BTFSS STATUS,C
GOTO XL2
MOVLW 0X10
INCF L2
SUBWF L2,W
BTFSS STATUS,C
GOTO XL3
RETURN
NOP
NOP
END