|
具体现象:
LPC2132程序设置接受PC发送的 6位数据,并返回给PC接收的6位数据 。但是如果,PC一次发送8位数据给LPC2132,则第一次接收的数据为PC发送的前6位数据,第二次PC发送8位数据值LCP2132的时候,返回的数据为前一次接收的最后一位数据+但前接收的前5位数据! 查看手册中解释 U0RBR 为只读,那我如何做才能把 多余的数据舍弃?
uint8 UART0_SeceiveByte (void)
{ uint8 data;
while((U0LSR&0x01)==0); //µÈ´ýÊý¾Ý½ÓÊÕ
data=U0RBR;
return (data);
}
void get_com0(uint8 *s,uint32 n)
{
int nm;
for(nm=0;nm<n;nm++)
//for (;n>0;n--)
{
jshou[(nm)]=UART0_SeceiveByte();
}
}
void send_com0(uint8 const *aa,uint32 n)
{
//while(1)
// {
int nm1;
for (nm1=0;nm1<n;nm1++)
{
//if(*aa=='\0') break;
UART0_SendByte (jshou[(nm1)]);
}
}
int main (void)
{
int k;
int m,i;
char *tem11;
char *tem00,jieshou;
int biaozhi;
uint8 kan1,kan2;
float fa,fb,fc,fd,fe;
biaozhi=0;
shi=19;
fen=13;
miao=0;
//PINSEL0 = 0x00000000; // ÉèÖùܽÅÁ¬½ÓGPIO
PINSEL0 = 0x00000005; // ¹Ü½ÅÁ¬½Ó´®¿ÚUART0
PINSEL1 = 0x00000000;
PINSEL2 = 0x00000004; //ÉèÖùܽÅÁ¬½ÓGPIO
IO0DIR = 0x00000000 ;
IO0CLR = 0x00000000 ;
IO0SET = 0x00000000 ;
IO0CLR = 0x00000000 ;
UART0_Init();
while (1)
{
get_com0(jshou,6);
DelayNS(10);
send_com0(jshou,6);
DelayNS(10);
if ((U0LSR&0x01)==0) IO1CLR|=(1<<17);
else IO1CLR|=(1<<17);
}
return -1;
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|