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