打印

各位大哥大姐帮忙啊

[复制链接]
2060|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xipengfei2002|  楼主 | 2009-9-17 23:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近搞个串口通信的项目,可是读串口接收状态内容是否有新数据时始终为真,可是并没有新数据的接受,数据手册上说通过读接收寄存器可以清楚该标志,可是反复读也未能将该标志清除啊,请问高手们这是为什么啊,请帮忙
沙发
xipengfei2002|  楼主 | 2009-9-17 23:36 | 只看该作者
补充下:以上说的问题即该语句始终成立
if(UART_1_bReadRxStatus() & UART_1_RX_REG_FULL !=0)                //check if rx data

使用特权

评论回复
板凳
xipengfei2002|  楼主 | 2009-9-18 00:15 | 只看该作者
高手们指点啊

使用特权

评论回复
地板
xipengfei2002|  楼主 | 2009-9-18 09:33 | 只看该作者
知道的或者遇到此问题的说下啊,新手求教中

使用特权

评论回复
5
xipengfei2002|  楼主 | 2009-9-18 11:10 | 只看该作者
为什么没人回帖呢,难道大家都没用过?

使用特权

评论回复
6
Apnote| | 2009-9-18 18:23 | 只看该作者
楼主,应该是 if (UART_1_bReadRxStatus() && UART_1_RX_REG_FULL !=0)  吧!

使用特权

评论回复
7
lobby| | 2009-9-18 21:50 | 只看该作者
楼主大意了
&在判断完前者正确后不会再判断后边的条件

使用特权

评论回复
8
xipengfei2002|  楼主 | 2009-9-18 23:14 | 只看该作者
是啊,一旦读了该状态寄存器后会使错误的标志清零的,而要使有未读的数据标志清零资料说却要通过读接收寄存器才可以的,但是这种方式却读了接收寄存器取不能实现清零,所以怪怪的,我想关于uart模块的该处会不会是个BUG,说这话很疯狂啊,但是有条件大家可以试验下,希望大家发表观点啊

使用特权

评论回复
9
xipengfei2002|  楼主 | 2009-9-18 23:14 | 只看该作者
6# Apnote

使用特权

评论回复
10
xipengfei2002|  楼主 | 2009-9-18 23:19 | 只看该作者
楼主,应该是 if (UART_1_bReadRxStatus() && UART_1_RX_REG_FULL !=0)  吧!

如果是这样的话,将永远得不到有数据可以读的判断,也就是你永远判断不到有数据接收成功了,

我是发现:UART_1_bReadRxStatus() && UART_1_RX_REG_FULL  语句永远为真,也就是标志显示一直有新数据接收,我觉得是个bug,可是不接触的人都说我狂妄了,呵呵,难道是我错了,很有意思的东东,大家试验下啊

使用特权

评论回复
11
xipengfei2002|  楼主 | 2009-9-19 01:09 | 只看该作者
6楼兄弟,如果是 if (UART_1_bReadRxStatus() && UART_1_RX_REG_FULL !=0)  ,则由于有未读的数据位一直为数据真,则程序永远不会进入下面的程序,也就是说无乱如何,感觉单片机的该标志不会清零,尽管手册上说通过读寄存器可以清除。

使用特权

评论回复
12
xipengfei2002|  楼主 | 2009-9-19 01:17 | 只看该作者
6楼:如果是if (UART_1_bReadRxStatus() && UART_1_RX_REG_FULL !=0)
则单片机则变成判断的是否没有可读的数据了

由于现在发现无论怎么处理,有未读数据标志位始终不能清零,(尽管手册上说通过读缓冲寄存器可以清除该位),所以出现不能判断何时有新数据接收到了,也就是在没有新数据接收时可总是显示有新数据接收成功,会造成错误

有条件的高手们试试,尽管是个简单的通信,可是总想狂妄的说该单片机此处好像是有bug的,忘高手不吝赐教

使用特权

评论回复
13
liliang9554| | 2009-9-19 09:51 | 只看该作者
UART_1_RX_REG_FULL !=0执行了吗?

使用特权

评论回复
14
xipengfei2002|  楼主 | 2009-9-19 21:36 | 只看该作者
&UART_1_RX_REG_FULL !=0永远执行,&UART_1_RX_REG_FULL ==0,永远不执行,所以感觉是个bug,很疯狂的说法,可又有什么办法呢,建议大家以后用该模块小心了

使用特权

评论回复
15
xipengfei2002|  楼主 | 2009-9-19 21:38 | 只看该作者
不知道大家试验过了没,这个问题应该很严重的,数据手册介绍的可以通过读寄存器来清标志的功能根本不成立,所以很失望啊

使用特权

评论回复
16
xipengfei2002|  楼主 | 2009-9-19 21:40 | 只看该作者
6楼: if (UART_1_bReadRxStatus() && UART_1_RX_REG_FULL !=0)  吧!
UART_1_RX_REG_FULL是个常数,与UART_1_bReadRxStatus()的返回值进行比较确定是否有新数据接受到了

使用特权

评论回复
17
xipengfei2002|  楼主 | 2009-9-19 21:46 | 只看该作者
回复7楼: 你说的没错,读标志会使错误标志清零,但是我只判断是否有新数据是否接受,不进行判错,所以不影响的,没想到会出这样的问题

使用特权

评论回复
18
xipengfei2002|  楼主 | 2009-9-20 04:00 | 只看该作者
请cypress回答下原因么

使用特权

评论回复
19
Cypress-lh| | 2009-9-20 12:23 | 只看该作者
建议楼主检查一下程序的逻辑,应该是逻辑上有些小问题

使用特权

评论回复
20
Cypress2009| | 2009-9-20 12:29 | 只看该作者
学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

25

帖子

1

粉丝