CC2430 uart通信模式
时间:10-02
整理:3721RD
点击:
先贴完整的源程序
#include "ioCC2430.h"
#define uchar unsigned char
uchar dat1[]="Hello,ZigBee!";
void initclk(void)
{
CLKCON&=0x40;//选择晶振
while(!(SLEEP & 0x40));//等待晶振稳定
SLEEP|=0x04;
}
void initio(void)
{
P0SEL|=0x0c;
}
void inituart(void)
{
IEN0|=0x84;//总中断,接收中断使能
U0CSR|=0xc0;//UART模式,允许接收
U0GCR=10;
U0BAUD=59;
}
void UART_send_string(uchar *data,uchar len)
{
uchar i;
for(i=0;i<len;i++)
{
U0DBUF=*data++;
while(!UTX0IF);
UTX0IF=0;
}
}
void main(void)
{
initio();
initclk();
inituart();
UART_send_string(dat1,13);
while(1);
}
#pragma vector=URX0_VECTOR
__interrupt void UART0_IRQ(void)
{
URX0IF=0;
U0DBUF=U0DBUF;
while(!UTX0IF);
UTX0IF=0;
}
上面的主函数对I/O 晶振等进行了初始化,但在下面的中断程序我就弄不懂了,上面传数据时是一个一个字符传过去的,但中断中给的函数是将发给2430的数据再返回来。问题是怎样读取返回来的数据,还是一个一个字节读回来吗?中断函数是不是一直在运行?
后来我在中断函数里加了一句“while(key);"key对应的是一个按键,不按的时候为1,按的时候是0,问题是我加了这句以后只能返回来头一个字节了,比如我发送的数据时“dredfff”,只能返回来一个d,这是怎么回事 ?为什么?
#include "ioCC2430.h"
#define uchar unsigned char
uchar dat1[]="Hello,ZigBee!";
void initclk(void)
{
CLKCON&=0x40;//选择晶振
while(!(SLEEP & 0x40));//等待晶振稳定
SLEEP|=0x04;
}
void initio(void)
{
P0SEL|=0x0c;
}
void inituart(void)
{
IEN0|=0x84;//总中断,接收中断使能
U0CSR|=0xc0;//UART模式,允许接收
U0GCR=10;
U0BAUD=59;
}
void UART_send_string(uchar *data,uchar len)
{
uchar i;
for(i=0;i<len;i++)
{
U0DBUF=*data++;
while(!UTX0IF);
UTX0IF=0;
}
}
void main(void)
{
initio();
initclk();
inituart();
UART_send_string(dat1,13);
while(1);
}
#pragma vector=URX0_VECTOR
__interrupt void UART0_IRQ(void)
{
URX0IF=0;
U0DBUF=U0DBUF;
while(!UTX0IF);
UTX0IF=0;
}
上面的主函数对I/O 晶振等进行了初始化,但在下面的中断程序我就弄不懂了,上面传数据时是一个一个字符传过去的,但中断中给的函数是将发给2430的数据再返回来。问题是怎样读取返回来的数据,还是一个一个字节读回来吗?中断函数是不是一直在运行?
后来我在中断函数里加了一句“while(key);"key对应的是一个按键,不按的时候为1,按的时候是0,问题是我加了这句以后只能返回来头一个字节了,比如我发送的数据时“dredfff”,只能返回来一个d,这是怎么回事 ?为什么?