Hi,
I'm wondering what I'm doing wrong in my programs.
Each time I use SERIN2/SEROUT2 commands, the very first data received on the other end is garbage. The correct data will appear only after I've sent the data from the second time and on. I can see this on my serial LCD, on any serial com software or even in the PICKit2's UART tool.
I found out that if I do not to declare the receiving port (here PORTB.5) as an Input in the TRIS register, the garbage is gone.
Any idea what I'm doing wrong? Am I missing some init stuff or any DEFINE?
Code:' Serial Comm test ' ====== FUSES ===================================================================================== ' PIC 16F690 @ __Config _FCMEN_OFF &_IESO_OFF &_CPD_OFF &_WDT_OFF &_HS_OSC &_BOR_OFF &_CP_OFF &_PWRTE_OFF &_MCLRE_OFF ' ====== REGISTERS ================================================================================= ' 76543210 OPTION_REG = %10000000 ' PORT A&B Pull-Ups disabled (look WPUA & WPUB) INTEDG rising edge on A2 ANSEL = %00000000 ' Analog inputs Channels 0 to 7 ANSELH = %00000000 ' Analog inputs Channels 8 to 11 ADCON0 = %00000000 ' A/D Module is OFF CM1CON0 = %00000000 ' Comparator1 Module is OFF CM2CON0 = %00000000 ' Comparator2 Module is OFF INTCON = %00000000 ' INTerrupts CONtrol TRISA = %00000100 ' Set Input/Output (0 to 5) PORTA = %00000000 ' Ports High/Low (0 to 5) ''' TRISB = %00010000 ' Set Input/Output (4 to 7) ''' PORTB = %00000000 ' Ports High/Low (4 to 7) TRISC = %00000000 ' Set Input/Output (0 to 7) PORTC = %00000000 ' Ports High/Low (0 to 7) ' ====== DEFINES =================================================================================== DEFINE OSC 4 ' ====== VARIABLES ================================================================================= Serial_In VAR PORTB.5 ' serial data in Serial_Out VAR PORTB.7 ' serial data out PollFlag VAR BIT ' if POLLING is requested, set flag PollFlag = 0 'Serial_Bps CON 84 'For PICKit2 (9600 Driven True None) Serial_Bps CON 32852 'For FTDI cable (9600 Open True None) 'Serial_Bps CON 16468 'For PC, HyperTerminal, MCS Terminal, LCD Display (9600 Driven Inverted None) '======= PROGRAM =================================================================================== MAIN: SERIN2 Serial_In, Serial_Bps, [WAIT ("POLL"),DEC PollFlag] IF PollFlag = 1 THEN SEROUT2 Serial_Out, Serial_Bps, ["Hello",13,10] ENDIF GOTO MAIN: END





Bookmarks