微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > cc2530中串口接收中断标志URX0IF不置1

cc2530中串口接收中断标志URX0IF不置1

时间:10-02 整理:3721RD 点击:

cc2530中串口接收中断URX0IF不置1是怎么回事?那位遇到过类似的问题呢

你的2530串口可以正常通信了吧?请看看我的程序,有什么错吗?////初始化程序
////---------------------------------------------------------
void InitUart()
{
PERCFG=0x00; //选择位置1
P0SEL=0x0C; //P0用作串口
U0CSR|=0x80; //UART方式
U0GCR |= 0x0A;
U0BAUD = 0xD8; //设置波特率为57600

U0CSR|=0x04;
//URX0IF=0; //接收中断标志
//UTX0IF=0; //发送中断标志
URX0IE=1; //接收中断使能
IEN2|=0x04; //发送中断使能
// UTX0IE=1; //发送中断使能
//EA=1;
IEN0|=0x80; //开总中断
}

void delayhe(void)
{
unsigned int i;
unsigned char j;

for(i=0;i<500;i++)
{
for(j=0;j<200;j++)
{
asm("NOP");
asm("NOP");
asm("NOP");
}
}
}

void UartSendMSG(uint8 *Data,int len)
{
int i;
for(i=0;i<len;i++)
{
U0DBUF=*(Data++);
while(!UTX0IF); //等待数据发送
UTX0IF=0; //清楚数据传送标志
}
}

void SendConfigureMSG() //发送配置命令
{

UartSendMSG(ConfigMSG, ConfigMSG_Size);
}

void SendRequestMSG()
{
UartSendMSG(RequestMSG, RequestMSG_Size);
}
///*-------------------------------------------------------------*/
// //查询法接收
///*-------------------------------------------------------------*/
char receive (void)
{
char dat;

while (!URX0IF );
dat = U0DBUF;
URX0IF = 0;

return dat;
}

uint16 he()
{
//setSysClk();
InitUart();
SendConfigureMSG();
delayhe();
delayhe();
uint16 value=0;
uint8 Uart0_R_buff[24];
uint8 count=0;
while(count<24)
{
//if(URX0IE==1)
//{
// temp=U0DBUF;
Uart0_R_buff[count] =receive();
count++;
//URX0IE=0;
}
// }
count=0;
// CLKCONCMD
if(Uart0_R_buff[1]==PACKET_CONFIGURATION)
{
if(Uart0_R_buff[3]==OPT_CO)
{
SendRequestMSG();
}
else
{SendConfigureMSG();
delayhe();
delayhe();
}
}
if(Uart0_R_buff[1]==PACKET_SENSOR_DATA)
{
int TL=Uart0_R_buff[7];
int TH=Uart0_R_buff[8];
value=TL|((uint16)TH<<8);
SendRequestMSG();
}
return value;
}
我会在main中调用uint16 he()。

我通过初始化把P1口设置成UART,然后我会在uint16 he()中先通过串口发送ConfigMSG[]={0x7E,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E};当我通过串口RX收到7E 03 00 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7E时,进行判断(if(Uart0_R_buff[1]==PACKET_CONFIGURATION)),如果正确再次进行判断if(Uart0_R_buff[3]==OPT_CO),如果正确,再发送RequestMSG[]={0x7E,0x02,0x00, 0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E}; 如果收到7E 02 00 21 00 00 00 dd dd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7E 把数据dddd取走,并且存到一个16位的变量中,main中会调用

上一篇:cc2430组网
下一篇:zigbee怎么学习啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top