You are on page 1of 3

#include <pic.

h> // pic specific identifiers


#define _XTAL_FREQ 4000000 // Xtal speed
__CONFIG(0x2130); // Config bits

#define LCD_PORT PORTA


#define LCD_TRIS TRISA
#define LCD_RS RB5
#define LCD_RW RB6
#define LCD_E RB7
#define TX RB2
#define RX RB1

#define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0)))


#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))

void pulse_E();
void LCD_char(unsigned char);
void LCD_init(void), LCD_cmd(unsigned char ch);
void LCD_goto(char line, char column), LCD_clr(void);
void initialize();
void clear_usart_errors_inline();
void loadTXREG(int);
int receiveTransmission();

unsigned char build_cmd(unsigned char, unsigned char);


unsigned char text1[] = {"Hello Youtube!"};
int dummy;
int received;

main()
{

initialize();

int index =0;


while(text1[index] != 0) // while text1[index] is'nt zero
LCD_char(text1[index++]); // write message 1

__delay_ms(1000);
LCD_goto(2,0);
while(1){
received = receiveTransmission();
LCD_char(received);
loadTXREG(received);

}
}

void initialize (){


TRISA=0b00000000;

TRISB=0b00000110; //TRISB<1> and TRISB<2> should both be


set as inputs
INTCON=0b01000000;
RCIF=0;
TXIF=0;
PIE1=0b00100000;

PORTA=0x00;
PORTB=0x00;

TXSTA = 0b00000110;//setting USART


RCSTA = 0b10010000;//setting USART
SPBRG = 25;
TXEN=1;

CMCON = 0x7; // comparators off


__delay_ms(100);

LCD_init(); // Initalise screen


LCD_goto(1,0); // line 1.

void LCD_init()
{
LCD_cmd(0x2c); // 4 bit
LCD_cmd(0x28); // display shift
LCD_cmd(0x6); // character mode
LCD_cmd(0xd); // display on and cursor on
LCD_clr(); // clear display
}

void LCD_goto(char line, char column) // combines line and lineW


{
unsigned char data = 0x80; // default to 1
if(line == 2)data = 0xc0; // change to 2
data += column; // add in column
LCD_cmd(data);
}

void LCD_clr()
{
LCD_cmd(1); // Clr screen
}

void LCD_cmd(unsigned char ch)


{
LCD_PORT = ch >> 4 & 0xf;
LCD_RS = 0;
pulse_E();
LCD_PORT = ch & 0xf;
LCD_RS = 0;
pulse_E();
__delay_ms(5);
}

void LCD_char(unsigned char ch)


{
LCD_PORT = ch >> 4 & 0xf;
LCD_RS = 1;
pulse_E();
LCD_PORT = ch & 0xf;
LCD_RS = 1;
pulse_E();
__delay_ms(5);
}

void pulse_E()
{
LCD_E = 1;
__delay_us(1);
LCD_E = 0;
}
void loadTXREG(int c){

while(!TXIF) //set when register is empty


{
clear_usart_errors_inline;
CLRWDT();
}
TXREG=c;

int receiveTransmission(){
while(!RCIF)
{
CLRWDT();
clear_usart_errors_inline();
}
return RCREG;
}

void clear_usart_errors_inline(){
if (OERR)
{
TXEN=0;
TXEN=1;
CREN=0;
CREN=1;
}
if (FERR)
{
dummy=RCREG;
TXEN=0;
TXEN=1;
}
}

You might also like