程序代码:
#include <iocc2530.h> #include <stdio.h> #define _BV(n) (1 << (n)) #define CLKCONCMD_OSC _BV(6) #define CLKCONCMD_CLKSPD 0x07 #define CLKCONSTA_OSC _BV(6) #define P0SEL_SELP0_3 _BV(3) #define P0SEL_SELP0_2 _BV(2) #define U0CSR_MODE _BV(7) #define U0CSR_RE _BV(6) #define U0CSR_RX_BYTE _BV(2) #define U0CSR_TX_BYTE _BV(1) //#define SYSCLK_32MHz // 选择时钟源 __near_func int putchar(int c) { if (c == '\n') putchar('\r'); U0DBUF = c; // 发送字符 while ((U0CSR & U0CSR_TX_BYTE) == 0); // 等待字符发送完毕 U0CSR &= ~U0CSR_TX_BYTE; // 清除发送成功标志位 return c; } #ifdef SYSCLK_32MHz void clock_init(void) { CLKCONCMD &= ~CLKCONCMD_OSC; // 选择系统时钟为32-MHz XOSC while (CLKCONSTA & CLKCONSTA_OSC); // 等待系统时钟变为32-MHz XOSC CLKCONCMD &= ~CLKCONCMD_CLKSPD; // 将系统主时钟频率设为32MHz } #endif void usart_init(void) { U0CSR = U0CSR_MODE | U0CSR_RE; // 选UART模式, 允许接收 P0SEL = P0SEL_SELP0_2 | P0SEL_SELP0_3; // 将P0.2和P0.3设为外设输出 // 波特率: 115200 #ifdef SYSCLK_32MHz U0GCR = 11; // BAUD_E U0BAUD = 216; // BAUD_M #else // 16MHz默认时钟 U0GCR = 12; U0BAUD = 225; // 若出现乱码, 微调此寄存器的值 #endif } int main(void) { char data; #ifdef SYSCLK_32MHz clock_init(); #endif usart_init(); printf("Hello CC2530! CLKCONCMD=0x%02x\n", CLKCONCMD); while (1) { // 字符接收 if (U0CSR & U0CSR_RX_BYTE) { data = U0DBUF; printf("Key 0x%02x!\n", data); } } }程序运行结果:
开发环境:
烧写工具: