嵌入式成长轨迹52 【Zigbee项目】【CC2430基础实验】【在PC用串口收数并发数】

 


在PC上从串口向 CC2430发任意长度为 30 字节的字串,若长度不足 30 字节,则以“#“为字串末字节,CC2430在收到字节后会将这一字串从串口反向发向 PC,用串口助手可以显示出来。

 

  1 //main.c
  2 #include <iocc2430.h>
  3 #include <string.h>
  4 
  5 #define uint unsigned int
  6 #define uchar unsigned char
  7 #define FALSE 0
  8 #define TURE 1
  9 
 10 //定义控制灯的端口
 11 #define led1 P1_0
 12 #define led2 P1_1
 13 
 14 void Delay(uint);
 15 void initUARTtest(void);
 16 void InitialAD(void);
 17 void UartTX_Send_String(uchar *Data,int len);
 18 
 19 
 20 uchar Recdata[30]="ChenDu WuXianLong TongXun";
 21 uchar RTflag = 1;
 22 uchar temp;
 23 uint  datanumber = 0;
 24 uint  stringlen;
 25 
 26 /****************************************************************
 27 *函数功能 :延时                        
 28 *入口参数 :定性延时                                    
 29 *返 回 值 :无                                                
 30 *说    明 :                                                    
 31 ****************************************************************/
 32 void Delay(uint n)
 33 {
 34     uint i;
 35     for(i=0;i<n;i++);
 36     for(i=0;i<n;i++);
 37     for(i=0;i<n;i++);
 38     for(i=0;i<n;i++);
 39     for(i=0;i<n;i++);
 40 }
 41 
 42 /****************************************************************
 43 *函数功能 :初始化串口1                                        
 44 *入口参数 :无                                                
 45 *返 回 值 :无                            
 46 *说    明 :57600-8-n-1                        
 47 ****************************************************************/
 48 void initUARTtest(void)
 49 {
 50 
 51     CLKCON &= ~0x40;              //晶振
 52     while(!(SLEEP & 0x40));      //等待晶振稳定
 53     CLKCON &= ~0x47;             //TICHSPD128分频,CLKSPD不分频
 54     SLEEP |= 0x04;          //关闭不用的RC振荡器
 55 
 56     PERCFG = 0x00;                //位置1 P0口
 57     P0SEL = 0x3c;                //P0用作串口
 58 
 59     U0CSR |= 0x80;                //UART方式
 60     U0GCR |= 10;                //baud_e
 61     U0BAUD |= 216;                //波特率设为57600
 62     UTX0IF = 1;
 63 
 64     U0CSR |= 0X40;                //允许接收
 65     IEN0 |= 0x84;                //开总中断,接收中断
 66 }
 67 
 68 /****************************************************************
 69 *函数功能 :串口发送字符串函数                    
 70 *入口参数 : data:数据                                    
 71 *            len :数据长度                            
 72 *返 回 值 :无                                            
 73 *说    明 :                
 74 ****************************************************************/
 75 void UartTX_Send_String(uchar *Data,int len)
 76 {
 77   int j;
 78   for(j=0;j<len;j++)
 79   {
 80     U0DBUF = *Data++;
 81     while(UTX0IF == 0);
 82     UTX0IF = 0;
 83   }
 84 }
 85 
 86 
 87 /****************************************************************
 88 *函数功能 :主函数                                
 89 *入口参数 :无                            
 90 *返 回 值 :无                        
 91 *说    明 :无                            
 92 ****************************************************************/
 93 void main(void)
 94 {    
 95     //P1 out
 96     P1DIR = 0x03;                 //P1控制LED
 97     led1 = 1;
 98     led2 = 0;                //关LED
 99 
100     initUARTtest();
101         stringlen = strlen((char *)Recdata);
102     UartTX_Send_String(Recdata,27);            //wu xian long
103 
104     while(1)
105     {
106           if(RTflag == 1)            //接收
107           {
108             led2=0;                //接收状态指示
109             if( temp != 0)
110             {
111                 if((temp!='#')&&(datanumber<30))
112                 {                               //’#‘被定义为结束字符
113                                                 //最多能接收30个字符
114                   Recdata[datanumber++] = temp;
115                 }
116                 else
117                 {
118                   RTflag = 3;                   //进入发送状态
119                 }
120                 if(datanumber == 30)RTflag = 3;
121               temp  = 0;
122             }
123           }
124 
125           if(RTflag == 3)            //发送
126           {
127             led2 = 1;                           //关绿色LED
128             led1 = 0;                    //发送状态指示
129             U0CSR &= ~0x40;            //不能收数
130             UartTX_Send_String(Recdata,datanumber);
131             U0CSR |= 0x40;            //允许收数
132             RTflag = 1;                        //恢复到接收状态
133             datanumber = 0;            //指针归0
134             led1 = 1;                    //关发送指示
135           }
136     }
137 }
138 
139 /****************************************************************
140 *函数功能 :串口接收一个字符                    
141 *入口参数 : 无                        
142 *返 回 值 :无                
143 *说    明 :接收完成后打开接收                
144 ****************************************************************/
145 #pragma vector = URX0_VECTOR
146  __interrupt void UART0_ISR(void)
147  {
148      URX0IF = 0;                //清中断标志
149     temp = U0DBUF;
150  }

 

posted @ 2012-09-01 18:25  MooreZHENG  阅读(289)  评论(0编辑  收藏  举报