432_PIC18F4580串口通信例程分析

19 篇文章 5 订阅

         全部学习汇总: https://github.com/GreyZhang/PIC18F

         这次的开发板购买经验的确是很失败,中间需要自己修改的东西太多了。不过也好,塞翁失马焉知非福,中间或许我能够学习的东西更加深入了也说不定。除此之外,修改代码的过程也算是emacs练习的一个好机会了。

         一看这段代码,老一套的问题。我注释掉了23行,代码进行了重新排版,其他的暂且不提了,出门左转有雷同笔记。

         LED的寄存器修改,肯定少不了得处理。

         Emacs,使用evil,一个重复操作基本上全都搞定了。

         看了一下,其实这是前面我已经调试过的一个程序,只是里面的信息略有修改。就当作练习emacs吧,再改一次。

         修改点已经讲明,还是能够打印出来为上。我估计,这部分代码,商家肯定是没有用串口调试助手看过的,兴许使用了好几技巧,两个板子对发倒是有可能的。

以下是使用 PIC18F26 MCU 与 PC 之间进行串口通信的示例程序。此程序使用了 UART 模块和中断来实现数据的接收和发送。 ```c #include <xc.h> #include <stdio.h> #pragma config FOSC = HS // 使用外部晶振 #pragma config WDTE = OFF // 禁用看门狗定时器 #pragma config PWRTE = OFF // 禁用上电延时定时器 #pragma config BOREN = OFF // 禁用复位时的低电压检测 #pragma config LVP = OFF // 关闭低电压编程模式 #define _XTAL_FREQ 20000000 // 晶振频率为20MHz #define BAUD_RATE 9600 // 串口波特率为9600 void init_uart(void); void uart_tx(char data); char uart_rx(void); void main(void) { TRISB = 0x00; // 设置 PORTB 为输出模式 PORTB = 0x00; // 初始化 PORTB 为0 init_uart(); // 初始化 UART while(1) { char rx_data = uart_rx(); // 接收串口数据 uart_tx(rx_data); // 发送串口数据 } } void init_uart(void) { TRISCbits.TRISC7 = 1; // 将 RX 引脚设置为输入 TRISCbits.TRISC6 = 0; // 将 TX 引脚设置为输出 SPBRG = (_XTAL_FREQ / (16 * BAUD_RATE)) - 1; // 设置波特率 TXSTAbits.BRGH = 1; // 使用高波特率模式 RCSTAbits.CREN = 1; // 启用连续接收模式 TXSTAbits.TXEN = 1; // 启用发送模式 RCIE = 1; // 启用接收中断 PEIE = 1; // 启用外部中断 GIE = 1; // 启用全局中断 } void uart_tx(char data) { while(!TXIF); // 等待 TX 寄存器为空 TXREG = data; // 发送数据 } char uart_rx(void) { while(!RCIF); // 等待接收完毕 return RCREG; // 返回接收到的数据 } void interrupt isr() { if(RCIF) { // 如果是接收中断 char rx_data = uart_rx(); // 接收串口数据 uart_tx(rx_data); // 发送串口数据 } } ``` 在此示例程序中,我们将 PORTB 设置为输出模式,并使用 UART 模块和中断来实现串口通信。在 `init_uart` 函数中,我们设置了波特率和其他 UART 寄存器的值,启用了连续接收模式和发送模式,并启用了接收中断。 在主循环中,我们使用 `uart_rx` 函数来接收串口数据,并使用 `uart_tx` 函数来发送串口数据。在中断服务例程中,我们也使用了 `uart_rx` 和 `uart_tx` 函数来实现接收和发送。 请注意,在 `init_uart` 函数中,我们启用了接收中断,并在中断服务例程中处理接收中断。这样可以确保即使 MCU 正在执行其他任务时,也可以及时地接收和发送数据。 此示例程序可以通过串口终端程序与 PC 进行通信,如 TeraTerm、PuTTY 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值