登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

请教调试串口时遇到的情况

作者:embtoney 栏目:单片机
请教调试串口时遇到的情况
在调试PIC18F6490的串口时,发现总是会产生接收溢出的错误:RCSTA1.OERR = 1。我使用的是10M的晶振,9600波特率,1位开始位,1位结束位。那位高手可以告诉我为什么会产生这样的错误?应该如何处理?

2楼: >>参与讨论
martin
数据手册上有关于OERR的注释
 

* - 本贴最后修改时间:2006-6-13 16:37:35 修改者:martin

3楼: >>参与讨论
embtoney
数据手册上有关于OERR的注释
你能告诉我为什么会产生溢出吗?我觉得这个波特率不应该会的。

4楼: >>参与讨论
martin
为什么?
没有及时读接收缓冲器。
18.4.2 USART 异步接收器
图18-4 是接收器的原理框图。在RX/DT 引脚上接收数据,并驱动数据恢复模块。数据恢复模块实际上是一个以16 倍波特率工作的高速移位寄存器,而主接收串行移位寄存器以位速率或FOSC 频率工作。选择异步模式后,将CREN 位(RCSTA<4>) 置1 使能异步接收。接收器的核心部件是接收(串行)移位寄存器(RSR)。在 RX/TX 引脚上采样到停止位之后,RSR 中接收到的数据被送RCREG 寄存器(如果RCREG 寄存器为空)。数据传送完后,RCIF标志位被置1。RCIE 位置1(或清零)可允许(或屏蔽)接收中断。RCIF 标志位是只读位,由硬件清零,它在RCREG 寄存器被读之后或RCREG 寄存器为空时被硬件清零。RCREG 寄存器是一个双缓冲寄存器(即两级深度的FIFO) ,因此可以实现接收两个字节的数据并传送到RCREG FIFO,然后第三个字节开始移位到RSR 寄存器。在检测到第三个字节的停止位后,如果RCREG FIFO 仍然是满的,则溢出错误标志位 OERR (RCSTA<1>) 会被置1, RSR 寄存器中的数据被丢失。可以对RCREG 寄存器读两次重新获得FIFO 中的两个字节。OERR 位必须由软件清零,这可以通过复位接收逻辑(将CREN 位清零后再置1)实现。如果OERR 位被置1,则禁止将RSR 中的数据传送到RCREG 寄存器,因此如果OERR 位被置1,必须将它清零。如果停止位检测为零电平,帧出错标志位 FERR(RCSTA<2>) 将被置1FERR 位和接收到的第9位数据以和接收数据同样的方式被缓冲。读RCREG 寄存器将会给RX9D 和FERR 位装入新值,因此为了不丢失FERR 和RX9D 位原来的信息,用户必须在读 RCREG 寄存器之前读RCSTA 寄存器 。

参与讨论
昵称:
讨论内容:
 
 
相关帖子
为什么16F916不能用BANK3。
16F630  问题
初学,请大家指点
关于24fj64a006的功耗
在做软件仿真的时候出错了?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号