Sign in

username:

password:



Not a member?

Search piclist



Search tips

Subscribe to piclist



piclist by Keywords

12F675 | 16F628 | 16F84 | 16f877 | 16F877A | 16F88 | 18F458 | ADC | AVR | Bootloader | CAN | CCS | CRC | EAGLE | EEPROM | ICD | ICSP | IDE | JDM | LED | Macros | Microchip | MPLAB | PCB-CAD | PIC10F | Pic12f675 | PIC16F84 | PIC16F84A | PIC16F877 | PIC18 | PIC18F452 | PicBasic | PICC | PICSTART | PWM | RS-485 | RS232 | SMT | SPI | UART | USART | USB | Wireless | Wisp628 | Xilinx

Discussion Groups

Discussion Groups | Piclist | Having trouble with recieving data with PIC18F452 HW USART

A discussion group for the PICMicro microcontroller. Also called the Microchip PIC, this list is dedicated to the use and abuse of this fine, simple, microcontroller. Close to topic posts are welcome, ie. general electronics.

Having trouble with recieving data with PIC18F452 HW USART - Travis L. F Bailey - Nov 29 0:29:00 2003


I am trying to get the serial to work on my pic18f452 chip. I can print
data to hyperterm from pic with no problem. But, I can not figure out
how to get data from hypterterm to the pic.

I am able to print, here is a sample of my output:
First 2 RCSTA 144 TXSTA 160 First 3 RCSTA 144 TXSTA 160 First 4 RCSTA
144 TXSTA
160 First 5 RCSTA 144 TXSTA 160 First 6 RCSTA 144 TXSTA 160 First 7
RCSTA 144 T
XSTA 160 First 8 RCSTA 144 TXSTA 160 First 9 RCSTA 144 TXSTA 160 First
10 RCSTA
144 TXSTA 160

I think everything is set properly, but I am not sure.

Does anyone see any obvoius errors in my code?

Thanks,

Travis MPLAB C18 Code I am using: #include <p18cxxx.h> /* for TRISB and PORTB declarations */
#include <delays.h>
#include <usart.h>
#include <stdlib.h>

int shorttime;
int longtime;
int counter;
char data;
char counter_data[20];
char rcsta_data[20];
char txsta_data[20];

void main (void)
{
TRISB = 0; /* configure PORTB for output */
LATB = 0;
shorttime = 5;
longtime = 100;
counter = 1; OpenUSART (USART_TX_INT_OFF & USART_RX_INT_OFF &
USART_ASYNCH_MODE & USART_EIGHT_BIT &
USART_CONT_RX & USART_BRGH_LOW, 25);

while (1)
{
PORTB = 3; /* display value of 'counter' on the LEDs */
Delay10KTCYx(longtime); /* delay 1000 */
while (counter < 10)
{
counter++;
itoa(counter,&counter_data);
putrsUSART (" First " );
putsUSART ( &counter_data );

itoa(RCSTA,&rcsta_data);
putrsUSART (" RCSTA " );
putsUSART ( &rcsta_data );

itoa(TXSTA,&txsta_data);
putrsUSART (" TXSTA " );
putsUSART ( &txsta_data );

PORTB = 7;
Delay10KTCYx(longtime);
PORTB = 5;
Delay10KTCYx(longtime);
}

PORTB = 1;
while (1) {
/* Problem is here somewhere.... */
while(!DataRdyUSART())
{
/*
Blink LED's until input is recieved
Stays in here forever......
*/
PORTB = 128;
Delay10KTCYx(longtime);
PORTB = 0;
Delay10KTCYx(longtime);
}

data = ReadUSART();
putrsUSART ( " Input: " );
WriteUSART ( data );
if (data=='d')
{
PORTB = 5;
Delay10KTCYx(longtime);
}
if (data=='s')
{
PORTB = 31;
Delay10KTCYx(longtime);
}

if (data=='q')
break;
}

}
}





(You need to be a member of piclist -- send a blank email to piclist-subscribe@yahoogroups.com )

Re: Having trouble with recieving data with PIC18F452 HW USART - atomic_ant - Dec 2 14:52:00 2003

here my init code in hi-tech c
if you want tx interrupt de-comment le line
change the baud rate and and crystal to match your setup
in hytertem uncheck hardware flow control, xon-xoff

regards
S.

#include <pic18.h>
#include <stdio.h #define BAUD 9600
#define FOSC 2000000L
#define NINE 0 /* Use 9bit communication? FALSE=8bit */

#define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))
#define HIGH_SPEED 1

#if NINE == 1
#define NINE_BITS 0x40
#else
#define NINE_BITS 0
#endif

