Uart TX

Discussion about projects that used PIC Microcontroller, Hardware Interface, Programming Algorithm and etc......

Uart TX

Postby naixiew » Tue Jul 16, 2013 4:19 pm

hi people,

I'm using Hi Tech C to program my PIC16LF1946.

I have taken the Uart TX and RX code from Cytron to send data from the PIC to my PC via 2 XBees.

Data is sent successfully but the TX pin keeps on transmitting data even though i put it in a for loop that run once.

I even tried to disable TXEN and SPEN after the tranmission but its not working.

Any idea? Sorry though, i cant upload my main file in either .c, .txt or .pdf format.
CODE: SELECT_ALL_CODE
#define _XTAL_FREQ 16000000
#include <htc.h>

#include "delay.h"
#include "string.h"

__CONFIG (FOSC_INTOSC & PWRTE_ON&WDTE_OFF & MCLRE_ON & PLLEN_OFF & BOREN_ON&WRT_OFF & LVP_OFF&FCMEN_ON & STVREN_OFF & BOREN_OFF&CPD_ON&CP_ON) ;

void InitLCD(void);
void SetChOne(unsigned char ch);
void SetChTwo(unsigned char ch);
void SetChThree(unsigned char ch);
void SetChFour(unsigned char ch);
void SetLCDcol(void);
void transmit(unsigned char data);

void uart_send(unsigned char data)   
{
    while(TXIF == 0);         //wait for previous data to finish send out
    TXREG = data;         //send new data
}

//function to send string to UART
void uart_string(const char* string)
{
  while (*string != '\0')
  {
      uart_send(*string++);
      //string++; //point to next character
  }
}
 
void transmit(unsigned char data)
{
   uart_send(data);
}
void uart_str(const char *s)
{
while(*s)uart_send(*s++); // UART sending string
}


unsigned char uart_rec(void)      //function to wait for a byte receive from uart
{
   unsigned char temp;
   while(RCIF==0);               //wait for data to received
   temp=RCREG;               
   return temp;               //return the received data
}



void main(void)
{
int i=0,labela=1;

unsigned char input;
char tmpstr[]="hello\r";


RCIE=1;
INTE=1;
PEIE=1;
GIE=1;

InitLCD();
//PORTC=0x00;
TRISC=0b11000000;
OSCCON=0b01111010;
SPBRG=103;


RC1STA = 0b10010000;   
TX1STA = 0b00100100;
if(labela==1)
{
uart_string("RTT");
DelayMs(100);
labela=0;
}

}





void InitLCD(void)
{

LCDSE0 = 0xFF;   // enable first group of LCD segment outputs
LCDSE1 = 0xFF;   // enable second group of LCD segments
LCDSE2 = 0x00;   
LCDSE3 = 0x00;
LCDSE4 = 0x00;
LCDSE5 = 0x00;

LCDDATA0 = 0;   // clear LCD segment registers
LCDDATA1 = 0;
LCDDATA2 = 0;
LCDDATA3 = 0;
LCDDATA4 = 0;
LCDDATA5 = 0;
LCDDATA6 = 0;
LCDDATA7 = 0;
LCDDATA8 = 0;
LCDDATA9 = 0;
LCDDATA10 = 0;
LCDDATA11 = 0;
LCDDATA12 = 0;
LCDDATA13 = 0;
LCDDATA14 = 0;
LCDDATA15 = 0;
LCDDATA16 = 0;
LCDDATA17 = 0;
LCDDATA18 = 0;
LCDDATA19 = 0;
LCDDATA20 = 0;
LCDDATA21 = 0;
LCDDATA22 = 0;
LCDDATA23 = 0;         // clear LCD segment registers

            
LCDPS  =  0x60;    //  seems ok, tho check the datasheet once more                  
LCDCON =  0x89;    //  seems ok.   
LCDREF =  0x80;       //    the last part has to be zero, need help in the upper part
LCDCST =  0x00;      //  max contrast
LCDRL  =  0xF0;     //  check it with mr.raj

}

