寄存器定义: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 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!