概述
功能描述
cc2530 睡眠定时器串口显示
//第12次次课 (睡眠定时器方式唤醒)
//体会1:切换系统主时钟16MHz和32MHz
//体会2:当串口波特率比较高时候(19200),乱码多,降低后(9600)稳定,
// 主要是因为双方硬件时钟不精确
#include <ioCC2530.h>
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
#define LED1 P1_0 //P1.0口控制LED1
#define LED2 P1_1 //P1.1口控制LED2
void init_xtal()
{//初始化系统所用的主时钟
CLKCONCMD &=~0X40; //选择32MHz的外部晶体振荡器
while(CLKCONSTA & 0X40);//等待振荡器开启且稳定下来
CLKCONCMD &= ~0X07;//设置为时钟速度不分频=32MHZ
}
//延时函数msec 延时参数,值越大,延时越久
void DelayMS(uint msec)
{
uint i,j;
for (i=0; i<msec; i++)
for (j=0; j<535; j++);
}
void initU0()
{//初始化串口0,
//P72,备用位置1优先,P0_2=RX P0_3=TX. 位置2:P1_4=RX P1_5=TX
PERCFG&=~(1<<0);
//说明书P79, 设置串口0优先,
P2DIR&=~(3<<6);
//设置为外设功能,P0_2=RX P0_3=TX,必须配置这两个引脚为输出
P0SEL|=0X0C; //0000 1100
//串口模式 第7位:0=SPI同步串口模式 1=UART通用异步模式
U0CSR |=(1<<7);
U0CSR |=0X40; //使能接收器
/*时钟为32MHz时的波特率设置表,当为16MHz时BAND_E加1即可
波特率 BAND_M(UxBAND) BAND_E(UxGCR[4:0])
2400 59 6
4800 59 7
9600 59 8
14400 216 8
19200 59 9
28800 216 9
38400 59 10
57600 216 10
76800 59 11
115200 216 11
230400 216 12
*/
U0BAUD|=59; //波特率=9600,小数部分BAND_M
U0GCR|=8; //波特率指数部分BAND_E, U0GCR |=10;时钟=32MHz时 ,若时钟为16MHz时,BAND_E加1.
UTX0IF=0; //p41, 清除串口0发送中断标志位
URX0IF=0; //p40,清除串口0接收中断标志位
IEN2 |=0X40; //p39,打开串口0发送中断开关
URX0IE =1; //P38,打开串口0接收中断开关
EA =1; //开总中断
}
void U0SendString(uchar *data)
{
while(*data!='