Hello,
I need some help to understand and make my two codes work.
I'm reading serial data from a GPS module connected directly (no level shifter / no MAX232) to my PIC18F2420.
As it works fine in a common serial way using SERIN2 command, the same adapted to EUART code won't work. In the HSERIN version, the program will stuck at the HSERIN command.
I've put both code versions herunder.
What am I doing wrong in code HSERIN?
SERIN2 working
Code:
'Config Directive settings for MPASM (fuses) for 18F2420
@ __CONFIG _CONFIG1H, _OSC_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
@ __CONFIG _CONFIG2L, _PWRT_ON_2L & _BOREN_OFF_2L & _BORV_0_2L
@ __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_1_2H
@ __CONFIG _CONFIG3H, _MCLRE_OFF_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_PORTBE_3H
@ __CONFIG _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L
@ __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L
@ __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
@ __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L
@ __CONFIG _CONFIG6H, _WRTB_OFF_6H & _WRTC_OFF_6H & _WRTD_OFF_6H
@ __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L
@ __CONFIG _CONFIG7H, _EBTRB_OFF_7H & _DEVID1 & _IDLOC0
'Registers
ADCON1 = %00001111 'Turn off all AD's (= "_PBADEN_OFF_3H")
TRISC = %10000000 'GPS module's TX
'-------------------------------------------------------------------------------
' DEFINEs
DEFINE OSC 8
DEFINE LCD_DREG PORTB 'LCD data port
DEFINE LCD_DBIT 0 'LCD data starting PORT.bit (0 or 4)
DEFINE LCD_RSREG PORTB 'LCD register select port
DEFINE LCD_RSBIT 4 'LCD register select bit
DEFINE LCD_EREG PORTB 'LCD enable port
DEFINE LCD_EBIT 5 'LCD enable bit
DEFINE LCD_BITS 4 'LCD bus size 4 or 8
DEFINE LCD_LINES 2 'Number lines on LCD
'-------------------------------------------------------------------------------
INIT:
GPS_D VAR BYTE(80) 'Incomming data bit array
LED0 VAR PORTA.5 'alive LED
GPSfrom VAR PORTC.7 'serial data FROM GPS module
GPSto VAR PORTC.6 'serial data TO GPS module
GPSbps VAR WORD 'GPS module's baudrate
GPSbps = 32852 'Open,True,N,9600bps (TTL level)
'-------------------------------------------------------------------------------
' DOGM LCD display specific settings
PAUSE 1000 'Time to settle Vdd
LCDOUT $FE, $29 'Function Set: 4 bits bus mode
LCDOUT $FE, $1C 'Bias set
LCDOUT $FE, $52 'Power control + Contrast (HiByte)(for 5V=$52/3,3V=55)
LCDOUT $FE, $69 'Follower control (5V=$69/3,3V=6D)
LCDOUT $FE, $78 'Contrast (LowByte)
'-------------------------------------------------------------------------------
' Main loop
LCDOUT $FE,2,"SERIN2"
MAIN:
SERIN2 GPSfrom,GPSbps,[WAIT("$GPGGA,"),STR GPS_D\6]
LCDOUT $FE,2,GPS_D(0),GPS_D(1),":",GPS_D(2),GPS_D(3),":",GPS_D(4),GPS_D(5)
TOGGLE LED0
GOTO MAIN:
HSERIN not working
Code:
'Config Directive settings for MPASM (fuses) for 18F2420
@ __CONFIG _CONFIG1H, _OSC_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H ;_OSC_INTIO7_1H
@ __CONFIG _CONFIG2L, _PWRT_ON_2L & _BOREN_OFF_2L & _BORV_0_2L
@ __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_1_2H
@ __CONFIG _CONFIG3H, _MCLRE_OFF_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_PORTBE_3H
@ __CONFIG _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L
@ __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L
@ __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
@ __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L
@ __CONFIG _CONFIG6H, _WRTB_OFF_6H & _WRTC_OFF_6H & _WRTD_OFF_6H
@ __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L
@ __CONFIG _CONFIG7H, _EBTRB_OFF_7H & _DEVID1 & _IDLOC0
'Registers
ADCON1 = %00001111 'Turn off all AD's (= "_PBADEN_OFF_3H")
TRISC = %11000000 'stated by DS(!)
RCSTA = %10010010 'enable serial port, enable continuous receive, automatic clear overrun error
TXSTA = %00100000 'enable transmit, BRGH=0
SPBRG = 51 '9600 Baud @ 8MHz, 0.16%
SPBRGH = 0
BAUDCON = %01001000
'-------------------------------------------------------------------------------
' DEFINEs
DEFINE OSC 8
DEFINE LCD_DREG PORTB 'LCD data port
DEFINE LCD_DBIT 0 'LCD data starting PORT.bit (0 or 4)
DEFINE LCD_RSREG PORTB 'LCD register select port
DEFINE LCD_RSBIT 4 'LCD register select bit
DEFINE LCD_EREG PORTB 'LCD enable port
DEFINE LCD_EBIT 5 'LCD enable bit
DEFINE LCD_BITS 4 'LCD bus size 4 or 8
DEFINE LCD_LINES 2 'Number lines on LCD
'-------------------------------------------------------------------------------
INIT:
GPS_D VAR BYTE(80) 'Incomming data bit array
LED0 VAR PORTA.5 'alive LED
'-------------------------------------------------------------------------------
' DOGM LCD display specific settings
PAUSE 1000 'Time to settle Vdd
LCDOUT $FE, $29 'Function Set: 4 bits bus mode
LCDOUT $FE, $1C 'Bias set
LCDOUT $FE, $52 'Power control + Contrast (HiByte)(for 5V=$52/3,3V=55)
LCDOUT $FE, $69 'Follower control (5V=$69/3,3V=6D)
LCDOUT $FE, $78 'Contrast (LowByte)
'-------------------------------------------------------------------------------
' Main loop
LCDOUT $FE,2,"HSERIN"
MAIN:
HSERIN [WAIT("$GPGGA,"),STR GPS_D\6]
LCDOUT $FE,2,GPS_D(0),GPS_D(1),":",GPS_D(2),GPS_D(3),":",GPS_D(4),GPS_D(5)
TOGGLE LED0
GOTO MAIN:
Bookmarks