2024-09-07
单片机
00

目录

位定义:
位定义:
位定义:
位定义:
位定义:

寄存器定义:EUSART 控制
寄存器 31-1: TX1STA - 发送状态与控制寄存器

R/W-/0R/W-0/0R/W-0/0R/W-0/0R/W-0/0R/W-0/0R-1/1R/W-0/0
CSRCTX9TXEN(1)SYNCSENDBBRGHTRMTTX9D
位 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: 发送数据的第九位

    • 可以是地址/数据位或校验位。

注:

  1. 在同步模式下,SREN/CREN 会覆盖 TXEN

寄存器定义:EUSART 控制
寄存器 31-2: RC1STA - 接收状态与控制寄存器

R/W-0/0R/W-0/0R/W-0/0R/W-0/0R/W-0/0R-0/0R-0/0R-0/0
SPENRX9SRENCRENADDENFERROERRRX9D
位 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: 地址检测使能位

    • 异步模式,9 位接收(RX9 = 1)
      • 1 = 启用地址检测,当 RSR<8> 设置时,启用中断并将接收缓冲区加载
      • 0 = 禁用地址检测,所有字节接收,第九位可用作校验位
    • 异步模式,8 位接收(RX9 = 0):不相关
  • 位 2 FERR: 帧错误位

    • 1 = 帧错误(通过读取 RC1REG 寄存器并接收下一个有效字节更新)
    • 0 = 无帧错误
  • 位 1 OERR: 超限错误位

    • 1 = 超限错误(可以通过清除 CREN 位来清除错误)
    • 0 = 无超限错误
  • 位 0 RX9D: 接收数据的第九位

    • 这可以是地址/数据位或校验位,需由用户固件计算。
  • 用户固件需要自行处理第九位的地址/数据或校验位。

寄存器定义:EUSART 控制
寄存器 31-3: BAUD1CON - 波特率控制寄存器

R-0/0R-1/1U-0R/W-0/0R/W-0/0U-0R/W-0/0R/W-0/0
ABDOVFRCIDLSCKPBRG16WUEABDEN
位 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-0U-0U-0R/W-q/uR/W-q/uR/W-q/uR/W-q/uR/W-q/u
xxxPPS<4:0>
位 7位 6位 5位 4位 3位 2位 1位 0

位定义:

  • 位 7-5 未实现:读作‘0’

  • 位 4-3 xxxPPS<4:3>: 外设 xxx 输入 PORTx 选择位

    • 请参见表 12-1,了解每个外设的可用端口列表。
    • 11 = 外设输入来自 PORTD(仅限 PIC16(L)F1717/9)
    • 10 = 外设输入来自 PORTC
    • 01 = 外设输入来自 PORTB
    • 00 = 外设输入来自 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-0U-0U-0R/W-0/uR/W-0/uR/W-0/uR/W-0/uR/W-0/u
RxyPPS<4:0>
位 7位 6位 5位 4位 3位 2位 1位 0

位定义:

  • 位 7-5 未实现:读作‘0’

  • 位 4-0 RxyPPS<4:0>: 引脚 Rxy 输出源选择位

    • 选择码确定端口引脚上的输出信号。
    • 请参见表 12-2,了解支持的端口和选择码。

image.png

31.1.2.8 异步接收设置:

  • 1.初始化 SP1BRGH 和 SP1BRGL 寄存器对,以及 BRGH 和 BRG16 位,以达到所需的波特率(参见 31.4 节 “EUSART 波特率发生器 (BRG)”)。
  • 2.清除 RX 引脚的 ANSEL 位(如果适用)。
  • 3.通过设置 SPEN 位启用串行端口。异步操作时必须清除 SYNC 位。
  • 4.如果需要中断,设置 PIE1 寄存器中的 RCIE 位,以及 INTCON 寄存器中的 GIE 和 PEIE 位。
  • 5.如果需要 9 位接收,设置 RX9 位。
  • 6.通过设置 CREN 位启用接收。
  • 7.当字符从 RSR 传输到接收缓冲区时,RCIF 中断标志位将被置位。如果 RCIE 中断启用位也被设置,则会产生中断。
  • 8.读取 RC1STA 寄存器以获取错误标志,如果启用了 9 位数据接收,还可以获取第九位数据位。
  • 9.通过读取 RC1REG 寄存器从接收缓冲区获取接收到的 8 个最低有效数据位。
  • 10.如果发生溢出,清除 OERR 标志,方法是清除 CREN 接收器启用位。

