|
|
View previous topic :: View next topic |
Author |
Message |
dyeatman
Joined: 06 Sep 2003 Posts: 1934 Location: Norman, OK
|
Apparent problem with streams on the 18F452 |
Posted: Sun Aug 15, 2004 12:41 pm |
|
|
I just sent CCS the following message about a problem I have encountered with 18F452 streams:
In the 18F452 file I define two RS232 streams as CCT and EIS.
In the listing file at 0x0788 you will see where I print to the CCT stream. If you follow the code generated, the PRINTF does not output to the hardware UART at 0xFAD and 0xFAC but instead appears to call the EIS stream and tries to output to the software serial port.
I have tried this with Versions 3.191, 3.206 and 3.207 all with the same results.
If I remove the second stream everything works fine.
Code: |
0784: BCF F96.0
0786: BTG F8D.0
.................... printf(CCT_ACK_MSG,CCT); // send ack
0788: MOVLW 40
078A: MOVWF x9B
078C: CALL 02E2
.................... delay_ms(5);
0790: MOVLW 05
0792: MOVWF x9A
0794: CALL 05EA
.................... printf(WD_MSG,CCT); // send watchdog message
0798: CLRF x9A
079A: MOVF x9A,W
079C: CALL 00A2
07A0: INCF x9A,F
07A2: MOVWF 00
07A4: MOVFF 00,9B
07A8: CALL 02E2
07AC: MOVLW 05
07AE: SUBWF x9A,W
07B0: BTFSS FD8.2
07B2: GOTO 079A
.................... break;
07B6: GOTO 0832
|
USE RS232 Definitions
Code: |
.................... #use RS232(STREAM=CCT, baud=9600,xmit=PIN_C6,rcv=PIN_C7,PARITY=N,BITS=8,RESTART_WDT,ERRORS)
*
01F0: CLRWDT
01F2: BTFSS F9E.5
01F4: GOTO 01F0
01F8: MOVF FAB,W
01FA: MOVWF 17
01FC: MOVF FAE,W
01FE: MOVWF 01
0200: BTFSS 17.1
0202: GOTO 020A
0206: BCF FAB.4
0208: BSF FAB.4
020A: NOP
020C: GOTO 0228 (RETURN)
.................... #use RS232(STREAM=EIS, baud=9600,xmit=PIN_C3,rcv=PIN_C0, PARITY=N,BITS=8,RESTART_WDT, ERRORS)
*
02E2: BCF F94.3
02E4: BCF F8B.3
02E6: MOVLW 08
02E8: MOVWF 01
02EA: NOP
02EC: NOP
02EE: NOP
02F0: BSF 01.7
02F2: GOTO 0318
02F6: BCF 01.7
02F8: RRCF x9B,F
02FA: BTFSC FD8.0
02FC: BSF F8B.3
02FE: BTFSS FD8.0
0300: BCF F8B.3
0302: BSF 01.6
0304: GOTO 0318
0308: BCF 01.6
030A: DECFSZ 01,F
030C: GOTO 02F8
0310: NOP
0312: NOP
0314: NOP
0316: BSF F8B.3
0318: MOVLW 01
031A: MOVWF 00
031C: CLRF FE9
031E: DECFSZ FE9,F
0320: GOTO 031E
0324: DECFSZ 00,F
0326: GOTO 031C
032A: MOVLW 38
032C: MOVWF FE9
032E: DECFSZ FE9,F
0330: GOTO 032E
0334: CLRWDT
0336: BTFSC 01.7
0338: GOTO 02F6
033C: BTFSC 01.6
033E: GOTO 0308
0342: RETLW 00
0344: MOVLW 08
0346: MOVWF 00
0348: BSF F94.0
034A: CLRWDT
034C: BTFSC F82.0
034E: GOTO 034A
0352: CLRF x9E
0354: BSF 00.7
0356: GOTO 037E
035A: BCF 00.7
035C: GOTO 037E
0360: BCF FD8.0
0362: BTFSC F82.0
0364: BSF FD8.0
0366: RRCF x9E,F
0368: BSF 00.6
036A: GOTO 037E
036E: BCF 00.6
0370: DECFSZ 00,F
0372: GOTO 0360
0376: MOVF x9E,W
0378: MOVWF 01
037A: GOTO 03B6
037E: MOVLW 01
0380: MOVWF FE9
0382: MOVLW 00
0384: BTFSC 00.7
0386: MOVLW 55
0388: MOVWF 01
038A: DECFSZ 01,F
038C: GOTO 038A
0390: DECFSZ FE9,F
0392: GOTO 0382
0396: MOVLW 37
0398: BTFSC 00.7
039A: MOVLW 0F
039C: MOVWF 01
039E: DECFSZ 01,F
03A0: GOTO 039E
03A4: NOP
03A6: BTFSC 00.7
03A8: GOTO 035A
03AC: BTFSC 00.6
03AE: GOTO 036E
03B2: GOTO 0360
03B6: GOTO 0428 (RETURN)
.................... //
|
Is there something I am doing/seeing wrong here?
BTW, I tried this with #OPT 1 ,5 and 9. same result. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Aug 15, 2004 1:00 pm |
|
|
Can you post a small demo program that I can drop into MPLAB and test ? |
|
|
LomasS Guest
|
|
Posted: Sun Aug 15, 2004 1:56 pm |
|
|
CCS Documentation states that you need fprintf() not printf() to direct the output to streams. Do you really use printf() ?
Steve. |
|
|
dyeatman
Joined: 06 Sep 2003 Posts: 1934 Location: Norman, OK
|
I seem to have missed that tidbit... |
Posted: Sun Aug 15, 2004 2:08 pm |
|
|
Interesting, I seem to have missed that one!
Printf() has worked for me with multiple streams in the past but in a much simpler program so I must have lucked out and never realized the FPrintF() issue!
Strangely, when I cut the program that is having problems down to an example level (I still have two streams defined) printf still takes the Stream value and works as it should to either stream.
I will go back and try Fprinf(). I hope that works!
Thanks! |
|
|
dyeatman
Joined: 06 Sep 2003 Posts: 1934 Location: Norman, OK
|
That does it... |
Posted: Sun Aug 15, 2004 3:02 pm |
|
|
The FPrintf worked... Thanks Steve!
I went back and checked a program I wrote earlier where I specified the stream after the printf value (i.e printf(msg, stream)) and confirmed it worked for some crazy reason and the compiler didn't complain! Guess I just stumbled into a fluke of the code...
When the compiler didn't complain. it appears it may have had something to do with the default STDOUT... Oh well, mine is not to reason why, on to more bugs! |
|
|
LomasS Guest
|
|
Posted: Mon Aug 16, 2004 4:59 am |
|
|
It would appear that the real problem is that the compiler did not flag the printf with incorrect parameters, had it done so I'm sure you'd have found it.
Learning from mistakes is the best way, the advantage of this forum is that we can learn from the mistakes of others too!
Glad to be of help.
Steve. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|