zigbee串口通信函数

发布网友 发布时间:2022-04-22 08:34

我来回答

3个回答

热心网友 时间:2022-06-18 17:51

/*
实验说明:UART0,波特率115200bps,PC机向CC2430送字符串(以@字符结束),CC2430收到后返回该字符串
*/

#include <ioCC2430.h>
#define uchar unsigned char

uchar recv_buf[50]={0};
uchar recv_count = 0;
//uchar str[10]="abcdef";

/*系统时钟初始化
-------------------------------------------------------*/
void xtal_init(void)
{
SLEEP &= ~0x04; //都上电
while(!(SLEEP & 0x40)); //晶体振荡器开启且稳定
CLKCON &= ~0x47; //选择32MHz 晶体振荡器
SLEEP |= 0x04;
}

/*UART0通信初始化
-------------------------------------------------------*/
void Uart0Init(unsigned char StopBits,unsigned char Parity)
{
PERCFG&= ~0x01; //选择UART0为可选位置一,即RXD接P0.2,TXD接P0.3
P0SEL |= 0x0C; //初始化UART0端口,设置P0.2与P0.3为外部设备IO口

U0CSR = 0xC0; //设置为UART模式,并使能接收器

U0GCR = 11;
U0BAUD = 216; //设置UART0波特率为115200bps,至于为何是216和11,可查阅CC2430中文手册

U0UCR |= StopBits|Parity; //设置停止位与奇偶校验

}

/*UART0发送数据
-------------------------------------------------------*/
void Uart0Send(unsigned char data)
{
while(U0CSR&0x01); //等待UART空闲时发送数据
U0DBUF = data;
}

/*UART0发送字符串
-------------------------------------------------------*/
void Uart0SendString(char *s)//字符串首地址赋给了s
{
while(*s !='\0') //依次发送字符串s中的每个字符
Uart0Send(*(s++));
}

/*UART0接受数据
-------------------------------------------------------*/
unsigned char Uart0Receive(void)
{
unsigned char data;
while(!(U0CSR&0x04)); //查询是否收到数据,否则继续等待
data=U0DBUF; //提取接收到的数据
return data;
}

/*主函数
-------------------------------------------------------*/
void main(void)
{
char i,b;
//str='a';
xtal_init();
Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验
Uart0SendString("welcome to wust\n");
// Uart0Send(str[0]);

recv_count = 0;

while(1)
{
while(1)
{
b = Uart0Receive();
if(b=='@')break; //若接收到'@',则跳出循环,输出字符串

recv_buf[recv_count] = b; //若不是'@',则继续向字符数组recv_buf[]添加字符
recv_count++;
}
for(i=0; i<recv_count; i++) //输出字符串
Uart0Send(recv_buf[i]);

Uart0SendString("\n");
recv_count =0; //重置
}
}

热心网友 时间:2022-06-18 17:52

这么简单的问题都要别人帮忙 你干什么用

volatile unsigned char buf[50];
volatile unsigned char i;

#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0;//清中断标志
//send_temp = U0DBUF;
buf[i++]= U0DBUF;
TX_EN=1;
}

参考资料:http://www.usr.cn

热心网友 时间:2022-06-18 17:52

去看zigbee协议栈,里面很详细。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com