马老师: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); 接收功能,会不会需要因为初始化的时间来做延迟的动作?
请问哪个方法哪个在程序中执行比较理想?
烦请指导,谢谢。 懂的不是很多,请问有人能提供一点指导吗?
谢谢。 理解错误:
1. UCSRB |= (1 << RXEN)
表示允许接收
2. UCSRB |= (1 << RXCIE);
表示允许中断接收。
即:接收可以在主程序中,通过查询方式接收数据,也可以通过编写串口中断服务程序主动接收
因此,你反复禁止接收和反复禁止中断接收干什么呢?
一个良好的程序是:只要在初始化设置 RXEN和 RXCIE 完毕后,就不要再修改它们了。 回复【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(); 呢?
谢谢。 请问马老师:
在ADC开始单次转换的期间内,USART有数据进入而产生接收中断,这样是否会影响ADC的过程,使得精度降低或是转换不完全呢?
还是说,在ADC的过程中,必须关闭其他中断,不让程序进入其他的中断服务程序?
烦请指导,谢谢。
----------------------------------------------------------------------------------------------------
提这个问题,说明你是个初学者。
1、在ADC开始单次转换的期间内,USART有数据进入而产生接收中断,这样是否会影响ADC的过程,使得精度降低或是转换不完全呢?
不会。
2、还是说,在ADC的过程中,必须关闭其他中断,不让程序进入其他的中断服务程序?
不必关闭其他中断。
但是必须记住一条原则:中断服务程序中的代码必须短小精悍。 学好基础是关键!
ADC是硬件转换的,与中断无关。最多是读转换结果晚了那么一点点。 回复【5楼】machao
-----------------------------------------------------------------------
那请问马老师:
如果希望在ADC过程,甚至是到读取完数据,都不要去处理USART的接收,
是否可以设置寄存器”禁止接收中断”或”禁止接收”呢? 又或者该怎么设置呢?
谢谢。 回复【6楼】chiaming
回复【5楼】machao
-----------------------------------------------------------------------
那请问马老师:
如果希望在adc过程,甚至是到读取完数据,都不要去处理usart的接收,
是否可以设置寄存器”禁止接收中断”或”禁止接收”呢? 又或者该怎么设置呢?
谢谢。
-----------------------------------------------------------------------
怎么还在问这个问题,马老师不是说过吗,ADC是硬件转换的,与中断无关(因此转换期间,不必关闭串口中断)。
当转换期间被串口打断,最多是读转换结果晚了那么一点点。
而且在实际的项目中,都是这样处理的。
你为什么非要在ADC转换时,强行“禁止接收中断”或”禁止接收”呢?
页:
[1]