上位机与单片机串口通信控制继电器 20
上位机软件部分先不考虑(不归我管)我想用AVR单片机异步串口UART接受上位机发送来的信息,收到的信息是在数据寄存器UDR中吗我如何把UDR接收到的数据对应给单片机其它I...
上位机软件部分先不考虑(不归我管)
我想用AVR单片机异步串口UART接受上位机发送来的信息,收到的信息是在数据寄存器UDR中吗
我如何把UDR接收到的数据对应给单片机其它IO口驱动继电器呢,就是UDR中的8位数如何转化为驱动继电器IO口的高低电平
可以用if,else函数吗,提前设定好对应关系,比如UDR的0000001对应继电器1的IO口高电平(继电器1接PB5),上位机发送数据0000001,if udr=0000001,PORTB=PORTB |= (1 << 5),PB5口高电平,从而驱动继电器动作,这样可以吗(自己想的,不知可行否),还是有其它方法 展开
我想用AVR单片机异步串口UART接受上位机发送来的信息,收到的信息是在数据寄存器UDR中吗
我如何把UDR接收到的数据对应给单片机其它IO口驱动继电器呢,就是UDR中的8位数如何转化为驱动继电器IO口的高低电平
可以用if,else函数吗,提前设定好对应关系,比如UDR的0000001对应继电器1的IO口高电平(继电器1接PB5),上位机发送数据0000001,if udr=0000001,PORTB=PORTB |= (1 << 5),PB5口高电平,从而驱动继电器动作,这样可以吗(自己想的,不知可行否),还是有其它方法 展开
2个回答
展开全部
不能这样。
单片机串口通讯通常是这样的:
设备上电-关闭所有中断-配置串口参数-开中断-进入主循环
当串口有信息传来时会触发串口接收中断,因此要编写接收中断函数,对接收寄存器读操作,对读出的数据进行处理-清空接收寄存器同时再打开中断
你的 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;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询