ZigBee-CC2530单片机 - 实现计算机串口通讯控制LED发光二极管

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();  //调用接收数据后处理函数
      }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WW......

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值