break;
}
}
Basic.h文件
#ifndef__BASIC_H__
#define__BASIC_H__
#include
//数据类型重命名
typedefunsignedintuint;
typedefunsignedcharuchar;
typedefunsignedintuint16;
typedefunsignedcharuint8;
//LED_D8_D9操作
#defineSET_LED_D8(P2&=0XFE)//点亮LED_D8
#defineSET_LED_D9(P1&=0XFD)//点亮LED_D9
#defineCLR_LED_D8(P2|=0X01)//熄灭LED_D8
#defineCLR_LED_D9(P1|=0X02)//熄灭LED_D9
#defineLED_D8_TURN(P2^=0X01)//改变LED_D8状态(亮变灭,灭变亮)
#defineLED_D9_TURN(P1^=0X02)//改变LED_D9状态(亮变灭,灭变亮)
voiddelay(uint);//微秒级短暂延时函数
voidDelay(uintn);//约10ms延时函数
voidLEDPortInit(void);//LED_D8_D9端口初始化函数
uint8GetCh08bitADC(void);//ADC通道0以8采样位获取输入
voidSetIOInput(uint8group,uint8bit);//设置端口为三态输入
voidSetIOOutput(uint8group,uint8bit);//设置端口为通用输出IO口
uint8GetIOLevel(uint8group,uint8bit);//获取IO口输入电平状态
voidSetIOLevel(uint8group,uint8bit,uint8value);//设置IO端口输出电平状态
UART.h文件
#ifndef__UART_H__
#define__UART_H__
#include"Basic.h"
#include
//CC2530UART波特率可选值
typedefenum
{
BAUD_2400,//U0GCR|=6;U0BAUD|=59;
BAUD_4800,//U0GCR|=7;U0BAUD|=59;
BAUD_9600,//U0GCR|=8;U0BAUD|=59;
BAUD_14400,//U0GCR|=8;U0BAUD|=216;
BAUD_19200,//U0GCR|=9;U0BAUD|=59;
BAUD_28800,//U0GCR|=9;U0BAUD|=216;
BAUD_38400,//U0GCR|=10;U0BAUD|=59;
BAUD_57600,//U0GCR|=10;U0BAUD|=216;
BAUD_76800,//U0GCR|=11;U0BAUD|=59;
BAUD_115200,//U0GCR|=11;U0BAUD|=216;
BAUD_230400,//U0GCR|=12;U0BAUD|=216;
}BaudSel;
voidUART0_Init(BaudSelbaud);//UART0初始化设置
voidUART0_Send(char*Data,intlen);//UART0发送数据
voidUART0_Dis_uNum(uint16uValue);//UART0以十进制方式显示无符号数
voidUART0_Dis_fNum(floatfValue);//UART0以十进制方式显示浮点型数
UART.c文件
#include"UART.h"
/***********************************************************
**函数名称:
UART0_Init**实现功能:
初始化UART0
**入口参数:
baud:
波特率设置;**返回结果:
None
voidUART0_Init(BaudSelbaud)
{
CLKCONCMD&=~0X40;//晶振
while(!
(SLEEPSTA&0X40));//等待晶振稳定
CLKCONCMD&=~0X47;//TICHSPD128分频,CLKSPD不分频
SLEEPCMD|=0X04;//关闭不用的RC振荡器
PERCFG=0X00;//位置1P0口
P0SEL|=0X0C;//P0用作串口
U0CSR|=0X80;//UART方式
switch(baud)
{
caseBAUD_2400:
U0GCR|=6;U0BAUD|=59;break;
caseBAUD_4800:
U0GCR|=7;U0BAUD|=59;break;
caseBAUD_9600:
U0GCR|=8;U0BAUD|=59;break;
caseBAUD_14400:
U0GCR|=8;U0BAUD|=216;break;
caseBAUD_19200:
U0GCR|=9;U0BAUD|=59;break;
caseBAUD_28800:
U0GCR|=9;U0BAUD|=216;break;
caseBAUD_38400:
U0GCR|=10;U0BAUD|=59;break;
caseBAUD_57600:
U0GCR|=10;U0BAUD|=216;break;
caseBAUD_76800:
U0GCR|=11;U0BAUD|=59;break;
caseBAUD_115200:
U0GCR|=11;U0BAUD|=216;break;
caseBAUD_230400:
U0GCR|=12;U0BAUD|=216;break;
default:
U0GCR|=11;U0BAUD|=216;break;//BAUD_115200;
}
UTX0IF=0;
U0CSR|=0X40;//允许接收
IEN0|=0X84;//开总中断,接收中断
}
/***********************************************************
**函数名称:
UART0_Send**实现功能:
UART0发送数据**返回结果:
None
**入口参数:
Data:
待发送数据区首地址len:
待发送数据的字节数
voidUART0_Send(char*Data,intlen)
{
inti;
for(i=0;i{
U0DBUF=*Data++;
while(UTX0IF==0)
;
UTX0IF=0;
}
}
/***********************************************************
**函数名称:
UART0_Dis_uNum**实现功能:
UART0以十进制方式显示uint16型数据
**入口参数:
uValue:
需要显示的无符号型数据**返回结果:
None
voidUART0_Dis_uNum(uint16uValue)
{
uint8i;
charcData[5]={'0','0','0','0','0'};
cData[0]=uValue%100000/10000+'0'//nValue对100000取余出10000赋值于cData第0个元素
cData[1]=uValue%10000/1000+'0';//nValue对10000取余出1000赋值于cData第01个元素
cData[2]=uValue%1000/100+'0';//nValue对1000取余出100赋值于cData第2个元素
cData[3]=uValue%100/10+'0';//nValue对100取余出10赋值于cData第3个元素
cData[4]=uValue%10/1+'0';//nValue对10取余出1赋值于cData第4个元素
if(0!
=uValue)
{
for(i=0;i<5;i++)
{
if('0'!
=cData[i])
break;
if('0'==cData[i])
cData[i]='';
}
}
elseif(0==uValue)
{
for(i=0;i<4;i++)
{
cData[i]='';
}
}
UART0_Send("",1);//数字和其他输出内容前后都有一个空格间距
UART0_Send(cData,5);
UART0_Send("",1);
}
/***********************************************************
**函数名称:
UART0_Dis_fNum**实现功能:
UART0以十进制方式显示float型数据
**入口参数:
fValue:
需要显示的浮点型数据**返回结果:
None
voidUART0_Dis_fNum(floatfValue)
{
uint16uValue=(uint16)(100*fValue);
charcData[5]={'0','0','.','0','0'};
cData[0]=uValue%10000/1000+'0';
cData[1]=uValue%1000/100+'0';
cData[2]='.';
cData[3]=uValue%100/10+'0';
cData[4]=uValue%10/1+'0';
//数字和其他输出内容前后都有一个空格间距
UART0_Send("",1);
UART0_Send(cData,5);
UART0_Send("",1);
}
/***********************************************************
**函数名称:
UART0_ISR**实现功能:
UART0接收中断处理函数
**入口参数:
None**返回结果:
None
#pragmavector=URX0_VECTOR
__interruptvoidUART0_ISR(void)
{
staticchartemp[1];//定义一个元素的temp数组
temp[0]=U0DBUF;//接收到的元素赋值给第0个元素
UART0_Send(temp,1);//调用发送函数将收到的数据发送出去
URX0IF=0;//清中断标志
}
Main.c文件
#include"UART.h"
#include"Basic.h"
voidmain(void)
{
#defineSENDSTRING"HelloWorld!
\r\n"
LEDPortInit();
UART0_Init(BAUD_115200);
for(;;)
{
UART0_Send(SENDSTRING,sizeof(SENDSTRING)-1);//发送SENDSTRING的数据
SET_LED_D8;//P1&=~0x02;//P2&=0xfe;//
Delay(5);//Delay(5);
CLR_LED_D8;//P2|=0x01;//
Delay(120);
}
}