不能这样。
单片机串口通讯通常是这样的:
设备上电-关闭所有中断-配置串口参数-开中断-进入主循环
当串口有信息传来时会触发串口接收中断,因此要编写接收中断函数,对接收寄存器读操作,对读出的数据进行处理-清空接收寄存器同时再打开中断
你的 if udr=0000001 什么的是不行的,应该这样 int temp; temp=udr; if(temp=0000001) P1^0=1;等等怎么怎么…… 必须中断了在读,给你个以前搞的51的例子,你看着编你自己的
上电初始化及主函数部分:
void main()
{ uchar i,j;
TMOD=0x20; //定时器1方式2
TH1=0xe6;
TL1=0xe6;
SM0=0; //方式一
SM1=1;
REN=1;
EA=1;
TR1=1;
ES=1;
for(i=0;i<12;i++)
{
Init_DS18B20(i) ;
}
while (1)
{
if(flag==0)
{
TI=1;
ES=0;
flag=0;
for(j=0;j<12;j++)
{
ReadTemp(j);
temp_to_str();
delay(1400);printf("%c%c%c%c%c%c",room[j],TempBuffer[0],TempBuffer[1],TempBuffer[2],TempBuffer[3],TempBuffer[4]);
}
while(!TI);
TI=0;
ES=1;
}
}
}
接收中断:
void se() interrupt 4
{
RI=0;
temp=SBUF;
chuli(temp);
flag=0;
}
具体处理,我的是控制电机吹风
void chuli(char x)
{
switch(x)
{
case('1'):{P00=0;}break;
case('2'):{P01=0;}break;
case('3'):{P02=0;}break;
case('4'):{P03=0;}break;
case('5'):{P04=0;}break;
case('6'):{P05=0;}break;
case('7'):{P06=0;}break;
case('8'):{P07=0;}break;
case('9'):{P20=0;}break;
case('a'):{P21=0;}break;
case('b'):{P22=0;}break;
case('c'):{P23=0;}break;
case('j'):{P00=1;}break;
case('k'):{P01=1;}break;
case('l'):{P02=1;}break;
case('m'):{P03=1;}break;
case('n'):{P04=1;}break;
case('o'):{P05=1;}break;
case('p'):{P06=1;}break;
case('q'):{P07=1;}break;
case('r'):{P20=1;}break;
case('s'):{P21=1;}break;
case('t'):{P22=1;}break;
case('u'):{P23=1;}break;
default:P0=0xff;P2=0xff;break;
}
}