CC2530--串口实验的回显
2014-01-10 17:25
176 查看
今天做了一个下面的实验,注释都有了,所以就不过多解释了,主要就是总结一下
1.串口收发要初始化串口,(设置时钟频率-->选择用来当做串口的IO-->设置波特率-->发送中断设为0-->打开数据接收的中断)
2.字符串发送函数(U0DBUF填充字符-->等待串口发送完毕-->发送中断标志设为0,准备下次发送)
3.按键中断服务程序中,除了P1IFG要清零以外,P1IF也要清零。哎,忘记为什么了,有谁知道的,可以告诉我一下。反正我试了一下,不加上P1IF清零,程序就死循环了。
1.串口收发要初始化串口,(设置时钟频率-->选择用来当做串口的IO-->设置波特率-->发送中断设为0-->打开数据接收的中断)
2.字符串发送函数(U0DBUF填充字符-->等待串口发送完毕-->发送中断标志设为0,准备下次发送)
3.按键中断服务程序中,除了P1IFG要清零以外,P1IF也要清零。哎,忘记为什么了,有谁知道的,可以告诉我一下。反正我试了一下,不加上P1IF清零,程序就死循环了。
/**************************** * project: 串口实验的回显 * 描述:在PC机中的串口软件中发送数据给cc2530, 当发生以下其中一个条件时,cc2530就将数 据发回给PC机,PC端的串口软件显示该数据 a)cc2530接收到“#” b)接收到的数据长度等于50 c)按下按键s3 * 时间:2014年1月9日 * 作者:林少游 ***************************/ #include <ioCC2530.h> #include <string.h> #define YLED P1_0 #define BLED P1_1 #define KEY3 P1_2 #define uchar unsigned char #define uint unsigned int #define LIGHTOPEN 1 #define LIGHTCLOSE 0 uint DataNumber=0; //接收到的数据的长度 char temp=0; //接收到的字符 char ReceiveData[50]; //接收到的数据 char TXRXFlag=1; //发送标志,1代表接收数据,3代表发送数据 void Delay(uint n); void Init_Io(); void Init_Usart0(); void Usart0_Send_String(char *Data,int len); /**************************** * @brief : 延时函数 ****************************/ void Delay(uint n) { uint i; for(i=0;i<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++); } /**************************** * @brief : IO端口初始化 * 描述 :Led灯的作用是标志数据接收或发送的状态 ****************************/ void Init_Io() { P1DIR |= 0X03; //P1.0,P1.1设置为输出 YLED = LIGHTOPEN; //开黄灯 BLED = LIGHTCLOSE; //关蓝灯 P1DIR &= ~0X40; //P1.2设置为输入 P1IEN |= 0X04; //P1.2设置为允许中断 PICTL |= 0X02; //下降沿触发 EA = 1; //打开总中断 IEN2 |= 0X10; //P1允许中断 P1IFG = 0X00; //P1中断标志清零 } /**************************** * @brief : 串口初始化函数 ****************************/ void Init_Usart() { CLKCONCMD &= ~0X40; //设置系统时钟源为32MHz while(CLKCONSTA&0X40);//等待晶振稳定 CLKCONCMD &= ~0X47; //设置系统主时钟为32MHz PERCFG = 0X00; //选择P0做串口 P0SEL |= 0X3C; //P0.2,P0.3,P0.4,P0.5设置为外设 P2DIR &= ~0XC0; //选择UART0优先 U0CSR |= 0X80; //USART模式选择UART U0GCR |= 9; U0BAUD|= 59; //波特率设置为19200 U0CSR |= 0X40; //允许接收 IEN0 |= 0X84; //开总中断,接收中断使能 } /**************************** * @brief :Uart0发送字符串函数 * @param :Data - 要发送的数据 len - 数据的长度 ****************************/ void Usart0_Send_String(char *Data,int len) { uint i; for(i=0;i<len;i++) { U0DBUF = *Data++; //每次填充一个字符,即8位 while(UTX0IF==0); //等待发送完毕 UTX0IF=0; //发送终端清零,准备下一个发送 } } /**************************** * @brief : 主函数 ****************************/ main() { Init_Io(); Init_Usart(); while(1) { YLED = LIGHTOPEN; //发送数据时亮黄灯 if(TXRXFlag == 1) { if(temp!= 0) { if(temp!='#') { ReceiveData[DataNumber++]=temp; }else { TXRXFlag = 3; //发送数据 } if(DataNumber==50) { TXRXFlag = 3; //发送数据 } temp = 0; } } if(TXRXFlag == 3) { BLED = LIGHTOPEN; YLED = LIGHTCLOSE;//发送数据标志 U0CSR &= ~0X40; //停止接收数据 Usart0_Send_String(ReceiveData,DataNumber); //发送数据 U0CSR |= 0X40; //允许数据接收 DataNumber=0; //数据长度置0 TXRXFlag = 1; //接收数据 BLED ^=1; YLED ^=1; //接收数据标志 } } } /**************************** * @brief : 中断服务程序--接收数据 ****************************/ #pragma vector = URX0_VECTOR __interrupt void URX0_ISR(void) { temp = U0DBUF; //保存数据 URX0IF = 0; //接收中断标志清零,准备下一个数据接收 } /**************************** * @brief : 中断服务程序--按键s3中断 * @描述 :当按下按键的时候也可以将接收到的数据发回给PC机 ****************************/ #pragma vector = P1INT_VECTOR __interrupt void P1INT_ISR(void) { P1IFG = 0; //P1中断状态标志清零 TXRXFlag = 3; //发送数据 P1IF = 0; //P1中断标志清零 }
相关文章推荐
- cc2530 串口实验4--设置时间
- CC2530 ADC实验1(读取片内温度并通过串口显示)
- CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)
- cc2530 串口实验--控制led灯
- CC2530 串口实验
- cc2530 串口实验--控制led灯
- CC2530基础实验之串口控制LED灯
- 2013-10-17 实验之串口程序接受与发送
- zigbee网蜂cc2530组播实验,基于SampleApp例程
- Z-STACK之cc2530串口(POLL-DMA)驱动详解下
- 寒假学习之STM32(5)----串口实验
- CC2530基础实验(1)—LED灯闪烁
- 远程串口应用在实验数据采集
- Zigbee-cc2530 笔记---串口收发
- CC2530基础实验之采集模拟量传感器值
- VC串口通信实验
- cc2530-----串口透明传输分析
- CC2530实现M3650B-HA主动模式读卡(串口中断接收)
- 一起学mini2440裸机开发(十二)--mini2440的串口中断实验
- 实验:协议栈之串口基础实验