串口数据的接收与发送
1 #include "ioCC2530.h" 2 3 /*====================初始化系统时钟函数======================*/ 4 void Init_Clock_32MHz() 5 { 6 CLKCONCMD &= ~0x40; //选择系统时钟源为32MHZ晶振 0100 0000->1011 1111 7 while(CLKCONSTA & 0x40); //等待晶振稳定 0100 0000 8 CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ 0100 0111->1011 1000 9 } 10 11 /*======================初始化串口0函数=======================*/ 12 void Init_Uart0() 13 { 14 //端口相关的配置 15 PERCFG = 0x00; //串口0的引脚映射到位置1,即P0_2和P0_3 16 P0SEL = 0x0C; //将P0_2和P0_3端口设置成外设功能 17 //波特率相关的配置 18 U0BAUD = 59; //32MHz的系统时钟产生9600BPS的波特率 19 U0GCR = 8; //16MHz---9; 32MHz---8 20 //串口属性相关的配置 21 U0UCR |= 0x80; //禁止流控,8位数据,清除缓冲器 1000 0000 22 U0CSR |= 0xC0; //选择UART模式,使能接收器 1100 0000 23 //串口中断相关的配置 24 UTX0IF = 0; //清除TX发送中断标志 25 URX0IF = 0; //清除RX接收中断标志 26 URX0IE = 1; //使能URAT0的接收中断 27 IEN2 |= 0x04; //使能URAT0的发送中断 0000 0100 28 EA = 1; //使能总中断 29 } 30 31 /*===================串口0接收中断服务函数=====================*/ 32 #pragma vector = URX0_VECTOR 33 __interrupt void UR0_RecvInt() 34 { 35 U0DBUF = U0DBUF + 1; //将接收到的数据加1再发生回去 36 } 37 /*===================串口0中发送断服务函数=====================*/ 38 #pragma vector = UTX0_VECTOR 39 __interrupt void UR0_SendInt() 40 { 41 UTX0IF = 0; //清除TX中断标志,准备下一次发送 42 } 43 44 void main() 45 { 46 Init_Clock_32MHz(); 47 Init_Uart0(); 48 while(1) 49 { 50 } 51 }
重要:串口单字节命令控制灯光
1 #include "ioCC2530.h" 2 3 #define D3 P1_0 4 #define D4 P1_1 5 #define D5 P1_3 6 #define D6 P1_4 7 8 unsigned char F_UR0_Recv = 0; //上位机命令字接收完成标志 9 unsigned char UR0_Command; //上位机命令控制字 10 11 /*====================初始化系统时钟函数======================*/ 12 void Init_Clock_32MHz() 13 { 14 CLKCONCMD &= ~0x40; //选择系统时钟源为32MHZ晶振 15 while(CLKCONSTA & 0x40); //等待晶振稳定 16 CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ 17 } 18 19 /*======================初始化串口0函数=======================*/ 20 void Init_Uart0() 21 { 22 //端口相关的配置 23 PERCFG = 0x00; //串口0的引脚映射到位置1,即P0_2和P0_3 24 P0SEL = 0x0C; //将P0_2和P0_3端口设置成外设功能 25 //波特率相关的配置 26 U0BAUD = 59; //32MHz的系统时钟产生9600BPS的波特率 27 U0GCR = 8; //16MHz---9; 32MHz---8 28 //串口属性相关的配置 29 U0UCR |= 0x80; //禁止流控,8位数据,清除缓冲器 30 U0CSR |= 0xC0; //选择UART模式,使能接收器 31 //串口中断相关的配置 32 UTX0IF = 0; //清除TX发送中断标志 33 URX0IF = 0; //清除RX接收中断标志 34 URX0IE = 1; //使能URAT0的接收中断 35 EA = 1; //使能总中断 36 } 37 38 /*===================串口0接收中断服务函数=====================*/ 39 #pragma vector = URX0_VECTOR 40 __interrupt void UR0_RecvInt() 41 { 42 UR0_Command = U0DBUF; //将控制命令字从缓冲区取出 43 F_UR0_Recv = 1; //标志成功接收上位机的单字节命令 44 } 45 46 /*=====================串口0单字节发送函数=====================*/ 47 void UR0_Send_Byte(unsigned char dat) 48 { 49 U0DBUF = dat; //将要发送的1字节数据写入U0DBUF 50 while(!UTX0IF); //等待TX中断标志,即数据发送完成 51 UTX0IF = 0; //清除TX中断标志,准备下一次发送 52 } 53 54 /*=====================串口0字符串发送函数=====================*/ 55 void UR0_Send_String(unsigned char *str) 56 { 57 while(*str != '