chiaming 发表于 2011-2-25 18:22:23

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

请问马老师:

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

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

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

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

烦请指导,谢谢。

chiaming 发表于 2011-3-3 20:50:04

懂的不是很多,请问有人能提供一点指导吗?

谢谢。

ba_wang_mao 发表于 2011-3-4 16:50:44

理解错误:

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

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

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

chiaming 发表于 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(); 呢?

谢谢。

ba_wang_mao 发表于 2011-3-7 08:57:58

请问马老师:

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

烦请指导,谢谢。

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

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

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

      不会。

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

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

machao 发表于 2011-3-8 11:10:05

学好基础是关键!
ADC是硬件转换的,与中断无关。最多是读转换结果晚了那么一点点。

chiaming 发表于 2011-3-8 23:14:08

回复【5楼】machao
-----------------------------------------------------------------------

那请问马老师:

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

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

谢谢。

ba_wang_mao 发表于 2011-3-9 13:07:43

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

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


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

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

    你为什么非要在ADC转换时,强行“禁止接收中断”或”禁止接收”呢?
页: [1]
查看完整版本: 马老师:USART反复地始能和禁止接收功能(RXEN),和反复地始能和禁止接收中断(RXCIE),哪个