zoukankan      html  css  js  c++  java
  • 嵌入式成长轨迹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  }
  • 相关阅读:
    vue-cli + webpack 多页面实例配置优化方法
    Python Web(1):建立第一个Web项目
    C# winform用sharpGL(OpenGl)解析读取3D模型obj
    CSS outline 属性
    sqlserver查询两个值是否相等
    vue v-for(数组遍历)
    内存查看工具RAMMAP说明
    linux 入门
    linux 内核根文件系统
    linux 命令
  • 原文地址:https://www.cnblogs.com/zeedmood/p/2666935.html
Copyright © 2011-2022 走看看