本帖最后由 68336016 于 2012-6-7 10:17 编辑
我这是一个周期为0.5ms的定时器循环,串口57600波特率,
功能很简单,读到开关为ON,串口发送20个字节信息,读到开关为OFF,串口也发送20个字节信息
以前用STM32,速度快,而且串口用DMA发送不占用CPU。
现在换成C8051,22MHz频率,这样的话,每次都得等待串口发送完,就比较费时间了。
我要求是每次定时器中断来临,上一次数据肯定都已经发送完毕了的。
就算把里面的开关处理代码放到main的主循环里面,本质应该没区别吧?
除了看汇编外,有什么比较好的办法计算下这个中断函数一共需要多少个时钟周期呢?- //------------------------------------------------------------------------------------
- // Timer2_ISR 周期0.5ms
- //------------------------------------------------------------------------------------
- void Timer2_ISR (void) interrupt 5
- {
- if (开关==ON)
- {
- 给20字节数组赋值;
- 发送20个字节信息;
- }
- if (开关==OFF)
- {
- 给20字节数组赋值;
- 发送20个字节信息;
- }
- }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我这里的开关是高速的,机械旋转产生的通断,上百Hz,所以定时器采用0.5ms这么短的周期,内部消抖读5次导通才认为导通
现在情况就是,不论代码放在中断函数,还是主循环,都是跟着定时器的节奏,0.5ms就得执行一次,放在哪里似乎没什么区别了
一周热门 更多>