1.1 USART的异步工作模式
在异步工作模式下, USART 采用的是标准非归零 ( NRZ编码格式 :一位起始位、8 位或 9 位数据位和一位停止位 )。最常用的数据格式是 8 位。片内专用的 8 位波特率发生器可用于由振荡器产生标准的波特率频率。 USART 首先发送和接收最低有效位。 USART 的发送器和接收器在功能上是独立的, 但采用相同的数据格式和波特率。 波特率发生器可以根据 BRGH 位 (TXSTA<2>)的状态产生两种不同的移位速率:对系统时钟 16 分频或 64 分频的波特率时钟。 USART 硬件不支持奇偶校验,但可以用软件实现 ( 奇偶校验位是第 9 个数据位 )。在休眠状态下, USART 不能在异步模式下工作。通过对 SYNC 位 (TXSTA<4>) 清零,可选择 USART 异步工作模式。USART 异步工作模式包括如下重要部分: 波特率发生器, 采样电路, 异步发送器,异步接收器。
1.2 异步发送器
上图展示的是发送器发送原理图。设置异步发送模式应遵循以下一些步骤: 1. 选择合适的波特率,对 SPBRG 寄存器进行初始化。如果需要高速波特率,将 BRGH 位置1 ;
2. 将 SYNC 位清零、 SPEN 位置 1,使能异步串行端口;
3. 若需要中断,将 TXIE、 GIE 和 PEIE 位置 1 ;(发送中断使能、中断总开关,外围中断使能)
4. 若需要发送 9 位数据,将 TX9 位置 1 ;
5. 将 TXEN 位置 1 ,使能发送,这也将置位 TXIF 位;
6. 若选择发送 9 位数据,第 9 位数据应该先写入 TX9D 位;
7. 把数据送入 TXREG 寄存器 ( 启动发送 )。 异步通信数据发送的时序图如下所示:
1.3 与异步发送相关的寄存器
1.4 异步接收器
上图展示的是接收数据器的功能电路图。设置异步接收模式时必须遵循以下步骤:
1. 选择合适的波特率对 SPBRG 进行初始化,如果需要高速波特率,将 BRGH 置 1 ;
2. 将 SYNC 清零, SPEN 置 1,使能异步串口;
3. 若需要中断,将 RCIE、 GIE 和 PEIE 位置 1 ;
4. 如果需要接收 9 位数据,将 RX9 位置 1 ;
5. 将 CREN 位置 1,使 USART 工作在接收方式;
6. 当接收完成后,中断标志位 RCIF 被置 1,如果此时 RCIE 已被置 1,便产生中断;
7. 读 RCSTA 寄存器获取第 9 位数据 (如果已使能),并判断在接收操作中是否发生错误;
8. 读 RCREG 寄存器来读取 8 位接受到的数据;
9. 如果发生错误,通过将 CREN 清零来清除错误。
1.5 与异步接收相关的寄存器
异步发送器/接收器实例分析:
BSF STATUS,RP0 ; STATUE的PRO位置1
MOVLW ; 设定波特率的值,并装载到波特率发生器寄存器中
MOVWF SPBRG
MOVLW 0x40 ; 设定发送状态器的状态 0100 0000B 的含义:
MOVWF TXSTA ; 从动模式(外部时钟)-8位传输数据-允许发送-异步 0-低速波特率-移位寄存器满标志-无奇偶校验
BSF PIE1,TXIE ; 外围中断PIE1的TXIE发送中断置1,打开
BSF PIE1,RCIE ; 外围中断PIE1的RCIE接收中断置1,使能
BCF STATUS,RP0 ; 清除STATUE的PRO位
MOVLW 0x90 ; 设定接收状态控制器的状态 1001 0000B
MOVWF RCSTA ; 串口使能-8位数据接收-禁止接收单字符-连续接收 0-无帧错误-无溢出错误-无奇偶校验
最常见的原因是:
1. 对PIC16C187A单片机使用高速模式(BRGH置1), 而这些单片机在异步高速模式时,其采样电路的工作方式与其它型号单片机不同。
2. 没有正确计算出要装入 SPBRG 寄存器的值。
3. 发送和接收的波特率误差总和太大。