cc2530设计性实验代码六

主函数

#include <ioCC2530.h>
#include "LCD_12864_Driver.h"
#include <string.h>
#define LED1 P1_0
#define LED2 P1_1 
#define ON 1
#define OFF 0
#define uint unsigned int
#define uchar unsigned char
#define UART0_RX    1
#define UART0_TX    2
#define SIZE       51
#define slave_node

enum SYSCLK_SRC{XOSC_32MHz,RC_16MHz}; 
#define UART0_RX    1
#define UART0_TX    2
#define SIZE       51

char RxBuf;
char UartState;
uchar count;
char RxData[SIZE];        //存储发送字符串
void Delay(uint n)
{
	uint t;
	for(t = 0;t<n;t++);
	for(t = 0;t<n;t++);
	for(t = 0;t<n;t++);
	for(t = 0;t<n;t++);
	for(t = 0;t<n;t++);
}
void InitLed(void)
{
    P1SEL &= ~0x03;// 设置 普通IO口
    P1DIR |= 0x03;// 设置 输出 
	LED1 = OFF;
	LED2 = OFF;
}
/****************************************************************
*函数功能 :初始化串口0	
*入口参数 :无
*返 回 值 :无
*说    明 :38400-8-n-1
****************************************************************/
void initUART0(void)
{
    PERCFG &= ~0x01;// 
    P0SEL |= 0x3c;
    P2DIR &= ~0XC0;
    
    U0CSR |= 0x80;//1为UART模式
    U0CSR |= 0x40;           //允许接收 
    U0GCR |= 10;//设置BAUD_E=1
    U0BAUD |= 59;//设置BAUD_M=59
    UTX0IF = 0;

    IEN0 |= 0x84;            //开总中断允许接收中断  
}

/****************************************************************
*函数功能:串口发送字符串函数
*入口参数:data:数据
*	       len :数据长度
*返 回 值:无
*说    明:
****************************************************************/
void UartSendString(char *Data,int len)
{
  int j;
  for(j=0;j<len;j++)
  {
    U0DBUF = *Data++;
    while(UTX0IF == 0); 
    UTX0IF = 0;
  }
}
void BlinkLeds(uchar LEDx) 
{ 
     if(LEDx == 1)
     {
       LED1 = !LED1;
       Delay(20000);
     }
     else if(LEDx == 2)
     {
       LED2 = !LED2;
       Delay(20000);
     }  
} 
void SystemClockSourceSelect(enum SYSCLK_SRC source) 
{ 
  unsigned char osc32k_bm = CLKCONCMD & 0x80; 
  unsigned char __clkconcmd,__clkconsta; 
 
 if(source == RC_16MHz) 
	  CLKCONCMD = ((osc32k_bm) | \
      (0x01 << 6)| \
      (0x01 << 3)| \
      (0x01 << 0)); 
 else if(source == XOSC_32MHz) 
        { 
           CLKCONCMD = (osc32k_bm); 
        } 
 __clkconcmd = CLKCONCMD;
 do 
    { 
      __clkconsta = CLKCONSTA;
    }while(__clkconsta != __clkconcmd);
}

void main(void)
{	
    SystemClockSourceSelect(XOSC_32MHz);
    
   char str1 = '\n';
    initUART0();                                //调用串口初始化函数   
    UartState = UART0_RX;                      //串口0默认处于接收模式
    memset(RxData, 0, SIZE);
    InitLed();
    vLcdInit();
    
    while(1)
    {
        if(UartState == UART0_RX)              //接收状态 
        { 
            if(RxBuf != 0) 
            {                 
                if((RxBuf != '#')&&(count < 50))//以'#'为结束符,一次最多接收50个字符            
                    RxData[count++] = RxBuf; 
                else
                {
                    if(count >= 50)             //判断数据合法性,防止溢出
                    {
                        count = 0;              //计数清0
                        memset(RxData, 0, SIZE);//清空接收缓冲区
                    }
                    else
                        UartState = UART0_TX;  //进入发送状态 
                }
                RxBuf  = 0;
            }
        }
        
        if(UartState == UART0_TX)              //发送状态 
        {
            vLcdInit();
            vLcdTextWrite(1,1,RxData);
            vLcdRefresh();
            strcat(RxData, &str1);
            U0CSR &= ~0x40;                    //禁止接收 
            UartSendString(RxData, count+1);     //发送已记录的字符串。
            U0CSR |= 0x40;                     //允许接收 
            UartState = UART0_RX;              //恢复到接收状态 
            count = 0;                         //计数清0
            memset(RxData, 0, SIZE);           //清空接收缓冲区
        }    
    }
}

#pragma vector=URX0_VECTOR
__interrupt void UART0_ISR(void)
{
  URX0IF = 0;       // 清中断标志 
  RxBuf=U0DBUF;
}

完整代码下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天地神仙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值