Keil调试串口助手,单片机无法接收上位机发送的数据;但可以发送 PC发送数据时,单片机RX波形幅值太小
/*rx_flag,n为全局变量,PC发送数据“FM11.6”*/while(1);{if(rx_flag){for(m=0;m<n;m++){if(m<8)lcd_wc...
/*rx_flag,n为全局变量,PC发送数据“FM 11.6”*/
while(1);
{if (rx_flag)
{for(m=0;m<n;m++)
{if(m<8)
lcd_wcom(0x80+m);
else if(7<m<128)lcd_wcom(0xc0+m-7);
ms_delay(2);
lcd_wdata(rxbuf[m]);
}}}rx_flag=0;
}
void init_serialcom()
{TMOD=0x20;//timer1,mode2,8-bit reload
SCON=0x40;//串口工作方式1
PCON&=0x7F;//SMOD=0
TH1=0xfd;
TL1=0xfd;//9600 @11.0592MHZ
TR1=1;//timer1 run
ES=1;//开串口中断
EA=1;//开中断
}
/*----------------中断接收--------------------*/
void UART() interrupt 4
{ ES=0;//关中断
if (RI)
{RI=0;//接收引起中断
rxbuf[n]=SBUF;
while(!RI);//OK or NG???
n++;
}
if(n==7) rx_flag=1;
ES=1; }
问题出在protues,需在虚拟上位机选中仿真一项 展开
while(1);
{if (rx_flag)
{for(m=0;m<n;m++)
{if(m<8)
lcd_wcom(0x80+m);
else if(7<m<128)lcd_wcom(0xc0+m-7);
ms_delay(2);
lcd_wdata(rxbuf[m]);
}}}rx_flag=0;
}
void init_serialcom()
{TMOD=0x20;//timer1,mode2,8-bit reload
SCON=0x40;//串口工作方式1
PCON&=0x7F;//SMOD=0
TH1=0xfd;
TL1=0xfd;//9600 @11.0592MHZ
TR1=1;//timer1 run
ES=1;//开串口中断
EA=1;//开中断
}
/*----------------中断接收--------------------*/
void UART() interrupt 4
{ ES=0;//关中断
if (RI)
{RI=0;//接收引起中断
rxbuf[n]=SBUF;
while(!RI);//OK or NG???
n++;
}
if(n==7) rx_flag=1;
ES=1; }
问题出在protues,需在虚拟上位机选中仿真一项 展开
2个回答
展开全部
试试这样:
void UART() interrupt 4
{
//ES=0;//关中断//不需要关中断
if (RI)
{RI=0;//接收引起中断
rxbuf[n]=SBUF;
//while(!RI);//OK or NG???//删除这句
n++;
}
if(n==7) {rx_fla=1;n=0;}//注意重置n
//ES=1;
}
void UART() interrupt 4
{
//ES=0;//关中断//不需要关中断
if (RI)
{RI=0;//接收引起中断
rxbuf[n]=SBUF;
//while(!RI);//OK or NG???//删除这句
n++;
}
if(n==7) {rx_fla=1;n=0;}//注意重置n
//ES=1;
}
追问
请问一下如果用串口助手发送数据,protues能用视波器测试到准确的波形吗?
追答
亲爱的,你要弄清楚仿真的含义,就虚拟的环境下,它是可以的。
但,你现在涉及的可是真实的硬件,proteus可没有检测你实物串口的电路,既然没有检测电路,她如何显示你的波形呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询