电脑连接一个1号Lora模块,通过上位机发送数据给另一个连接51单片机串口的2号Lora模块,在51单片机中烧入程序,如果串口接收到数据就触发接收中断,在接收中断服务函数中控制LED灯亮灭。以上是希望达到的效果,但是实际操作起来,把数据发到单片机上时中断一直没有被触发,LED灯没有亮。希望各位帮我讲解疑惑
还有一个奇怪的现象,用数据线将单片机连接电脑上另一个串口调试助手,会显示1号Lora发过来的数据,但是LED灯还是不亮,那应该中断应该就是没触发吧
以下是代码:
void UART0_RCV (void) interrupt 4 //接收中断服务函数
{
if(RI)
{
reflag=1;
led=0;
delay(10000);
led=1;
SBUF=SBUF;
// RX1_Buffer[uart1_wr] = SBUF;
// if(++uart1_wr >= BUF_LENTH) uart1_wr = 0;
RI = 0;
}
if(TI){
TI = 0;
led1=0;
delay(10000);
led1=1;
// B_TI = 1;
}
}
void main(void) //主函数中有一些控制LCD屏幕显示传感器数据的代码和2号Lora将传感器数据发送出去的代码,可以忽略,主要是希望通过接收中断服务函数使标志变量reflag置1,加上LED灯用作验证中断服务函数是否被触发,但是灯一直没亮,所以应该是没有触发中断吧
{
uchar RHdata[5];
uint i=0;
uchar *p;
//uchar uart1_rd = 0;
//uchar uart1_wr = 0;
UartInit(); //串口初始化
Lcd_Init(); //lcd1602
while(1)
{
if(reflag)
{
ES = 0;
DHT11_delay_ms(250);
RH();
p=RH();
RHdata[0]=*p;
RHdata[1]=*(p+1);
RHdata[2]=*(p+2);
RHdata[3]=*(p+3);
RHdata[4]=*(p+4);
LcdWrCmd(0x80); //lcd1602
DHT11_delay_ms(250);
ES = 1;
loraSend_dataget_RH(0x00,0x04,23,RHdata);
for(i=0;i<5;i++)
{
RHdata[i]=0;
}
TI=0;
for(i=0;i<9;i++)
{ LcdWrDat(rec_dat[i]); }
reflag=0;
}
}
}
//希望各位帮我讲解疑惑