#if HIGH_SPEED == 1
#define SPEED 0x4
#else
#define SPEED 0
#endif

/* Serial initialization */
void init_comms(void)
{
SPBRG =129; //DIVIDER;
//TXIE=1; //enable tx/rx interrupt
RCIE=1;
TXSTA = (SPEED|NINE_BITS|0x20);
RCSTA = (NINE_BITS|0x90);
}

void putch(unsigned char byte)
{
/* output one byte */
while(!TXIF) /* set when register is empty */
continue;
TXREG = byte;
}

unsigned char getch()
{
/* retrieve one byte */
while(!RCIF) /* set when register is not empty */
continue;
return RCREG;
}

unsigned char getche(void)
{
unsigned char c;
putch(c = getch());
return c;
}

void print(const uchar *string)
{
while(*string!='\0')
{
putch(*string);
string++;
}
putch(0x0d);// cr
}
--- In , "Travis L. F Bailey" <tbailey@l...>
wrote:
> I am trying to get the serial to work on my pic18f452 chip. I can
print
> data to hyperterm from pic with no problem. But, I can not figure
out
> how to get data from hypterterm to the pic.
>
> I am able to print, here is a sample of my output:
> First 2 RCSTA 144 TXSTA 160 First 3 RCSTA 144 TXSTA 160 First 4
RCSTA
> 144 TXSTA
> 160 First 5 RCSTA 144 TXSTA 160 First 6 RCSTA 144 TXSTA 160 First
7
> RCSTA 144 T
> XSTA 160 First 8 RCSTA 144 TXSTA 160 First 9 RCSTA 144 TXSTA 160
First
> 10 RCSTA
> 144 TXSTA 160
>
> I think everything is set properly, but I am not sure.
>
> Does anyone see any obvoius errors in my code?
>
> Thanks,
>
> Travis > MPLAB C18 Code I am using: > #include <p18cxxx.h> /* for TRISB and PORTB declarations */
> #include <delays.h>
> #include <usart.h>
> #include <stdlib.h>
>
> int shorttime;
> int longtime;
> int counter;
> char data;
> char counter_data[20];
> char rcsta_data[20];
> char txsta_data[20];
>
> void main (void)
> {
> TRISB = 0; /* configure PORTB for output */
> LATB = 0;
> shorttime = 5;
> longtime = 100;
> counter = 1; > OpenUSART (USART_TX_INT_OFF & USART_RX_INT_OFF &
> USART_ASYNCH_MODE & USART_EIGHT_BIT &
> USART_CONT_RX & USART_BRGH_LOW, 25);
>
> while (1)
> {
> PORTB = 3; /* display value of 'counter' on the LEDs */
> Delay10KTCYx(longtime); /* delay 1000 */
> while (counter < 10)
> {
> counter++;
> itoa(counter,&counter_data);
> putrsUSART (" First " );
> putsUSART ( &counter_data );
>
> itoa(RCSTA,&rcsta_data);
> putrsUSART (" RCSTA " );
> putsUSART ( &rcsta_data );
>
> itoa(TXSTA,&txsta_data);
> putrsUSART (" TXSTA " );
> putsUSART ( &txsta_data );
>
> PORTB = 7;
> Delay10KTCYx(longtime);
> PORTB = 5;
> Delay10KTCYx(longtime);
> }
>
> PORTB = 1;
> while (1) {
> /* Problem is here somewhere.... */
> while(!DataRdyUSART())
> {
> /*
> Blink LED's until input is recieved
> Stays in here forever......
> */
> PORTB = 128;
> Delay10KTCYx(longtime);
> PORTB = 0;
> Delay10KTCYx(longtime);
> }
>
> data = ReadUSART();
> putrsUSART ( " Input: " );
> WriteUSART ( data );
> if (data=='d')
> {
> PORTB = 5;
> Delay10KTCYx(longtime);
> }
> if (data=='s')
> {
> PORTB = 31;
> Delay10KTCYx(longtime);
> }
>
> if (data=='q')
> break;
> }
>
> }
> }





(You need to be a member of piclist -- send a blank email to piclist-subscribe@yahoogroups.com )

Re: Re: Having trouble with recieving data with PIC18F452 HW USART - Travis L. F Bailey - Dec 2 22:13:00 2003


Thanks!!
   I will review and give it a shot.

