查看: 3022|回复: 1
打印 上一主题 下一主题

zigbee练习实验

[复制链接]
跳转到指定楼层
沙发
发表于 2014-8-15 13:58:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 伊海 于 2014-8-15 14:06 编辑
  1. /*****************************************************************
  2. ***程序描述:串口接收数据,波特率115200
  3. ***实验现象:通过串口助手接收“HELLO ENLERN”,并逐行显示
  4. ***日    期:2014.07.20        
  5. ***作    者:伊海        
  6. *******************************************************************/

  7. #include <ioCC2530.h>
  8. #include <string.h>

  9. #define  uint  unsigned int
  10. #define  uchar unsigned char

  11. //定义LED的端口
  12. #define LED1 P1_0
  13. #define LED2 P1_1

  14. //函数声明
  15. void Delay_ms(uint);
  16. void initUART(void);
  17. void UartSend_String(char *Data,int len);

  18. char Txdata[14]; //存放"HELLO ENLERN\n"共14个字符串

  19. /****************************************************************
  20.     延时函数                                                                                       
  21. ****************************************************************/
  22. void Delay_ms(uint n)
  23. {
  24.      uint i,j;
  25.      for(i=0;i<n;i++)
  26.      {
  27.      for(j=0;j<1774;j++);
  28.      }
  29. }

  30. void IO_Init()
  31. {
  32.     P1DIR = 0x01;                        //P1_0,P1_1 IO方向输出
  33.     LED1 = 1;
  34. }

  35. /****************************************************************
  36.    串口初始化函数                                
  37. ****************************************************************/
  38. void InitUART(void)
  39. {
  40.     PERCFG = 0x00;                      //位置1 P0口
  41.     P0SEL = 0x0c;                      //P0_2,P0_3用作串口(外部设备功能)
  42.     P2DIR &= ~0XC0;                   //P0优先作为UART0

  43.     U0CSR |= 0x80;                      //设置为UART方式
  44.     U0GCR |= 11;                                       
  45.     U0BAUD |= 216;                      //波特率设为115200
  46.     UTX0IF = 0;                       //UART0 TX中断标志初始置位0
  47. }
  48. /****************************************************************
  49. 串口发送字符串函数                        
  50. ****************************************************************/
  51. void UartSend_String(char *Data,int len)
  52. {
  53.   int j;
  54.   for(j=0;j<len;j++)
  55.   {
  56.     U0DBUF = *Data++;
  57.     while(UTX0IF == 0);
  58.     UTX0IF = 0;
  59.   }
  60. }
  61. /****************************************************************
  62. 主函数                                                
  63. ****************************************************************/
  64. void main(void)
  65. {        
  66.     CLKCONCMD &= ~0x40;               //设置系统时钟源为32MHZ晶振
  67.     while(CLKCONSTA & 0x40);          //等待晶振稳定为32M
  68.     CLKCONCMD &= ~0x47;               //设置系统主时钟频率为32MHZ   
  69.     IO_Init();
  70.     InitUART();
  71.     strcpy(Txdata,"HELLO ENLERN \n");     //将发送内容copy到Txdata;
  72.     while(1)
  73.      {
  74.          UartSend_String(Txdata,sizeof("HELLO ENLERN\n")); //串口发送数据
  75.          Delay_ms(500);                   //延时
  76.          LED1=!LED1;                       //标志发送状态
  77.      }
  78. }
复制代码

回复

使用道具 举报

板凳
 楼主| 发表于 2014-8-15 14:10:40 | 只看该作者
  1. /*************************************************************
  2. ***程序描述:通过串口控制LED开关
  3. ***实验现象:发送L1# L2# 指令分别控制LED1、LED2亮灭;
  4. ***日  期:2014.07.21
  5. ***作  者:伊海
  6. **************************************************************/

  7. #include <ioCC2530.h>
  8. #include <string.h>

  9. #define uint unsigned int
  10. #define uchar unsigned char

  11. //定义控制LED灯的端口
  12. #define LED1 P1_0        //定义LED1为P10口控制
  13. #define LED2 P1_1


  14. //函数声明
  15. void Delayms(uint xms);                //延时函数
  16. void InitLed(void);                //初始化P1口
  17. void InitUart();              //初始化串口
  18. void Uart_Send_String(char *Data,int len);

  19. char Rxdata[3];
  20. uchar RXTXflag = 1;
  21. char temp;
  22. uchar  datanumber = 0;

  23. /****************************
  24. //延时函数
  25. *****************************/
  26. void Delayms(uint xms)   //i=xms 即延时i毫秒 (16M晶振时候大约数,32M需要修改,系统不修改默认使用内部16M)
  27. {
  28. uint i,j;
  29. for(i=xms;i>0;i--)
  30.    for(j=587;j>0;j--);
  31. }

  32. /****************************
  33. //初始化程序
  34. *****************************/
  35. void InitLed(void)
  36. {
  37.         P1DIR |= 0x03; //P1_0、P1_1定义为输出
  38.         LED1 = 1;       //LED1、2灯熄灭
  39.         LED2 = 1;   
  40. }

  41. /****************************************************************
  42.    串口初始化函数     
  43. ***********************************************************/
  44. void InitUart()
  45. {
  46.     CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ晶振
  47.     while(CLKCONSTA & 0x40);                     // 等待晶振稳定
  48.     CLKCONCMD &= ~0x47;                          // 设置系统主时钟频率为 32MHZ

  49.     PERCFG = 0x00;        //位置1 P0口
  50.     P0SEL = 0x3c;        //P0_2,P0_3,P0_4,P0_5用作串口,第二功能
  51.     P2DIR &= ~0XC0;      //P0 优先作为UART0 ,优先级

  52.     U0CSR |= 0x80;       //UART 方式
  53.     U0GCR |= 11;           //U0GCR与U0BAUD配合     
  54.     U0BAUD |= 216;       // 波特率设为115200
  55.     UTX0IF = 1;          //UART0 TX 中断标志初始置位1  (收发时候)
  56.     U0CSR |= 0X40;        //允许接收
  57.     IEN0 |= 0x84;       // 开总中断,接收中断   
  58. }

  59. /****************************************************************
  60. 串口发送字符串函数   
  61. ****************************************************************/
  62. void Uart_Send_String(char *Data,int len)
  63. {
  64. {
  65.   int j;
  66.   for(j=0;j<len;j++)
  67.   {
  68.     U0DBUF = *Data++;
  69.     while(UTX0IF == 0);
  70.     UTX0IF = 0;
  71.   }
  72. }
  73. }
  74. /***************************
  75. //主函数
  76. ***************************/
  77. void main(void)
  78. {
  79.   InitLed();                //调用初始化函数
  80.   InitUart();
  81.   while(1)
  82.   {
  83.      if(RXTXflag == 1)     //接收状态
  84.      {
  85.         if( temp != 0)
  86.         {
  87.            if((temp!='#')&&(datanumber<3)) //'#'被定义为结束字符,最多能接收50个字符           
  88.            Rxdata[datanumber++] = temp;
  89.            else
  90.            {
  91.              RXTXflag = 3;                     //进入发送状态
  92.            }         
  93.             temp  = 0;
  94.          }
  95.       }
  96.       if(RXTXflag == 3)     //检测接收到的数据
  97.       {
  98.        if(Rxdata[0]=='L')
  99.          switch(Rxdata[1]-48)//很重要,ASICC码转成数字,判断L后面第一个数
  100.          {
  101.       case 1:
  102.         {
  103.           LED1=~LED1; //低电平点亮
  104.           break;
  105.         }
  106.       case 2:
  107.         {
  108.           LED2=~LED2;
  109.           break;
  110.         }
  111.        }        
  112.        RXTXflag = 1;         
  113.        datanumber = 0;                     //指针归 0
  114.       }     
  115.     }
  116. }

  117. /****************************************************************
  118. 串口接收一个字符: 一旦有数据从串口传至CC2530, 则进入中断,将接收到的数据赋值给变量temp.
  119. ****************************************************************/
  120. #pragma vector = URX0_VECTOR
  121.   __interrupt void UART0_ISR(void)
  122. {
  123.   URX0IF = 0;    // 清中断标志
  124.   temp = U0DBUF;                           
  125. }
复制代码


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表