程序源码
#include "ioCC2530.h"
#include "stdio.h"
#define LED1 P1_0 // P1_0定义为P1_0
#define LED2 P1_1 // P1_0定义为P1_1
#define SW1 P1_2 //SW1端口宏定义
enum SYSCLK_SRC
{
RC_16MHz,XOSC_32MHz
};
/**************************************************************/
#pragma bitfields = reversed //使用大端格式
typedef struct
{
unsigned char SRCADDRH; // 源地址高字节
unsigned char SRCADDRL; // 源地址低字节
unsigned char DESTADDRH; // 目标地址高字节
unsigned char DESTADDRL; // 目标地址低字节
unsigned char VLEN : 3; // 可变长度传输模式选择
unsigned char LENH : 5; // 传输长度高字节
unsigned char LENL : 8; // 传输长度低字节
unsigned char WORDSIZE : 1; // 字节/字传输
unsigned char TMODE : 2; // 传输模式选择
unsigned char TRIG : 5; // 触发事件选择
unsigned char SRCINC : 2; // 源地址增量
unsigned char DESTINC : 2; // 目标地址增量
unsigned char IRQMASK : 1; // 中断使能
unsigned char M8 : 1; // 7/8 bits 字节(只用于字节传输模式)
unsigned char PRIORITY : 2; // 优先级
} DMA_CONFIGURATIONPARAMETERS;
#pragma bitfields = default //恢复成小端格式
/**************************************************************
函数名称:delay
功 能:软件延时
入口参数:time--延时循环执行次数
出口参数:无
返 回 值:无
**************************************************************/
void delay(unsigned int time)
{
unsigned int i;
unsigned char j;
for(i = 0;i < time;i++)
for(j = 0;j < 240;j++)
{
asm("NOP");//asm用来在C代码中嵌入汇编语言操作,汇
asm("NOP");//编命令nop是空操作,消耗1个指令周期。
asm("NOP");
}
}
/**************************************************************
函数名称:SystemClockSourceSelect
功能:选择系统时钟源(主时钟源)
入口参数:source
XOSC_32MHz 32MHz晶体振荡器
RC_16MHz 16MHz RC振荡器
出口参数:无
返回值:无
**************************************************************/
void SystemClockSourceSelect(enum SYSCLK_SRC source)
{
unsigned char clkconcmd,clkconsta;
if(source == RC_16MHz)
{
CLKCONCMD &= 0x80;
CLKCONCMD |= 0x49;
}
else if(source == XOSC_32MHz)
{
CLKCONCMD &= 0x80;
}
/* 等待所选择的系统时钟源(主时钟源)稳定 */
clkconcmd = CLKCONCMD; // 读取时钟控制寄存器CLKCONCMD
do
{
clkconsta = CLKCONSTA; // 读取时钟状态寄存器CLKCONSTA
} while(clkconsta != clkconcmd); // 直到选择的系统时钟源(主时钟源)已经稳定
}
/**************************************************************
函数名称:init
功能:初始化系统IO
入口参数:无
出口参数:无
返回值:无
**************************************************************/
void initIO(void)
{ P1SEL &= ~0x05; // 设置LED1、SW1为普通IO口
P1DIR |= 0x01 ; // 设置LED1在P1.0为输出
P1DIR &= ~0X04; //sw1按键在 P1.2,设定为输入
LED1= 0; // LED灭
}
/**************************************************************
函数名称:InitUART0
功能:UART0初始化
P0.2 RX
P0.3 TX
波特率:57600
数据位:8
停止位:1
奇偶校验:无
入口参数:无
出口参数:无
返回值:无
**************************************************************/
void initUART0(void)
{
PERCFG = 0x00; //位置 1 P0 口
P0SEL = 0x3c; //P0 用作串口, P0.2、P0.3、P0.4、P0.5作为片内外设I/O
/* UART0波特率设置,波特率:57600 */
U0BAUD = 216;
U0GCR = 10;
/* USART模式选择 */
U0CSR |= 0x80; // UART模式
U0UCR |= 0x80; // 进行USART清除
UTX0IF = 0; // 清零UART0 TX中断标志
EA = 1; //使能全局中断
}
/**************************************************************
函数名称:UART0SendByte
功能:UART0发送一个字节
入口参数:无
出口参数:无
返回值:无
**************************************************************/
void UART0SendByte(unsigned char c)
{
U0DBUF = c; // 将要发送的1字节数据写入U0DBUF(串口 0 收发缓冲器)
while (!UTX0IF); // 等待TX中断标志,即U0DBUF就绪
UTX0IF = 0; // 清零TX中断标志
}
/**************************************************************
函数名称:UART0SendString
功能:UART0发送一个字符串
入口参数:无
出口参数:无
返回值:无
**************************************************************/
void UART0SendString(unsigned char *str)
{
while(1)
{
if(*str == '