![](templates/subSilver/images/CCSLogo.jpg) |
![CCS C Software and Maintenance Offers](templates/subSilver/images/forumAd6.jpg) |
View previous topic :: View next topic |
Author |
Message |
Masaya Tanaka
Joined: 04 Feb 2011 Posts: 5 Location: Japan
|
Help! PIC18F14K50 UART Problem |
Posted: Fri Feb 04, 2011 4:26 am |
|
|
Hello,
I have the problem of UART of PIC18F14K50(at 3.3V).
Data cannot be received though data can be transmitted.
Settings : TX[RB7], RX[RB5], CTS[TB6], RTS[RB4]
Code: |
#include <18F14K50.h>
#device ICD=TRUE
#device adc=8
#FUSES HS
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=12000000, crystal)
#use rs232(baud=9600, parity=E, STOP=1, xmit=PIN_B7, rcv=PIN_B5, bits=8, restart_wdt, stream=RFMODULE, UART, ERRORS)
#use fast_io(C)
#use fast_io(B)
#define ACTIVE 1
#define INACTIVE 0
void vRfSend(char *cBuff,int iLen);
void main
{
set_tris_b(0x5F); // B7,B4 output
// B6,B5 input
// B3-B0 none
set_tris_c(0xFF); // C7,C5,C4,C3,C2,C0 output
// C6,C1 input
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
unsigned char cSend[5]
cSend[0] = 0x01;
cSend[1] = 0x02;
cSend[2] = 0x03;
cSend[3] = 0x04;
cSend[4] = 0x05;
while(1)
{
vRfSend(cSend, 5);
delay_ms(1000);
}
}
void vRfSend(char *cBuff,int iLen)
{
int iCnt;
unsigned char buf[10];
int itemp = 0;
itemp = iLen;
memcpy(buf,cBuff,itemp);
iCnt = 0;
while(INACTIVE == input(RF_CTS))
{
;
}
// RTS INACTIVE
output_bit(PIN_B4, INACTIVE);
for(iCnt=0 ; iCnt < iLen ; iCnt++)
{
fputc(cBuff[iCnt],RFMODULE);
}
// RTS ACTIVE
output_bit(PIN_B4, ACTIVE);
}
#int_RDA
void RDA_isr(void)
{
unsigned char c;
c = 0x00;
c = fgetc(RFMODULE);
}
|
|
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri Feb 04, 2011 2:34 pm |
|
|
Quote: |
void main
{
#use rs232(baud=9600, parity=E, STOP=1, xmit=PIN_B7, rcv=PIN_B5, bits=8, restart_wdt, stream=RFMODULE, UART, ERRORS)
#use fast_io(C)
#use fast_io(B)
set_tris_b(0x5F); // B7,B4 output
// B6,B5 input
// B3-B0 none
set_tris_c(0xFF); // C7,C5,C4,C3,C2,C0 output
// C6,C1 input
output_bit(PIN_B4, INACTIVE);
|
0x5F = 0101 1111 in binary. A '1' means the Port bit is an input. So you
have set Port B to all inputs, except for B5 and B7, which are outputs.
This means the UART Rx pin (B5) won't work, because you have set it
to be an output.
Also, pin B4 won't work as an output, because you have set it to be an input.
Your comments don't match your TRIS settings for Port C.
It's best to let the compiler set the TRIS. Unlike other C compilers, CCS
will set the TRIS for you. Delete the two #fast_io statements and delete
the set_tris_x() statements and let the compiler handle it.
If it still doesn't work, there may be bugs in your version. In that case,
post your compiler version. It's a 4-digit number in this format: x.xxx
and its given at the top of your .LST file. |
|
![](templates/subSilver/images/spacer.gif) |
Masaya Tanaka
Joined: 04 Feb 2011 Posts: 5 Location: Japan
|
|
Posted: Sat Feb 05, 2011 12:06 am |
|
|
Thank you for your support.
When [set_tris_b(0x5F);] was changed to [set_tris_b(0x60);], the problem was solved.
However, the problem occurs when [#use fast_io] and [set_tris_x] are deleted.
Compiler Version is PCH 4.112. |
|
![](templates/subSilver/images/spacer.gif) |
|
|
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
|