搜索
bottom↓
回复: 3

10ms,100ms,1秒周期脉冲已经实现了,这种情况下如何实现扫描周期的计算,请高手帮忙

[复制链接]

出0入0汤圆

发表于 2009-8-2 09:46:26 | 显示全部楼层 |阅读模式
MCU为Mega64,外部时钟为14.7456M,T0用来实现一个1.25ms的中断.

//变量
bit blnClk1s,blnClk100ms,blnClk10ms;//1秒,100ms,10ms位
unsigned char ucMsCounter,uc10MsCounter,uc100MsCounter;//ms,10ms,100ms计数器

//T0,1.25ms中断
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
if(ucMsCounter < 7)
        ucMsCounter++;//ms计数
else
        {
        ucMsCounter = 0;
        if(uc10MsCounter < 9)
                uc10MsCounter++;//10ms计数
        else
                {
                uc10MsCounter = 0;
                if(uc100MsCounter < 9)
                        uc100MsCounter++;//100ms计数
                else
                        uc100MsCounter = 0;
                }
        }   

blnClk1s = uc100MsCounter > 4;
blnClk100ms = uc10MsCounter > 4;
blnClk10ms  = ucMsCounter > 3;
}

原打算在程序执行前,记录ucMsCounter,uc10MsCounter,uc100MsCounter,在程序结束时再用新的ucMsCounter,uc10MsCounter,uc100MsCounter来计算程序执行的时间.但是又怕新的中断发生在记录和计算过程中,造成结果不正确.请高手帮忙.

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-8-2 11:17:52 | 显示全部楼层
在TIMER更新程序里连续读循环,当两次读相等退出读循环,当两次读不相等,说明发生了中断。

1.25mS中断太频繁了,MCU还能干什么?

出0入21汤圆

发表于 2009-8-2 11:41:02 | 显示全部楼层
不要在中断里面放延时和耗时的计算,我50uS中断一次都可以,ATmega88,8M晶振,还处理了很多扫描任务。我用这个50uS做无线接收信号扫描。

出0入0汤圆

 楼主| 发表于 2009-8-2 13:46:37 | 显示全部楼层
1.25ms对MCU来说,还是很长的了,这个中断程序还包括了对数字输入的去抖计数,整个执行将耗时约20us,可能会影响到通讯,可能要考虑到中断嵌套或降低通讯波特率.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 13:49

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

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