void SetChOne(unsigned char ch1)
{
  int temp;
  temp = ch1 ;

   switch(temp)
      {
         case 1:
            SEG15COM1 = 0;  // segment 1A
            SEG14COM1 = 1;  // segment 1B
            SEG1COM1  = 1;  // segment 1C
            SEG0COM1  = 0;  // segment 1D
            SEG0COM0  = 0;  // Segment 1E
            SEG14COM0 = 0;  // Segment 1F
            SEG1COM0  = 0;  // segment 1G
        break;

        case 2:
         SEG15COM1 = 1;   // segment 1A
            SEG14COM1 = 1;   // segment 1B
            SEG1COM1  = 0;   // segment 1C
            SEG0COM1  = 1;   // segment 1D
            SEG0COM0  = 1;   // segment 1E
            SEG14COM0 = 0;   // Segment 1F 
            SEG1COM0  = 1;   // segment 1G
         break;


        case 3:
         SEG15COM1 = 1;   // segment 1A
            SEG14COM1 = 1;   // segment 1B
            SEG1COM1  = 1;   // segment 1C
            SEG0COM1  = 1;   // segment 1D
            SEG0COM0  = 0;   // segment 1E
            SEG14COM0 = 0;   // Segment 1F 
            SEG1COM0  = 1;   // segment 1G

         break;

        case 4:
         SEG15COM1 = 0;   // segment 1A
            SEG14COM1 = 1;   // segment 1B
            SEG1COM1  = 1;   // segment 1C
            SEG0COM1  = 0;   // segment 1D
            SEG0COM0  = 0;   // segment 1E
            SEG14COM0 = 1;   // Segment 1F 
            SEG1COM0  = 1;   // segment 1G
         break;

        case 5:
         SEG15COM1 = 1;   // segment 1A
            SEG14COM1 = 0;   // segment 1B
            SEG1COM1  = 1;   // segment 1C
            SEG0COM1  = 1;   // segment 1D
            SEG0COM0  = 0;   // segment 1E
            SEG14COM0 = 1;   // Segment 1F 
            SEG1COM0  = 1;   // segment 1G
         break;

        case 6:
         SEG15COM1 = 1;   // segment 1A
            SEG14COM1 = 0;   // segment 1B
            SEG1COM1  = 1;   // segment 1C
            SEG0COM1  = 1;   // segment 1D
            SEG0COM0  = 1;   // segment 1E
            SEG14COM0 = 1;   // Segment 1F 
            SEG1COM0  = 1;   // segment 1G
         break;

        case 7:
         SEG15COM1 = 1;   // segment 1A
            SEG14COM1 = 1;   // segment 1B
            SEG1COM1  = 1;   // segment 1C
            SEG0COM1  = 0;   // segment 1D
            SEG0COM0  = 0;   // segment 1E
            SEG14COM0 = 0;   // Segment 1F 
            SEG1COM0  = 0;   // segment 1G
        break;

        case 8:
            SEG15COM1 = 1;   // segment 1A
            SEG14COM0 = 1;   // Segment 1F
            SEG1COM0  = 1;   // segment 1G
            SEG1COM1  = 1;   // segment 1C
            SEG0COM1  = 1;   // segment 1D
            SEG0COM0  = 1;   // segment 1E
            SEG14COM1 = 1;   // segment 1B
         break;

        case 9:
         SEG15COM1 = 1;   // segment 1A
            SEG14COM1 = 1;   // segment 1B
            SEG1COM1  = 1;   // segment 1C
            SEG0COM1  = 0;   // segment 1D
            SEG0COM0  = 0;   // segment 1E
            SEG14COM0 = 1;   // Segment 1F 
            SEG1COM0  = 1;   // segment 1G
           
         break;

        case 0:
         SEG15COM1 = 1;   // segment 1A
            SEG14COM1 = 1;   // segment 1B
            SEG1COM1  = 1;   // segment 1C
            SEG0COM1  = 1;   // segment 1D
            SEG0COM0  = 1;   // segment 1E
            SEG14COM0 = 1;   // Segment 1F 
            SEG1COM0  = 0;   // segment 1G
         break;
         
         case 'c':
            SEG15COM1 = 0;   // segment 1A
            SEG14COM1 = 0;   // segment 1B
            SEG1COM1  = 0;   // segment 1C
            SEG0COM1  = 0;   // segment 1D
            SEG0COM0  = 0;   // segment 1E
            SEG14COM0 = 0;   // Segment 1F 
            SEG1COM0  = 0;   // segment 1G
         break;
   
         case 'P':
            SEG15COM1 = 1;   // segment 1A
            SEG14COM1 = 1;   // segment 1B
            SEG1COM1  = 0;   // segment 1C
            SEG0COM1  = 0;   // segment 1D
            SEG0COM0  = 1;   // segment 1E
            SEG14COM0 = 1;   // Segment 1F 
            SEG1COM0  = 1;   // segment 1G
         break;
      }
}

