寄存器定义:EUSART 控制
寄存器 31-1: TX1STA - 发送状态与控制寄存器
| R/W-/0 | R/W-0/0 | R/W-0/0 | R/W-0/0 | R/W-0/0 | R/W-0/0 | R-1/1 | R/W-0/0 | 
|---|---|---|---|---|---|---|---|
| CSRC | TX9 | TXEN(1) | SYNC | SENDB | BRGH | TRMT | TX9D | 
| 位 7 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 位 0 | 
位 7 CSRC: 时钟源选择位
1 = 主模式(时钟由 BRG 内部生成)0 = 从模式(时钟来自外部源)位 6 TX9: 9 位发送使能位
1 = 选择 9 位传输0 = 选择 8 位传输位 5 TXEN: 发送使能位 (1)
1 = 启用发送0 = 禁用发送位 4 SYNC: EUSART 模式选择位
1 = 同步模式0 = 异步模式位 3 SENDB: 发送中断字符位
1 = 在下次传输时发送同步中断(传输完成后硬件自动清除)0 = 同步中断传输完成位 2 BRGH: 高波特率选择位
1 = 高速0 = 低速位 1 TRMT: 发送移位寄存器状态位
1 = TSR 空0 = TSR 满位 0 TX9D: 发送数据的第九位
注:
寄存器定义:EUSART 控制
寄存器 31-2: RC1STA - 接收状态与控制寄存器
| R/W-0/0 | R/W-0/0 | R/W-0/0 | R/W-0/0 | R/W-0/0 | R-0/0 | R-0/0 | R-0/0 | 
|---|---|---|---|---|---|---|---|
| SPEN | RX9 | SREN | CREN | ADDEN | FERR | OERR | RX9D | 
| 位 7 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 位 0 | 
位 7 SPEN: 串口使能位
1 = 启用串行端口0 = 禁用串行端口(保持复位状态)位 6 RX9: 9 位接收使能位
1 = 选择 9 位接收0 = 选择 8 位接收位 5 SREN: 单次接收使能位
1 = 启用单次接收0 = 禁用单次接收(接收完成后自动清除)位 4 CREN: 连续接收使能位
1 = 启用接收0 = 禁用接收1 = 启用连续接收,直到 CREN 位被清除(CREN 覆盖 SREN)0 = 禁用连续接收位 3 ADDEN: 地址检测使能位
1 = 启用地址检测,当 RSR<8> 设置时,启用中断并将接收缓冲区加载0 = 禁用地址检测,所有字节接收,第九位可用作校验位位 2 FERR: 帧错误位
1 = 帧错误(通过读取 RC1REG 寄存器并接收下一个有效字节更新)0 = 无帧错误位 1 OERR: 超限错误位
1 = 超限错误(可以通过清除 CREN 位来清除错误)0 = 无超限错误位 0 RX9D: 接收数据的第九位
用户固件需要自行处理第九位的地址/数据或校验位。
寄存器定义:EUSART 控制
寄存器 31-3: BAUD1CON - 波特率控制寄存器
| R-0/0 | R-1/1 | U-0 | R/W-0/0 | R/W-0/0 | U-0 | R/W-0/0 | R/W-0/0 | 
|---|---|---|---|---|---|---|---|
| ABDOVF | RCIDL | — | SCKP | BRG16 | — | WUE | ABDEN | 
| 位 7 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 位 0 | 
位 7 ABDOVF: 自动波特率检测溢出位
1 = 自动波特率定时器溢出0 = 自动波特率定时器未溢出位 6 RCIDL: 接收空闲标志位
1 = 接收器处于空闲状态0 = 起始位已被接收,接收器正在接收位 5 未实现:读作‘0’
位 4 SCKP: 同步时钟极性选择位
1 = 将反相数据传输到 TX/CK 引脚0 = 将非反相数据传输到 TX/CK 引脚1 = 数据在时钟上升沿传输0 = 数据在时钟下降沿传输位 3 BRG16: 16 位波特率发生器位
1 = 使用 16 位波特率发生器0 = 使用 8 位波特率发生器位 2 未实现:读作‘0’
位 1 WUE: 唤醒使能位
1 = 接收器正在等待下降沿,不会接收字符,RCIF 位将被设置。WUE 在 RCIF 设置后会自动清除。0 = 接收器正常工作位 0 ABDEN: 自动波特率检测使能位
1 = 自动波特率检测模式启用(当自动波特率完成后会自动清除)0 = 自动波特率检测模式禁用寄存器定义:PPS 输入选择
寄存器 12-1: xxxPPS - 外设 xxx 输入选择寄存器
| U-0 | U-0 | U-0 | R/W-q/u | R/W-q/u | R/W-q/u | R/W-q/u | R/W-q/u | 
|---|---|---|---|---|---|---|---|
| — | — | — | xxxPPS<4:0> | ||||
| 位 7 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 位 0 | 
位 7-5 未实现:读作‘0’
位 4-3 xxxPPS<4:3>: 外设 xxx 输入 PORTx 选择位
11 = 外设输入来自 PORTD(仅限 PIC16(L)F1717/9)10 = 外设输入来自 PORTC01 = 外设输入来自 PORTB00 = 外设输入来自 PORTA位 2-0 xxxPPS<2:0>: 外设 xxx 输入 PORTx 位选择位
111 = 外设输入来自 PORTx 第 7 位 (Rx7)110 = 外设输入来自 PORTx 第 6 位 (Rx6)101 = 外设输入来自 PORTx 第 5 位 (Rx5)100 = 外设输入来自 PORTx 第 4 位 (Rx4)011 = 外设输入来自 PORTx 第 3 位 (Rx3)010 = 外设输入来自 PORTx 第 2 位 (Rx2)001 = 外设输入来自 PORTx 第 1 位 (Rx1)000 = 外设输入来自 PORTx 第 0 位 (Rx0)寄存器定义:PPS 输出选择
寄存器 12-2: RxyPPS - 引脚 Rxy 输出源选择寄存器
| U-0 | U-0 | U-0 | R/W-0/u | R/W-0/u | R/W-0/u | R/W-0/u | R/W-0/u | 
|---|---|---|---|---|---|---|---|
| — | — | — | RxyPPS<4:0> | ||||
| 位 7 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 位 0 | 
位 7-5 未实现:读作‘0’
位 4-0 RxyPPS<4:0>: 引脚 Rxy 输出源选择位

