No it seems not , I have done a bit more experimenting and the chip works as per the data sheet ieThe HSEROUT command is probably setting the tris register for the operator to make things easy
Setting the SPEN bit of the
RCSTA register enables the EUSART and automatically
configures the TX/CK I/O pin as an output.
seting or clearing the tris bit has no effect on the eusart ,
this int driven background printing demo works just fine when trisc.4 is set or not
correct , that saves a couple of words (don't know how I missed that ) and what you say about APFCON makes sense if it can affect the bootloaderclearing bits 4:5 of ANSELC does no good as they are not implemented
Code:'**************************************************************** '* Name : PRINT_16_TX_INT.pbp * '* Author : richard * '* Notice : * '* : * '* Date : * '* Version : 16f1825 * '* Notes : * '* : * '* '**************************************************************** #CONFIG __config _CONFIG1, _FOSC_INTOSC & _CP_OFF & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _CLKOUTEN_OFF __config _CONFIG2, _PLLEN_OFF & _LVP_OFF #ENDCONFIG DEFINE LOADER_USED 1 DEFINE OSC 32 include "dt_ints-14.bas" include "REENTERPBP.bas" asm INT_LIST macro INT_HANDLER TX_INT , _do_tx, PBP,no endm INT_CREATE ENDASM RCSTA = $90 ' Enable serial port & continuous receive TXSTA = $20 ' Enable transmit, BRGH = 0 SPBRG = 51 ' 38400 Baud @ 32MHz, 0.16% SPBRGH = 0 BAUDCON.3 = 1 ' Enable 16 bit baudrate generator prnb var byte[32] bank0 spos var byte bank0 rpos var byte bank0 maxq con 31 HEAD VAR BYTE [70] I VAR BYTE J VAR BYTE K VAR BYTE PASS VAR WORD led var latc.0 TRISA=%111111 TRISC=%111110 OSCCON=$f0 ANSELA=0 ANSELC=0 CLEAR while !OSCSTAT.6 wend LED=0 INTCON=$C0 ARRAYWRITE head, [ "Ready",9,"%",bin6 trisc,13,10,0] GOSUB MYPRINT ARRAYWRITE head, [ "still",9,"%",bin6 trisc,13,10,0] GOSUB MYPRINT mainloop: pause 500 ARRAYWRITE head, [ "still Enable 16 bit baudrate generator ",0] GOSUB MYPRINT ARRAYWRITE head, [ "PASS Enable 16 bit baudrate generator",9,#PASS,13,10,0] GOSUB MYPRINT PASS=PASS+1 goto mainloop MYPRINT: J=0 WHILE HEAD[J] INTCON=0 I=SPOS+1 K=RPOS IF ((I)==K) || ((I== MAXQ )&& !K ) THEN INTCON=$C0 PAUSE 20 led=!led ELSE PRNB[SPOS]= HEAD[J] SPOS=SPOS+1 PIE1.4=1 IF SPOS=MAXQ THEN SPOS=0 J=J+1 ENDIF INTCON=$C0 WEND RETURN :do_tx IF RPOS == SPOS THEN PIE1.4=0 ELSE IF PRNB[RPOS] THEN TXREG=PRNB[RPOS] RPOS=RPOS+1 if rpos==maxQ then rpos=0 ENDIF ENDIF @ INT_RETURN




Bookmarks