I am new to ARM I have written a code for recieving the character from UART then Display it on the LCD for LPC2148 but when i run it in the proteus then LCD initialises correctly but when it comes to receive data it continuously runs my code is as Follows
#include<lpc214x.h>
#define RS (1<<16) #define RW (1<<17) #define EN (1<<18) #define data_pins (0xF<<19)
void UART0_init(void); void UART0_TX(unsigned int x); unsigned int UART0_RX(void); void lcd_cmd(unsigned char d); void lcd_data(unsigned char d); void lcd_init(void); void lcd_string(unsigned char *d); void delay(void);
unsigned char s;
int main(void) { UART0_init(); IO0DIR|=RS|EN|RW|data_pins; IO0CLR|=RW; lcd_init(); lcd_string("Initializng..."); while(1) { s=UART0_RX(); lcd_data(s); delay(); lcd_cmd(0xc0); //UART0_TX(s); } } void UART0_init(void) { PINSEL0|=(1<<0)|(1<<2); U0LCR=(1<<0)|(1<<1)|(1<<7); U0DLM=0; U0DLL=0x4E; U0LCR=0x03; U0FCR=(1<<0); } void UART0_TX(unsigned int x) { //U0TER=(1<<7); U0THR=x; while(!(U0LSR&(1<<5))); U0LSR=(1<<5); } unsigned int UART0_RX(void) { unsigned int x; while(!(U0LSR&(1<<0))); x=U0RBR; U0LSR=(1<<0); return x; } unsigned char usart_rx(void) { unsigned char d; while(!(U0LSR & 0x01)); d=U0RBR; return d; } void lcd_init(void) { lcd_cmd(0x02); lcd_cmd(0x28); lcd_cmd(0x28); lcd_cmd(0x06); lcd_cmd(0x01); lcd_cmd(0x0E); lcd_cmd(0x80); } void lcd_data(unsigned char d) { IO0CLR|=data_pins; IO0SET|=data_pins&(d<<15); IO0SET|=RS; IO0SET|=EN; delay(); IO0CLR|=EN;
IO0CLR|=data_pins; IO0SET|=data_pins&(d<<19); IO0SET|=EN; delay(); IO0CLR|=EN; } void lcd_cmd(unsigned char d) { IO0CLR|=data_pins; IO0SET|=data_pins&(d<<15); IO0CLR|=RS; IO0SET|=EN; delay(); IO0CLR|=EN;
IO0CLR|=data_pins; IO0SET|=data_pins&(d<<19); IO0SET|=EN; delay(); IO0CLR|=EN; } void lcd_string(unsigned char *d) { while(d!='\0') { lcd_data(*d); d++; } } void delay(void) { int i,j; for(i=0;i<50;i++) { for(j=0;j<500;j++); } } i think recieve function goes to recursion condition but how to stop it i am unable to Find
"my code is as Follows"
If that is what your code looks like, then I see big black clouds over your house.
Wouldn't it be much better if the code had some form of identation and settled for just one command per line?
#include <stdio.h> #include <stdlib.h> int main(void) { printf("Hello World!\n"); return EXIT_SUCCESS; }
Copy your original code out of the Keil IDE, don't cut and paste your first broken post. If it looks like nonsense in the "Preview" it's going to look like crap when you "Post" it.