31.1.2.8 异步接收设置:
31.1.2.9 9位地址检测模式设置 此模式通常用于 RS-485 系统。设置带地址检测的异步接收:
在 PIC16(L)F1717/8/9 微控制器中,串口通信模块(即 EUSART,增强型异步收发器)支持异步和同步两种工作模式。了解这两种模式可以帮助你选择最适合你应用需求的通信方式。 异步模式(Asynchronous Mode) 特点:
同步模式(Synchronous Mode) 特点:
PIC16(L)F1717/8/9 的配置
在实际应用中,选择异步还是同步模式取决于你的具体需求,比如数据传输速率、距离、以及系统的同步要求。
初始化:
c展开代码    TX9 = 0;
    TXEN = 1;                   
    SYNC = 0;
    BRGH = 0;                    
    BRG16 = 0;
    SPBRG = (_XTAL_FREQ / (9600ul * 64ul)) - 1ul; 
    SPEN = 1;                        
    RX9=0;
    CREN = 1;
    
    
    PEIE = 1;                   // 启用外设中断
    RCIE = 1;
    GIE = 1;     
xc8串口中断:
c展开代码
void __interrupt() ISRx(void) {
    if (RCIF) {
        if (OERR) {             // 如果发生溢出错误
            CREN = 0;           // 清除溢出错误
            CREN = 1;           // 重新使能接收
        }
        char receivedChar = RC1REG;  // 读取接收寄存器的数据
        EUSART_SendString("Received: ");
        UART_SendChar(receivedChar);  // 将接收到的数据通过串口发回
        EUSART_SendString("\r\n");
    }
}
可发可收:

使用mplab + xc8 v1.41编写。
全部代码资料:


本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!