we have weitten this program to recieve and display coordinates on display.
but problem is that the control doesnt come out of receive_data() function.
//------------------------------------------------------------
#include<avr/io.h>
#include<compat/deprecated.h>
#include<util/delay.h>
#include<ilcd.h>
//------------------------------------------------------------
#define SID 5
#define CID 5
#define RID 2
//------------------------------------------------------------
void init_usart(void);
unsigned char receive_data(void);
void config_cc(void);
void transmit_data(unsigned char data);
void left_speed(char left_speed);
void right_speed(char right_speed);
void init_port(void);
//------------------------------------------------------------
unsigned char a,x,y,z;
int main(void)
{
init_port();
init_usart();
lcd_init();
write_command(0x80);
lcd_prints("PLEASE WAIT !!!");
write_command(0xC2);
lcd_prints("CONFIGURING");
_delay_ms(4000);
config_cc(); //CONFIGURING
_delay_ms(4000);
lcd_clrscr();
while(1)
{
transmit_data(RID);
a=receive_data();
if(a == '@' )
{
x=receive_data();
y=receive_data();
z=receive_data();
}
write_command(0x80);
lcd_prints("X= ");
lcd_printi(x);
write_command(0x88);
lcd_prints("Y= ");
lcd_printi(y);
write_command(0xc0);
lcd_prints("Z= ");
lcd_printi(z);
_delay_ms(50);
lcd_clrscr();
}
}
void init_port(void)
{
DDRB=0b00000000;
DDRC=0b11111111;
DDRD=0b00110000;
DDRA=0b11111111;
}
void init_usart(void)
{
UBRRL = 103;
UCSRB = ((1 << RXEN) | (1 << TXEN));
UCSRC = ((1 <<URSEL) | (1 <<UCSZ0) | (1 <<UCSZ1));
}
unsigned char receive_data(void)
{
while(!(UCSRA & (1<<RXC)))
{
; // DONOTHING LOOP
}
return UDR;
}
void config_cc(void)
{
transmit_data('<');
transmit_data(SID);
transmit_data(CID);
transmit_data('>');
}
void transmit_data(unsigned char data)
{
while(! (UCSRA & (1 << UDRE)))
{
; // DONOTHING LOOP
}
UDR = data;
}
