按键处理的过程放在定时器内部还是main()里面的主循环好呢

2020-02-05 09:09发布

本帖最后由 68336016 于 2012-6-7 10:17 编辑

我这是一个周期为0.5ms的定时器循环,串口57600波特率,
功能很简单,读到开关为ON,串口发送20个字节信息,读到开关为OFF,串口也发送20个字节信息
以前用STM32,速度快,而且串口用DMA发送不占用CPU。


现在换成C8051,22MHz频率,这样的话,每次都得等待串口发送完,就比较费时间了。
我要求是每次定时器中断来临,上一次数据肯定都已经发送完毕了的。
就算把里面的开关处理代码放到main的主循环里面,本质应该没区别吧?

除了看汇编外,有什么比较好的办法计算下这个中断函数一共需要多少个时钟周期呢?
  1. //------------------------------------------------------------------------------------
  2. // Timer2_ISR  周期0.5ms
  3. //------------------------------------------------------------------------------------
  4. void Timer2_ISR (void) interrupt 5
  5. {
  6.     if (开关==ON)
  7.    {
  8.         给20字节数组赋值;
  9.         发送20个字节信息;
  10.    }
  11.     if (开关==OFF)
  12.    {
  13.         给20字节数组赋值;
  14.         发送20个字节信息;
  15.    }
  16. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
NJ8888
1楼-- · 2020-02-05 09:45
 精彩回答 2  元偷偷看……
68336016
2楼-- · 2020-02-05 13:26
本帖最后由 68336016 于 2012-6-7 10:42 编辑
NJ8888 发表于 2012-6-7 10:30
外面好,按键是低速设备,没必要占用定时中断处理时间


我这里的开关是高速的,机械旋转产生的通断,上百Hz,所以定时器采用0.5ms这么短的周期,内部消抖读5次导通才认为导通

现在情况就是,不论代码放在中断函数,还是主循环,都是跟着定时器的节奏,0.5ms就得执行一次,放在哪里似乎没什么区别了
68336016
3楼-- · 2020-02-05 13:36
应该自己搞错了,忘记考虑消抖次数的影响了,定时器要5次才确认开关电平,开关处理代码还是应该放在主函数里面,这样得到的时间比较长

一周热门 更多>