搜索
bottom↓
回复: 3

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

[复制链接]

出130入129汤圆

发表于 2012-6-7 10:16:19 | 显示全部楼层 |阅读模式
本帖最后由 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. }
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-6-7 10:30:00 | 显示全部楼层
外面好,按键是低速设备,没必要占用定时中断处理时间

出130入129汤圆

 楼主| 发表于 2012-6-7 10:39:22 | 显示全部楼层
本帖最后由 68336016 于 2012-6-7 10:42 编辑
NJ8888 发表于 2012-6-7 10:30
外面好,按键是低速设备,没必要占用定时中断处理时间


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

现在情况就是,不论代码放在中断函数,还是主循环,都是跟着定时器的节奏,0.5ms就得执行一次,放在哪里似乎没什么区别了

出130入129汤圆

 楼主| 发表于 2012-6-7 11:07:22 | 显示全部楼层
应该自己搞错了,忘记考虑消抖次数的影响了,定时器要5次才确认开关电平,开关处理代码还是应该放在主函数里面,这样得到的时间比较长
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-30 20:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表