搜索
bottom↓
回复: 7

马老师:USART反复地始能和禁止接收功能(RXEN),和反复地始能和禁止接收中断(RXCIE),哪个

[复制链接]

出0入0汤圆

发表于 2011-2-25 18:22:23 | 显示全部楼层 |阅读模式
请问马老师:

当 UCSRB |= (1 << RXEN); 接收功能始能后,接收到数据进入接收中断服务程序,而接收中断服务程序结束后,
若希望主程序接下来的作动不会受到USART的影响,是否要直接禁止(关闭)接收功能UCSRB &= ~(1 << RXEN); 呢?

还是当 UCSRB |= (1 << RXEN); 接收功能始能后,
如果希望主程序不受影响,是否只要利用 UCSRB |= (1 << RXCIE); 或 UCSRB &= ~(1 << RXCIE); 来打开或关闭接收中断功能就好了?

因为不知道对USART反复地做 (始能) UCSRB |= (1 << RXEN); 和 (禁止) UCSRB |= (1 << RXEN); 接收功能,会不会需要因为初始化的时间来做延迟的动作?

请问哪个方法哪个在程序中执行比较理想?

烦请指导,谢谢。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2011-3-3 20:50:04 | 显示全部楼层
懂的不是很多,请问有人能提供一点指导吗?

谢谢。

出0入0汤圆

发表于 2011-3-4 16:50:44 | 显示全部楼层
理解错误:

       1. UCSRB |= (1 << RXEN)
          表示允许接收
       2. UCSRB |= (1 << RXCIE);
          表示允许中断接收。
          即:接收可以在主程序中,通过查询方式接收数据,也可以通过编写串口中断服务程序主动接收

    因此,你反复禁止接收和反复禁止中断接收干什么呢?

   
    一个良好的程序是:只要在初始化设置   RXEN  和 RXCIE 完毕后,就不要再修改它们了。

出0入0汤圆

 楼主| 发表于 2011-3-4 20:13:01 | 显示全部楼层
回复【2楼】ba_wang_mao  
-----------------------------------------------------------------------

那请问在初始化设置RXEN和RXCIE完毕后,

在AD转换期间,若有数据发送过来,为了希望不会因为中断接收而影响AD转换的过程,该如何操作呢?

例如此问题: http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4576438&bbs_page_no=1&bbs_id=1003

如果不需要反复禁止接收 或(or) 反复禁止中断接收,是否该利用 cli(); 和 sei(); 呢?

谢谢。

出0入0汤圆

发表于 2011-3-7 08:57:58 | 显示全部楼层
请问马老师:

在ADC开始单次转换的期间内,USART有数据进入而产生接收中断,这样是否会影响ADC的过程,使得精度降低或是转换不完全呢?
还是说,在ADC的过程中,必须关闭其他中断,不让程序进入其他的中断服务程序?

烦请指导,谢谢。

----------------------------------------------------------------------------------------------------

    提这个问题,说明你是个初学者。

    1、在ADC开始单次转换的期间内,USART有数据进入而产生接收中断,这样是否会影响ADC的过程,使得精度降低或是转换不完全呢?

      不会。

    2、还是说,在ADC的过程中,必须关闭其他中断,不让程序进入其他的中断服务程序?
        不必关闭其他中断。

    但是必须记住一条原则:中断服务程序中的代码必须短小精悍。

出0入0汤圆

发表于 2011-3-8 11:10:05 | 显示全部楼层
学好基础是关键!
ADC是硬件转换的,与中断无关。最多是读转换结果晚了那么一点点。

出0入0汤圆

 楼主| 发表于 2011-3-8 23:14:08 | 显示全部楼层
回复【5楼】machao  
-----------------------------------------------------------------------

那请问马老师:

如果希望在ADC过程,甚至是到读取完数据,都不要去处理USART的接收,

是否可以设置寄存器”禁止接收中断”或”禁止接收”呢? 又或者该怎么设置呢?

谢谢。

出0入0汤圆

发表于 2011-3-9 13:07:43 | 显示全部楼层
回复【6楼】chiaming
回复【5楼】machao   
-----------------------------------------------------------------------
那请问马老师:
如果希望在adc过程,甚至是到读取完数据,都不要去处理usart的接收,
是否可以设置寄存器”禁止接收中断”或”禁止接收”呢? 又或者该怎么设置呢?
谢谢。

-----------------------------------------------------------------------


    怎么还在问这个问题,马老师不是说过吗,ADC是硬件转换的,与中断无关(因此转换期间,不必关闭串口中断)。
当转换期间被串口打断,最多是读转换结果晚了那么一点点。

    而且在实际的项目中,都是这样处理的。

    你为什么非要在ADC转换时,强行“禁止接收中断”或”禁止接收”呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 18:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表