各位大哥大姐帮忙啊

[复制链接]
2973|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 | 显示全部楼层
知道的或者遇到此问题的说下啊,新手求教中
 楼主| xipengfei2002 发表于 2009-9-18 11:10 | 显示全部楼层
为什么没人回帖呢,难道大家都没用过?
Apnote 发表于 2009-9-18 18:23 | 显示全部楼层
楼主,应该是 if (UART_1_bReadRxStatus() && UART_1_RX_REG_FULL !=0)  吧!
lobby 发表于 2009-9-18 21:50 | 显示全部楼层
楼主大意了
&在判断完前者正确后不会再判断后边的条件
 楼主| xipengfei2002 发表于 2009-9-18 23:14 | 显示全部楼层
是啊,一旦读了该状态寄存器后会使错误的标志清零的,而要使有未读的数据标志清零资料说却要通过读接收寄存器才可以的,但是这种方式却读了接收寄存器取不能实现清零,所以怪怪的,我想关于uart模块的该处会不会是个BUG,说这话很疯狂啊,但是有条件大家可以试验下,希望大家发表观点啊
 楼主| xipengfei2002 发表于 2009-9-18 23:14 | 显示全部楼层
 楼主| 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,可是不接触的人都说我狂妄了,呵呵,难道是我错了,很有意思的东东,大家试验下啊
 楼主| xipengfei2002 发表于 2009-9-19 01:09 | 显示全部楼层
6楼兄弟,如果是 if (UART_1_bReadRxStatus() && UART_1_RX_REG_FULL !=0)  ,则由于有未读的数据位一直为数据真,则程序永远不会进入下面的程序,也就是说无乱如何,感觉单片机的该标志不会清零,尽管手册上说通过读寄存器可以清除。
 楼主| xipengfei2002 发表于 2009-9-19 01:17 | 显示全部楼层
6楼:如果是if (UART_1_bReadRxStatus() && UART_1_RX_REG_FULL !=0)
则单片机则变成判断的是否没有可读的数据了

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

有条件的高手们试试,尽管是个简单的通信,可是总想狂妄的说该单片机此处好像是有bug的,忘高手不吝赐教
liliang9554 发表于 2009-9-19 09:51 | 显示全部楼层
UART_1_RX_REG_FULL !=0执行了吗?
 楼主| xipengfei2002 发表于 2009-9-19 21:36 | 显示全部楼层
&UART_1_RX_REG_FULL !=0永远执行,&UART_1_RX_REG_FULL ==0,永远不执行,所以感觉是个bug,很疯狂的说法,可又有什么办法呢,建议大家以后用该模块小心了
 楼主| xipengfei2002 发表于 2009-9-19 21:38 | 显示全部楼层
不知道大家试验过了没,这个问题应该很严重的,数据手册介绍的可以通过读寄存器来清标志的功能根本不成立,所以很失望啊
 楼主| 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()的返回值进行比较确定是否有新数据接受到了
 楼主| xipengfei2002 发表于 2009-9-19 21:46 | 显示全部楼层
回复7楼: 你说的没错,读标志会使错误标志清零,但是我只判断是否有新数据是否接受,不进行判错,所以不影响的,没想到会出这样的问题
 楼主| xipengfei2002 发表于 2009-9-20 04:00 | 显示全部楼层
请cypress回答下原因么
Cypress-lh 发表于 2009-9-20 12:23 | 显示全部楼层
建议楼主检查一下程序的逻辑,应该是逻辑上有些小问题
Cypress2009 发表于 2009-9-20 12:29 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

25

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部