The following code runs as a LED blinker (1 sec. per cycle) with a character sent to both HSER and HSER2 ports at 115200 each time through the loop. Note the 'WHY??' comments in the code as to what happens when various DEFINES are used. Also the timing loop needs 3333 count to make one second interval. Also the OSC define does not seem to work.
Using MicroCodeStudioPlus v3.0.0.5 Complier is PICBASICPRO 2.60L and MPLabIDE is v8.56
I would really appreciate any suggestions....Brian
Code:
'****************************************************************
'CONFIG BITS ON PICKit2 set to 04A1 09DC 09FF 01CF
;DEFINE OSC 40 ' enable this and HSER2 baud rate is around 14400
' and pause loop becomes 5 sec on 5 sec off not 1/2 sec
' Why does DEFINE OSC not work?
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 1Ch ' SPBRG with no H WHY???
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
' Why no BAUD rate define needed ??
DEFINE HSER2_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER2_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER2_SPBRGH 1Ch ' SPBRG with H WHY???
DEFINE HSER2_baud 38400 ' only value that yeilds 115200 WHY???
' without this DEFINE baud rate is 9600
DEFINE HSER2_CLROERR 1 ' Clear overflow automatically
BAUDCON.3 = 1 ' Enable 16 bit baudrate generator
char VAR BYTE
CLRWDT
INTCON = 0
INTCON2 = 0
INTCON3 = 0
TRISA = %00000000
TRISB = %00000000 'PORTB.5 is out TO led
TRISC = %10100000 'HSER ins on bit5,bit7 and outs on bit4,bit6
;asm code to set HSER2 I/O pins right from microchip data sheet
asm
MOVLB 0x0E
MOVLW 0x55
MOVWF EECON2, 0
MOVLW 0xAA
MOVWF EECON2, 0
BCF PPSCON, IOLOCK, BANKED
endasm
asm
MOVLW 0x10
MOVWF RPINR16, BANKED ;HSER2 input on RP16
endasm
asm
MOVLW 0x05
MOVWF RPOR15, BANKED ;HSER2 out on RP15
endasm
asm
MOVLW 0x55
MOVWF EECON2, 0
MOVLW 0xAA
MOVWF EECON2, 0
BSF PPSCON, IOLOCK, BANKED
endasm
char = 65
LUPE: high porta.5 ' Flash an LED on PORTa.5 at 1 sec. cycle
PAUSE 1666 ' this gives 1/2 sec pause WHY???
low porta.5
PAUSE 1667 ' this gives 1/2 sec pause WHY???
IF char = 65 THEN HSEROUT ["HSER 115200 Baud",10,13]
HSEROUT [char]
IF char = 65 THEN HSEROUT2 ["HSER2 115200 Baud",10,13]
HSEROUT2 [char]
char = char +1 'Output ascii characters from 'A' to '}'
IF char = 126 THEN char = 65
GOTO LUPE
'-------------------------------------
END
Bookmarks