31.1.2.9 9位地址检测模式设置 此模式通常用于 RS-485 系统。设置带地址检测的异步接收:

  • 11.初始化 SP1BRGH 和 SP1BRGL 寄存器对,以及 BRGH 和 BRG16 位,以达到所需的波特率(参见 31.4 节 “EUSART 波特率发生器 (BRG)”)。
  • 12.清除 RX 引脚的 ANSEL 位(如果适用)。
  • 13.通过设置 SPEN 位启用串行端口。异步操作时必须清除 SYNC 位。
  • 14.如果需要中断,设置 PIE1 寄存器中的 RCIE 位,以及 INTCON 寄存器中的 GIE 和 PEIE 位。
  • 15.设置 RX9 位启用 9 位接收。
  • 16.设置 ADDEN 位启用地址检测。
  • 17.通过设置 CREN 位启用接收。
  • 18.当第九位被置位的字符从 RSR 传输到接收缓冲区时,RCIF 中断标志位将被置位。如果 RCIE 中断启用位也被设置,则会产生中断。
  • 19.读取 RC1STA 寄存器以获取错误标志。第九位数据位将始终被置位。
  • 20.通过读取 RC1REG 寄存器从接收缓冲区获取接收到的 8 个最低有效数据位。软件决定该地址是否是设备的地址。
  • 21.如果发生溢出,清除 OERR 标志,方法是清除 CREN 接收器启用位。
  • 22.如果设备被寻址,清除 ADDEN 位以允许所有接收到的数据进入接收缓冲区并产生中断。

在 PIC16(L)F1717/8/9 微控制器中,串口通信模块(即 EUSART,增强型异步收发器)支持异步和同步两种工作模式。了解这两种模式可以帮助你选择最适合你应用需求的通信方式。 异步模式(Asynchronous Mode) 特点:

  • 1.无时钟信号:在异步模式下,数据的发送和接收不依赖于一个额外的时钟信号。数据的传输基于预设的波特率。
  • 2.数据帧结构:数据以帧的形式发送,每帧包括一个起始位、数据位、可选的奇偶校验位和一个或多个停止位。接收端通过检测这些位来同步数据。
  • 3.波特率设置:通信双方需要配置相同的波特率,以确保正确的数据传输。波特率决定了数据传输的速度(每秒传输的比特数)。
  • 4.适用场景:适用于需要长距离通信或对时钟同步要求不高的应用,例如串口通信(RS-232)和计算机与外围设备之间的通信。

同步模式(Synchronous Mode) 特点:

  • 1.有时钟信号:在同步模式下,数据的发送和接收都依赖于一个额外的时钟信号。这个时钟信号由主设备生成,并且通常与数据传输是同步的。
  • 2.数据帧结构:数据以字节(通常包括起始位和停止位)进行同步传输。接收端使用时钟信号来同步数据位的接收。
  • 3.时钟信号:同步模式中的时钟信号确保数据在发送和接收时保持一致,避免了时钟漂移的问题。
  • 4.适用场景:适用于需要高数据传输速率、时钟同步要求较高的应用,例如 SPI(串行外设接口)和某些高速通信接口。

PIC16(L)F1717/8/9 的配置

  • 1.异步模式:使用 TX(发送)和 RX(接收)引脚,配置波特率生成器,并设置相关的寄存器(如 TXSTAbits、RCSTAbits)来控制通信参数。
  • 2.同步模式:需要配置相关寄存器(如 TXSTAbits、RCSTAbits、SPBRG)来选择同步模式并配置时钟源。同步模式通常涉及配置额外的时钟信号引脚(如 SCK 引脚)。

在实际应用中,选择异步还是同步模式取决于你的具体需求,比如数据传输速率、距离、以及系统的同步要求。

初始化:

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"); } }

可发可收:

image.png

使用mplab + xc8 v1.41编写。

全部代码资料:

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

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