Travis atomic_ant wrote:
here my init code in hi-tech c
if you want tx interrupt de-comment le line change the baud rate and and crystal to match
your setup
in hytertem uncheck hardware flow control, xon-xoff
regards
S.
#include <pic18.h>
#include <stdio.h>
#define BAUD 9600 #define FOSC 2000000L
#define NINE 0 /* Use 9bit communication? FALSE=8bit */
#define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))
#define HIGH_SPEED 1
#if NINE == 1
#define NINE_BITS 0x40
#else
#define NINE_BITS 0
#endif
#if HIGH_SPEED == 1
#define SPEED 0x4
#else
#define SPEED 0
#endif
/* Serial initialization */
void init_comms(void)
{
SPBRG =129; //DIVIDER; //TXIE=1;	//enable tx/rx interrupt
RCIE=1; TXSTA = (SPEED|NINE_BITS|0x20);
RCSTA = (NINE_BITS|0x90);
}
void putch(unsigned char byte) {
/* output one byte */
while(!TXIF)	/* set when register is empty */
continue;
TXREG = byte;
}
unsigned char getch()
{
/* retrieve one byte */
while(!RCIF)	/* set when register is not empty */
continue;
return RCREG;	}
unsigned char getche(void)
{
unsigned char c;
putch(c = getch());
return c;
}
void print(const uchar *string)
{
while(*string!='\0')
{
putch(*string);
string++;
}
putch(0x0d);// cr
}
--- In p...@yahoogroups.com, "Travis L. F Bailey" <tbailey@l...> wrote:
I am trying to get the serial to work on my pic18f452 chip. I can 
print 
data to hyperterm from pic with no problem. But, I can not figure 
out 
how to get data from hypterterm to the pic.
I am able to print, here is a sample of my output:
First 2 RCSTA 144 TXSTA 160 First 3 RCSTA 144 TXSTA 160 First 4 
RCSTA 
144 TXSTA
160 First 5 RCSTA 144 TXSTA 160 First 6 RCSTA 144 TXSTA 160 First 
7 
RCSTA 144 T
XSTA 160 First 8 RCSTA 144 TXSTA 160 First 9 RCSTA 144 TXSTA 160 
First 
10 RCSTA
144 TXSTA 160
I think everything is set properly, but I am not sure.
Does anyone see any obvoius errors in my code?
Thanks,
Travis
MPLAB C18 Code I am using:
#include <p18cxxx.h> /* for TRISB and PORTB declarations */
#include <delays.h>
#include <usart.h>
#include <stdlib.h>
int shorttime;
int longtime;
int counter;
char data;
char counter_data[20];
char rcsta_data[20];
char txsta_data[20];
void main (void)
{
TRISB = 0; /* configure PORTB for output */
LATB = 0;
shorttime = 5;
longtime = 100;
counter = 1;
OpenUSART (USART_TX_INT_OFF & USART_RX_INT_OFF &
USART_ASYNCH_MODE & USART_EIGHT_BIT &
USART_CONT_RX & USART_BRGH_LOW, 25);
while (1)
{
PORTB = 3; /* display value of 'counter' on the LEDs */
Delay10KTCYx(longtime); /* delay 1000 */
while (counter < 10)
{
counter++;
itoa(counter,&counter_data);
putrsUSART (" First " );
putsUSART ( &counter_data );
itoa(RCSTA,&rcsta_data);
putrsUSART (" RCSTA " );
putsUSART ( &rcsta_data );
itoa(TXSTA,&txsta_data);
putrsUSART (" TXSTA " );
putsUSART ( &txsta_data );
PORTB = 7;
Delay10KTCYx(longtime);
PORTB = 5;
Delay10KTCYx(longtime);
}
PORTB = 1;
while (1) {
/* Problem is here somewhere.... */
while(!DataRdyUSART())
{
/*
Blink LED's until input is recieved
Stays in here forever......
*/
PORTB = 128;
Delay10KTCYx(longtime);
PORTB = 0;
Delay10KTCYx(longtime);
}
data = ReadUSART();
putrsUSART ( " Input: " );
WriteUSART ( data );
if (data=='d')
{
PORTB = 5;
Delay10KTCYx(longtime);
}
if (data=='s')
{
PORTB = 31;
Delay10KTCYx(longtime);
}
if (data=='q')
break;
}
}
}

------------------------ Yahoo! Groups Sponsor ---------------------~-->
Buy Ink Cartridges or Refill Kits for your HP, Epson, Canon or Lexmark
Printer at MyInks.com. Free s/h on orders $50 or more to the US & Canada.
http://www.c1tracking.com/l.asp?cid=5511
http://us.click.yahoo.com/mOAaAA/3exGAA/qnsNAA/dN_tlB/TM
---------------------------------------------------------------------~->
to unsubscribe, go to http://www.yahoogroups.com and follow the instructions  




(You need to be a member of piclist -- send a blank email to piclist-subscribe@yahoogroups.com )