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: