嵌入式成长轨迹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 }