ZigBee-CC2530单片机 - 实现计算机串口通讯控制LED发光二极管
程序源码
/**************************************************************
* 文件名称:uart2.c
* 功 能:PC机控制发光二极管亮灭
*************************************************************/
#include "ioCC2530.h"
#include <string.h>
//定义led灯端口
#define LED1 P1_0 // P1_0定义为P1_0
#define LED2 P1_1 // P1_0定义为P1_1
#define uint unsigned int
#define uchar unsigned char
#define DATABUFF_SIZE 3 //数据缓冲区大小
uchar buff_RxDat[DATABUFF_SIZE+1]; //数据缓冲区
uchar uIndex = 0; //数据缓冲区的下标
/***************************************************************
* 函数名称:InitUART0
* 功 能:UART0初始化
* 入口参数:
* 出口参数:无
* 返 回 值:无
***************************************************************/
void initUART0(void)
{
PERCFG = 0x00; //位置 1 P0 口
P0SEL = 0x3c; //P0用作串口, P0.2、P0.3作为串口RX、TX
U0BAUD = 216;
U0GCR = 10;
U0CSR |= 0x80; // UART模式
U0UCR |= 0x80; // 进行USART清除,并设置数据格式为默认值
URX0IF = 0; // 清零UART0 RX中断标志
U0CSR |= 0X40; //允许接收
EA = 1; //使能全局中断
}
/***************************************************************
* 函数名称:receive_handler
* 功 能:接收数据后处理
* 入口参数:无
* 出口参数:无
* 返 回 值:无
***************************************************************/
void receive_handler(void)
{
uchar onoff=0; //LED灯的开关状态
uchar c;
c= U0DBUF; // 读取接收到的字节
if(c == '#')
{
buff_RxDat[0]=c;
uIndex=0;
}
else if(buff_RxDat[0]=='#')
{
uIndex++;
buff_RxDat[uIndex]=c;
}
if(uIndex>=2)
{
onoff=buff_RxDat[2]-0x30;
switch(buff_RxDat[1])
{
case '1':
LED1=onoff;
break;
case '2':
LED2=onoff;
break;
}
for(int i=0;i<=DATABUFF_SIZE;i++) //清空接收到的字符串
buff_RxDat[i]=(uchar)NULL;
uIndex = 0;
}
}
/***************************************************************
* 函数名称:main
* 功 能:main函数入口
***************************************************************/
void main(void)
{
P1SEL &= ~0x03; // 设置LED为普通IO口
P1DIR |= 0x03 ; // 设置LED为输出
LED1 = 0; //灭 LED
LED2 = 0;
CLKCONCMD &= 0x80; //时钟速度设置为32MHz
initUART0(); // UART0初始化
while(1)
{
if(URX0IF)
{
URX0IF = 0;//清中断标志
receive_handler(); //调用接收数据后处理函数
}
}
}