void SetChTwo(unsigned char ch2)
{
     int temp;
     temp = ch2;
     switch(temp)
      {
         case 1:
             SEG13COM1 = 0;  // Segment 2A
             SEG12COM1 = 1;  // Segment 2B
             SEG3COM1  = 1;  // Segment 2C
             SEG2COM1  = 0;  // Segment 2D
             SEG2COM0  = 0;  // Segment 2E
             SEG12COM0 = 0;  // Segment 2F
             SEG3COM0  = 0;  // Segment 2G
             
        break;

        case 2:
             SEG13COM1 = 1;  // Segment 2A
             SEG12COM1 = 1;  // Segment 2B
             SEG3COM1  = 0;  // Segment 2C
             SEG2COM1  = 1;  // Segment 2D
             SEG2COM0  = 1;  // Segment 2E
             SEG12COM0 = 0;  // Segment 2F
             SEG3COM0  = 1;  // Segment 2G
         break;

        case 3:
              SEG13COM1 = 1;  // Segment 2A
             SEG12COM1 = 1;  // Segment 2B
             SEG3COM1  = 1;  // Segment 2C
             SEG2COM1  = 1;  // Segment 2D
             SEG2COM0  = 0;  // Segment 2E
             SEG12COM0 = 0;  // Segment 2F
             SEG3COM0  = 1;  // Segment 2G
         break;

        case 4:
             SEG13COM1 = 0;  // Segment 2A
             SEG12COM1 = 1;  // Segment 2B
             SEG3COM1  = 1;  // Segment 2C
             SEG2COM1  = 0;  // Segment 2D
             SEG2COM0  = 0;  // Segment 2E
             SEG12COM0 = 1;  // Segment 2F
             SEG3COM0  = 1;  // Segment 2G
         break;

        case 5:
             SEG13COM1 = 1;  // Segment 2A
             SEG12COM1 = 0;  // Segment 2B
             SEG3COM1  = 1;  // Segment 2C
             SEG2COM1  = 1;  // Segment 2D
             SEG2COM0  = 0;  // Segment 2E
             SEG12COM0 = 1;  // Segment 2F
             SEG3COM0  = 1;  // Segment 2G
         break;

        case 6:
             SEG13COM1 = 1;  // Segment 2A
             SEG12COM1 = 0;  // Segment 2B
             SEG3COM1  = 1;  // Segment 2C
             SEG2COM1  = 1;  // Segment 2D
             SEG2COM0  = 1;  // Segment 2E
             SEG12COM0 = 1;  // Segment 2F
             SEG3COM0  = 1;  // Segment 2G
         break;

        case 7:
             SEG13COM1 = 1;  // Segment 2A
             SEG12COM1 = 1;  // Segment 2B
             SEG3COM1  = 1;  // Segment 2C
             SEG2COM1  = 0;  // Segment 2D
             SEG2COM0  = 0;  // Segment 2E
             SEG12COM0 = 0;  // Segment 2F
             SEG3COM0  = 0;  // Segment 2G
        break;

        case 8:
             SEG13COM1 = 1;  // Segment 2A
             SEG12COM1 = 1;  // Segment 2B
             SEG3COM1  = 1;  // Segment 2C
             SEG2COM1  = 1;  // Segment 2D
             SEG2COM0  = 1;  // Segment 2E
             SEG12COM0 = 1;  // Segment 2F
             SEG3COM0  = 1;  // Segment 2G
         break;

        case 9:
             SEG13COM1 = 1;  // Segment 2A
             SEG12COM1 = 1;  // Segment 2B
             SEG3COM1  = 1;  // Segment 2C
             SEG2COM1  = 0;  // Segment 2D
             SEG2COM0  = 0;  // Segment 2E
             SEG12COM0 = 1;  // Segment 2F
             SEG3COM0  = 1;  // Segment 2G
         break;

        case 0:
             SEG13COM1 = 1;  // Segment 2A
             SEG12COM1 = 1;  // Segment 2B
             SEG3COM1  = 1;  // Segment 2C
             SEG2COM1  = 1;  // Segment 2D
             SEG2COM0  = 1;  // Segment 2E
             SEG12COM0 = 1;  // Segment 2F
             SEG3COM0  = 0;  // Segment 2G
         break;
      
         case 'c':
             SEG13COM1 = 0;  // Segment 2A
             SEG12COM1 = 0;  // Segment 2B
             SEG3COM1  = 0;  // Segment 2C
             SEG2COM1  = 0;  // Segment 2D
             SEG2COM0  = 0;  // Segment 2E
             SEG12COM0 = 0;  // Segment 2F
             SEG3COM0  = 0;  // Segment 2G
        break;



      }

}
naixiew
Greenhorn
 
Posts: 2
Joined: Tue Jul 16, 2013 4:01 pm

Re: Uart TX

Postby yonghui » Thu Jul 18, 2013 1:53 pm

look at this portion:
CODE: SELECT_ALL_CODE
void main(void)
{
int i=0,labela=1;

unsigned char input;
char tmpstr[]="hello\r";


RCIE=1;
INTE=1;
PEIE=1;
GIE=1;

InitLCD();
//PORTC=0x00;
TRISC=0b11000000;
OSCCON=0b01111010;
SPBRG=103;


RC1STA = 0b10010000;   
TX1STA = 0b00100100;
if(labela==1)
{
uart_string("RTT");
DelayMs(100);
labela=0;
}

}



can u create a while(1) loop in the main loop, i suspect the main loop keep updating the labela to 1 in this line "int i=0,labela=1;"


so make it like this
main
{

int i=0,labela=1;

while(1)
{
//ur code here:

}



}
thanks&regards,
yh
yonghui
Moderator
 
Posts: 732
Joined: Mon Sep 28, 2009 3:27 pm

Re: Uart TX

Postby naixiew » Thu Jul 18, 2013 3:02 pm

hi yonghui,

i have made the adjustment but now the UART wouldnt send anything out. Any more ideas?

Any help is appreciated. :D




#define _XTAL_FREQ 16000000
#include <htc.h>

#include "delay.h"
#include "string.h"

__CONFIG (FOSC_INTOSC & PWRTE_ON&WDTE_OFF & MCLRE_ON & PLLEN_OFF & BOREN_ON&WRT_OFF & LVP_OFF&FCMEN_ON & STVREN_OFF & BOREN_OFF&CPD_ON&CP_ON) ;

void InitLCD(void);
void SetChOne(unsigned char ch);
void SetChTwo(unsigned char ch);
void SetChThree(unsigned char ch);
void SetChFour(unsigned char ch);
void SetLCDcol(void);


void uart_send(unsigned char data)
{
while(TXIF == 0); //wait for previous data to finish send out
TXREG = data; //send new data
// TXREG = data;
// while(PIR1bits.TXIF==0);
// PIR1bits.TXIF = 0;
}
void uart_str(const char *s)
{
while(*s)uart_send(*s++); // UART sending string
}



unsigned char uart_rec(void) //function to wait for a byte receive from uart
{
unsigned char temp;
while(RCIF==0); //wait for data to received
temp=RCREG;
return temp; //return the received data
}



void main(void)
{
int i=0,labela=1;

unsigned char input;
char tmpstr[]="hello\r";


RCIE=1;
INTE=1;
PEIE=1;
GIE=1;

InitLCD();
TRISC=0b11000000;
OSCCON=0b01111010;
SPBRG=25;


RC1STA = 0b10010100;
TX1STA = 0b00100000;
while(1)
{
if(labela==1)
{
uart_str("RTT");
DelayMs(100);
labela=0;
}

}
}
naixiew
Greenhorn
 
Posts: 2
Joined: Tue Jul 16, 2013 4:01 pm


Return to PIC Microcontroller

Who is online

Users browsing this forum: No registered users and 26 guests