Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

Sw_uart..

Status
Not open for further replies.

Noora

New Member
Dear all,
I'm working on a project that includes receiving data from a GPS receiver, pre-process it on a PIC and store the result on SD-Card.
For this project I'm using PICDEM FS USB Demo Board, PICTail Daughter board for the mass storage. I'm trying to do a software serial communication between the receiver & Board which has PIC18F4550 because when using the hardware USART, the RX pin conflicts with SD0 (i.e in & out at the same time). I don't get correct output. Everyone have told me that the code is correct but still couldn't find what's causing the strange output :confused:

Here is my code & what I got as output.
Code:
#include <p18f4550.h> 
#include <sw_uart.h> 
#include <delays.h>
#define config WDT = OFF
#define CLK 48000000
#define BAUD 9600 
/* FUNCTION PROTOTYPES */
void DelayTXBitUART(void);
void DelayRXHalfBitUART(void);
void DelayRXBitUART(void);
/* END FUNCTION PROTOTYPES */
//Main
void main (void) 
{  
TRISD=0;
PORTD=0;
TRISBbits.TRISB4=0;   //TX (out)
TRISBbits.TRISB5=1;  //Rx (in)
PORTBbits.RB4=0; 
ADCON0 = 0x00; 
ADCON1 = 0x0F;  
OpenUART();
WriteUART('G');
PORTD=8;
while(1)
{ 
 PORTD=ReadUART();
Delay1TCY();
WriteUART(PORTD);
putsUART("Hello");
}
PORTD=2;
}
//End
//Delay Functions
//===============
void DelayTXBitUART(void)
{
char delay_time = (((((2*CLK)/(4*BAUD))+1)/2)-12)/10;
Delay10TCYx (delay_time/*124*/);
//return;
}
void DelayRXHalfBitUART(void)
{
char delay_time = (((((2*CLK)/(8*BAUD))+1)/2)-9)/10;
Delay10TCYx (delay_time/*306*/);
//return;
}
void DelayRXBitUART(void)
{
char delay_time = (((((2*CLK)/(4*BAUD))+1)/2)-14)/10;
Delay10TCYx (delay_time/*124*/);
//return;
}
/////////////////////////////////////////////////////////////
the Config Bits:
1. clock src from 96MHz PPL/2
2. OSC1/OSC2 src:/1, 96MHz PPL src:/2
3. divide by 5 (20MHz input)
4. Oscillator: HS:HS+PPL, USB-HS
5. Baud rate=9600

I'm using MPLAB C18.

At the begining PORTD value is 8 and then all the LEDs connected to that port are OFF. I never got the letter G on the hyper terminal and whenever I type a number OR letter on the hyper terminal I got someting else(which is not correct because whatever value recieved must be sent back) (e.g when typing 1 I got = and sometimes o) and never got 'Hello".

Waitnig for your replies.

Regards,
 
Status
Not open for further replies.

Latest threads

New Articles From Microcontroller Tips

Back
Top