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;
}
}