| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1168 人关注过本帖
标题:由于单片机资源有限,中断要求处理时间尽可能的短,求最高效率代码
只看楼主 加入收藏
qmycy
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-11-3
收藏
 问题点数:0 回复次数:2 
由于单片机资源有限,中断要求处理时间尽可能的短,求最高效率代码
实现功能:
一、延时继电器:
当T0_EN为1的时候,T0_ACC累加,累加至设定值T0_SET停止累加,此时T0_out输出为1;
当T0_EN为0时,TACC=0,T0_OUT=0;
二、计数器:
当C0_EN为上升沿时(由0变为1时),C0_ACC累加,累加至设定值C0_SET停止累加,此时C0_OUT输出为1;
当C0_RST为1时,C0_ACC=0,C0_OUT为0

下面的程序只实现一个延时定时器,和计数器
实际还要各实现128个,所以请高手优化一下。


这是一个中断处理函数,每10ms中断一次
经过本人试验用if else语句,采用条件表达式有代码效率的微弱优势。
本人的水平已无力优化,请高手给个思路
//Timer 0 bit value
bit T0_EN = 0; \\等于1时,计时
bit T0_OUT = 0;\\定时器输出

//Counter 0 bit value
bit C0_EN =0;
bit C0_EN_OLD =0;\\两个变量,判定上升沿
bit C0_OUT=0;\\计数器输出
bit C0_RST =0;\\计数器复位,有的PLC,直接复位ACC

//timer 0 ACC value
unsigned char T0_ACC = 0;\\定时器累加器
unsigned char T0_SET =10;\\设定值,准备在另外的IO函数中处理,这样设定值可引入变量

//counter 0 ACC value
unsigned char C0_ACC = 0;\\计数器累加器
unsigned char C0_SET = 10;\\设定值,准备在另外的IO函数中处理,这样设定值可引入变量

void timer_0_ISR() interrupt 1
{
        bit tmp=0;
        //timer service program         
        tmp = T0_ACC<T0_SET;\\由于T0_ACC和T0_OUT均需要判断T0_ACC<T0_SET,引入中间量节省一次运算
        T0_ACC = !T0_EN?0:tmp? T0_ACC+1:T0_ACC;
        T0_OUT = tmp ? 0:1;
                //timer service program end


        //counter service program start:
        tmp = C0_ACC<C0_SET;\\由于C0_ACC和C0_OUT均需要判断C0_ACC<C0_SET,引入中间量节省一次运算
        C0_ACC = !C0_RST&tmp&C0_EN & !C0_EN_OLD?C0_ACC+1:C0_RST?0:C0_ACC;
        C0_OUT = C0_RST|tmp?0:1;
        C0_EN_OLD = C0_EN;\\将本次值存入上个周期值变量
        //couter service program end
}
搜索更多相关主题的帖子: 单片机 资源 效率 代码 尽可能 
2008-11-03 21:27
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
中断程序里面尽量不要使用?:,会极大影响效率的。 比如TO_OUT就可以写成:
TO_OUT = !(tmp != 0);
你写成最清晰的结构,然后就好优化了。
2008-11-03 22:00
wanjiang
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2008-10-25
收藏
得分:0 
单片机的程序怎么出现在这里啦。应该发到单片机那个版面上嘛。现在单片机版面都是冷冷清清的。
2008-11-04 09:49
快速回复:由于单片机资源有限,中断要求处理时间尽可能的短,求最高效率代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.079208 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved