最近在使用Microchip的PIC系列MCU,做了一个小项目来熟悉UART串口通信和GPIO控制LED。通过UART接收指令,控制板子上的LED开关,代码比较简单,适合刚入门的小伙伴。下面是我的实现代码:
- #include <xc.h>
- #define _XTAL_FREQ 8000000 // 设置晶振频率
- #define LED_PIN LATBbits.LATB0 // LED连接到RB0引脚
- void UART_Init(void) {
- // 设置波特率
- SPBRG = 12; // 对应9600波特率,假设8MHz时钟
- TXSTAbits.SYNC = 0; // 异步模式
- RCSTAbits.SPEN = 1; // 使能串口
- TXSTAbits.TXEN = 1; // 使能发送
- RCSTAbits.CREN = 1; // 使能接收
- TRISCbits.TRISC6 = 0; // 设置TX为输出
- TRISCbits.TRISC7 = 1; // 设置RX为输入
- }
- void UART_SendChar(char data) {
- while (!TXSTAbits.TRMT); // 等待发送寄存器空
- TXREG = data;
- }
- char UART_ReceiveChar(void) {
- while (!PIR1bits.RCIF); // 等待数据接收完成
- return RCREG; // 返回接收到的数据
- }
- void LED_Control(char command) {
- if (command == '1') {
- LED_PIN = 1; // 打开LED
- } else if (command == '0') {
- LED_PIN = 0; // 关闭LED
- }
- }
- void main(void) {
- TRISBbits.TRISB0 = 0; // 设置RB0为输出(LED)
- UART_Init(); // 初始化UART
- while (1) {
- char receivedData = UART_ReceiveChar(); // 接收串口数据
- LED_Control(receivedData); // 根据接收到的命令控制LED
- }
- }
代码说明:- UART初始化:设置波特率、发送和接收配置。
- UART发送与接收:接收单个字符数据,根据接收到的命令控制LED开关。
- LED控制逻辑:接收'1'时点亮LED,接收'0'时关闭LED。
这个例子很基础,通过串口可以和MCU交互,输入'1'或'0'来控制LED的状态,非常适合用来入门Microchip的MCU开发。如果有小伙伴刚接触PIC单片机,可以试着改动这段代码,增加更多功能,比如多路LED控制或其他传感器的集成。
如果有问题,大家可以在下面留言一起讨论!
|