zoukankan      html  css  js  c++  java
  • 嵌入式成长轨迹51 【Zigbee项目】【CC2430基础实验】【在PC用串口控制LED】


    在PC上从串口向CC2430发数,即可控制 LED 灯的亮灭,控制数据的格式为“灯编号  开|关 #”,红色 LED 编号为1,绿色 LED 编号为2,0 是关灯,1 是开灯,如打开红色 LED 的命令是“11#”

    void initUARTtest(void) ;
    函数原型: 

     1 void initUARTtest(void) 
     2 { 
     3  
     4     CLKCON &= ~0x40;              //晶振 
     5     while(!(SLEEP & 0x40));      // 等待晶振稳定 
     6     CLKCON &= ~0x47;             //TICHSPD128 分频,CLKSPD 不分频 
     7     SLEEP |= 0x04;     // 关闭不用的RC振荡器 
     8  
     9     PERCFG = 0x00;       // 位置1 P0 口 
    10     P0SEL = 0x3c;        //P0 用作串口 
    11     P2DIR &= ~0XC0;                             //P0 优先作为串口0 
    12  
    13     U0CSR |= 0x80;        //UART 方式 
    14     U0GCR |= 10;        //baud_e 
    15     U0BAUD |= 216;       // 波特率设为57600 
    16     UTX0IF = 0; 
    17 } 

    函数功能:初始化串口 0,将 I/O 映射到P0口,P0优先作为串口0 使用,UART 工作方式,波特率为57600。使用晶振作为系统时钟源。
     
    void UartTX_Send_String(char *Data,int len); 
    函数原型: 

     1 void UartTX_Send_String(char *Data,int len) 
     2 { 
     3   int j; 
     4   for(j=0;j<len;j++) 
     5   { 
     6     U0DBUF = *Data++; 
     7     while(UTX0IF == 0); 
     8     UTX0IF = 0; 
     9   } 
    10 } 

    函数功能:串口发字串,*Data 为发送缓存指针,len 为发送字串的长度,只能是在初始化函数void initUARTtest(void) 之后调用才有效。发送完毕后返回,无返回值。
     
    void UART0_ISR(void) ;
    函数原型:

    1 __interrupt void UART0_ISR(void) 
    2  { 
    3   URX0IF = 0;    // 清中断标志 
    4   temp = U0DBUF; 
    5  } 

    函数功能:一旦有数据从串口送到 CC2430,则立即进入中断,进入中断后将接收的数据先存放到temp 变量,然后在主程序中去处理接收到的数据。

      1 //main.c
      2 /*****************************************
      3 数据格式: 灯选择 开关 #
      4 10# 关RED LED
      5 11# 开RED LED
      6 20# 关GREEN LED
      7 21# 开GREEN LED
      8 *****************************************/
      9 #include <iocc2430.h>
     10 #include <string.h>
     11 
     12 #define uint unsigned int
     13 #define uchar unsigned char
     14 #define FALSE 0
     15 #define TURE 1
     16 
     17 //定义控制灯的端口
     18 #define led1 P1_0
     19 #define led2 P1_1
     20 
     21 void Delay(uint);
     22 void initUARTtest(void);
     23 
     24 uchar Recdata[3]="000";
     25 uchar RTflag = 1;
     26 uchar temp;
     27 uint  datanumber = 0;
     28 uint  stringlen;
     29 
     30 /****************************************************************
     31 *函数功能 :延时                        
     32 *入口参数 :定性延时                                    
     33 *返 回 值 :无                                                
     34 *说    明 :                                                    
     35 ****************************************************************/
     36 void Delay(uint n)
     37 {
     38     uint i;
     39     for(i=0;i<n;i++);
     40     for(i=0;i<n;i++);
     41     for(i=0;i<n;i++);
     42     for(i=0;i<n;i++);
     43     for(i=0;i<n;i++);
     44 }
     45 
     46 /****************************************************************
     47 *函数功能 :初始化串口1                                        
     48 *入口参数 :无                                                
     49 *返 回 值 :无                            
     50 *说    明 :57600-8-n-1                        
     51 ****************************************************************/
     52 void initUARTtest(void)
     53 {
     54 
     55     CLKCON &= ~0x40;              //晶振
     56     while(!(SLEEP & 0x40));      //等待晶振稳定
     57     CLKCON &= ~0x47;             //TICHSPD128分频,CLKSPD不分频
     58     SLEEP |= 0x04;          //关闭不用的RC振荡器
     59 
     60     PERCFG = 0x00;                //位置1 P0口
     61     P0SEL = 0x3c;                //P0用作串口
     62 
     63     U0CSR |= 0x80;                //UART方式
     64     U0GCR |= 10;                //baud_e
     65     U0BAUD |= 216;                //波特率设为57600
     66     UTX0IF = 1;
     67 
     68     U0CSR |= 0X40;                //允许接收
     69     IEN0 |= 0x84;                //开总中断,接收中断
     70 }
     71 
     72 /*****************************************
     73 *函数功能 :初始化P1口为输出
     74 *入口参数 :无
     75 *返 回 值 :无
     76 *说    明 :无
     77 *****************************************/
     78 void Init_LED_IO(void)
     79 {
     80       //P1 out
     81     P1DIR |= 0x03;                 //P1控制LED
     82     led1 = 1;
     83     led2 = 1;                //关LED
     84 }
     85 
     86 
     87 /****************************************************************
     88 *函数功能 :主函数                                
     89 *入口参数 :无                            
     90 *返 回 值 :无                        
     91 *说    明 :无                            
     92 ****************************************************************/
     93 void main(void)
     94 {    
     95         uchar ii;
     96 
     97         Init_LED_IO();
     98     initUARTtest();
     99 
    100     while(1)
    101     {
    102           if(RTflag == 1)            //接收
    103           {
    104             if( temp != 0)
    105             {
    106                 if((temp!='#')&&(datanumber<3))
    107                 {                               //’#‘被定义为结束字符
    108                                                 //最多能接收3个字符
    109                   Recdata[datanumber++] = temp;
    110                 }
    111                 else
    112                 {
    113                   RTflag = 3;                   //进入改变小灯的程序
    114                 }
    115                 if(datanumber == 3)RTflag = 3;
    116               temp  = 0;
    117             }
    118           }
    119           if(RTflag == 3)
    120           {
    121             if(Recdata[0]=='1')
    122             {
    123               if(Recdata[1]=='0')led1 = 1;      // 10# 关红色LED
    124               else
    125                 led1 = 0;                       // 11# 开红色LED
    126             }
    127 
    128              if(Recdata[0]=='2')
    129             {
    130               if(Recdata[1]=='0')led2 = 1;      // 20# 关绿色LED
    131               else
    132                 led2 = 0;                       // 21# 开绿色LED
    133             }
    134             RTflag = 1;
    135             for(ii=0;ii<3;ii++)Recdata[ii]=' '; //清除刚才的命令
    136             datanumber = 0;                     //指针归位
    137           }
    138         }//while
    139 }
    140 
    141 /****************************************************************
    142 *函数功能 :串口接收一个字符                    
    143 *入口参数 : 无                        
    144 *返 回 值 :无                
    145 *说    明 :接收完成后仍然允许接收        
    146 ****************************************************************/
    147 #pragma vector = URX0_VECTOR
    148  __interrupt void UART0_ISR(void)
    149  {
    150      URX0IF = 0;                //清中断标志
    151     temp = U0DBUF;
    152         led1=0;
    153  }
  • 相关阅读:
    Oracle Merge into
    查询 null 记录
    删除 eclipse 插件
    vs 密钥
    视频网站建设
    eclipse 版本 查看
    让数据库变快的十个建议
    c# WebBrowser 操作
    svn 代码合并
    Android开发者应该深入学习的10个开源应用项目
  • 原文地址:https://www.cnblogs.com/zeedmood/p/2666933.html
Copyright © 2011-2022 走看看