行业资讯
各种操作都不要在中断内做,这样就不会产生冲突。
中断函数如果有TR0\1=0, 那么中断停止,在读写24C芯片时,调用了这个在读取芯片函数前时,如果有这个情况,那么会影响读取的的电平变化,从而影响储存过程。
没有冲突啊。两个中断到来的时间是不一样的。虽然你让两个计时器计数时间相同。但由于你开计数器的时间不可能同一个时刻,只能是开一个,接着开一个,所以这两个计数器开始工作的时间是有差别的。
节省内存空间。因为51单片机的RAM很少,只有128(或者256)字节,要是定义的数据(而且是在使用时不做改变的)太多,RAM肯存不下。所以定义code,放在flash里面。要知道52单片机的flash有8K字节!远比256字节的RAM多。
1、不知道你所使用的是什么样的单片机。如果有中断优先级寄存器的话,那么将重要中断的优先级设置成高,这样低优先级的中断就不能干扰到这个中断的执行。
2、外部中断里不要做太多事情吧。简单置个标志位之类的,在主函数里轮询标志位去执行代码。在中断里做太多事情,是一大忌。
3、这个延时是等待发射的超声波返回来,触发外部中断,进入中断程序里面计算修改TH1和TL1,从而测得距离。
timer2中断处理时,你不能处理太多事,占用太长时间,尽量短,否则将出问题。 单独试验一下timer2,里面作最简单的处理,比如让某个灯翻转,便于观察是否正常,你的中断时间较短,需要用示波器观察才行。
首先你的Timer1是模式0(13位计数器),除非用很低频率的外部晶体,否则Timer1的定时时间根本就不是秒级。其次你没有贴出 timerun 标志被修改的位置。
不知道你所使用的是什么样的单片机。如果有中断优先级寄存器的话,那么将重要中断的优先级设置成高,这样低优先级的中断就不能干扰到这个中断的执行。
外部中断里不要做太多事情吧。简单置个标志位之类的,在主函数里轮询标志位去执行代码。在中断里做太多事情,是一大忌。
首先定时和串口不要用同一个定时器,其次二者要设置不同的优先级。
没有冲突啊。两个中断到来的时间是不一样的。虽然你让两个计时器计数时间相同。但由于你开计数器的时间不可能同一个时刻,只能是开一个,接着开一个,所以这两个计数器开始工作的时间是有差别的。
1、串口需要定时器1或定时器2作为波特率发生器哦,这个定时器要工作在方式2,不能中断。按照你说的,应该没有这个问题,串口不会影响T0的。
2、T0中断太频繁了,因为同级中断,T0优先,所以总抢占中断,串口被边缘话了。
3、外部中断里不要做太多事情吧。简单置个标志位之类的,在主函数里轮询标志位去执行代码。在中断里做太多事情,是一大忌。
4、应该一个定时器,一个计算器,一个外部中断。定时器中断设高。不要用外部中断计数,有可能会漏掉脉冲。开一个计数器就行,外部中断来了就开定时器和计数器。定时器到2S直接关计数器,并将计数值用串口发送。
5、如果是这个原因,可以尝试在中断函数里只简单的赋值一些标志位。
6、不会发生什么情况,第二次中断到来时,程序仍然在执行第一次中断的服务程序。另外根据中断标志的清除位置和方式,以及具体的中断执行时间,有可能会漏执行一次中断 例程 。
关键词:mcu中断
一点销电子网
Yidianxiao Electronic Website Platform