Although i have made a lot of simple programs in my first big program i am in a dead end! i have made a controller-joystick for a wirelless car
i have this program that works ok:
INCLUDE "Modedefs.bas"
TRISA=255
TRISC=%1000000
TRISB=0
ADCON1.0=1 'all porta digital for switches
ADCON1.1=1
ADCON1.2=1
ADCON1.3=0
DEFINE OSC 4
DEFINE LCD_DREG PORTB 'LCD Configuration in portb
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 2
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_DATAUS 50
CO VAR WORD
B0 VAR BYTE
B1 VAR BYTE
B2 VAR BYTE
A VAR BIT
B VAR BYTE
C VAR BIT
FLAG VAR BIT
A=0
C=0
B=0
FLAG=0
Pause 1000
main:
IF (PORTA.0==0 && A==1) then ' decision (up-down switches) about velocity of a robot
B=B+1
FLAG=1 'flag to know if a button was pressed
EndIF
IF (PORTA.1==0 && C==1) Then
B=B-1
FLAG=1
EndIF
IF (B>4 && B<250) Then '5 levels for velocity
B=4
EndIF
IF B>250 Then
B=0
EndIF
A=PORTA.0 'old situation of ports to compare in order to understand when the buttons were pressed
C=PORTA.1
IF b==0 Then ' flashing leds dependable to the velocity
Low PORTD.7
Low PORTD.6
Low PORTD.5
Low PORTD.4
High PORTC.5
EndIF
IF b==1 Then
Low PORTD.7
Low PORTD.6
Low PORTD.5
high PORTD.4
High PORTC.5
EndIF
IF b==2 Then
Low PORTD.7
Low PORTD.6
high PORTD.5
high PORTD.4
High PORTC.5
EndIF
IF b==3 Then
Low PORTD.7
high PORTD.6
high PORTD.5
high PORTD.4
High PORTC.5
EndIF
IF b==4 Then
high PORTD.7
high PORTD.6
high PORTD.5
high PORTD.4
High PORTC.5
EndIF
PAUSE 12
gosub LPD
IF FLAG=1 THEN
SerOut2 PORTC.6, 84, ["v: ",DEC B,13,10]
ENDIF
IF FLAG=0 THEN
GOTO MAIN
ENDIF
FLAG=0
GoTo main
LPD:
LCDOUT $FE,1,"V: ",DEC B
RETURN
The problem is that i want to know something about the car. so i want an interrupt in serial port (rx -portc.6) and that is where the problems started
i made the following program. but even my joystick becomes dead (not to metion that i can't see anything in terminal!).with underlines the changes of the above program.Any ideas are welcome....
INCLUDE "Modedefs.bas"
TRISA=255
TRISC=%1000000
TRISB=0
ADCON1.0=1 'all porta digital for switches
ADCON1.1=1
ADCON1.2=1
ADCON1.3=0
DEFINE HSER_RCSTA 90h ' enable serial port,
' enable continuous receive
'
DEFINE HSER_TXSTA 24h ' enable transmit,
' BRGH=1
'
DEFINE HSER_BAUD 9600
DEFINE OSC 4
DEFINE LCD_DREG PORTB 'LCD Configuration in portb
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 2
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_DATAUS 50
CO VAR WORD
RCIF VAR PIR1.5 ' Receive interrupt flag (1=full , 0=empty)
OERR var RCSTA.1
CREN VAR RCSTA.4
INTCON = %11000000
ON INTERRUPT GOTO serial
PIE1.5 = 1
TXIF VAR PIR1.4
B0 VAR BYTE
B1 VAR BYTE
B2 VAR BYTE
A VAR BIT
B VAR BYTE
C VAR BIT
FLAG VAR BIT
A=0
C=0
B=0
FLAG=0
Pause 1000
main:
IF (PORTA.0==0 && A==1) then ' decision (up-down switches) about velocity of a robot
B=B+1
FLAG=1 'flag to know if a button was pressed
EndIF
IF (PORTA.1==0 && C==1) Then
B=B-1
FLAG=1
EndIF
IF (B>4 && B<250) Then '5 levels for velocity
B=4
EndIF
IF B>250 Then
B=0
EndIF
A=PORTA.0 'old situation of ports to compare in order to understand when the buttons were pressed
C=PORTA.1
IF b==0 Then ' flashing leds dependable to the velocity
Low PORTD.7
Low PORTD.6
Low PORTD.5
Low PORTD.4
High PORTC.5
EndIF
IF b==1 Then
Low PORTD.7
Low PORTD.6
Low PORTD.5
high PORTD.4
High PORTC.5
EndIF
IF b==2 Then
Low PORTD.7
Low PORTD.6
high PORTD.5
high PORTD.4
High PORTC.5
EndIF
IF b==3 Then
Low PORTD.7
high PORTD.6
high PORTD.5
high PORTD.4
High PORTC.5
EndIF
IF b==4 Then
high PORTD.7
high PORTD.6
high PORTD.5
high PORTD.4
High PORTC.5
EndIF
PAUSE 12
gosub LPD
IF FLAG=1 THEN
SerOut2 PORTC.6, 84, ["v: ",DEC B,13,10]
ENDIF
IF FLAG=0 THEN
GOTO MAIN
ENDIF
FLAG=0
GoTo main
LPD:
LCDOUT $FE,1,"V: ",DEC B
RETURN
disable
serial:
HSerin [WAIT ("d"),DEC serial_in]
if rcif then serial
HSerOut ["hit on wall",13,10]
high PORTE.0
RESUME
ENABLE
Bookmarks