一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3312|回复: 12

[其他综合] 这个定时器哪里的问题

[复制链接]
发表于 2013-5-16 23:47 | 显示全部楼层 |阅读模式
实际快了N倍,STC89C52,24.576M晶振,6T模式

void init()
{
//        disrow=0;
TMOD=1;TL0=0x00;TH0=0XF8;     //定时器0模式1,1毫秒,89C52,24.576M晶振,6T模式
ET0=1;TR0=1;EA=1;           //开定时器0中断、启动定时器0、开总中断
}
void timer0() interrupt 1        //定时器0(中断1)
{
uchar tim1,tim2;           //定义临时变量

TL0=0x00;TH0=0XF8;        //1ms定时
lcont++;
if (lcont>=20)                 //STC89c52,6T模式,10ms
{
        lcont=0;
         tim1++;                //每中断一次tim1加1
                if(tim1>=50)             //中断10(0.5秒)
                {                  
                         SHAN=!SHAN;             //闪烁标志取反
                          tim1=0;tim2++;           //tim1清零,tim2加1
                                 if(tim2>=10)             //到了5秒
                                 {
                                           tim2=0; con++;        //tim2清零,,显示计数加1.
                                        if(con==3) {dip_flag=~dip_flag; con=0;}
  }
  }
}


发表于 2013-5-17 00:39 | 显示全部楼层
我怎么觉得是临时变量的问题?改为全局试试?
uchar tim1,tim2;           //定义临时变量
回复

使用道具 举报

 楼主| 发表于 2013-5-17 07:43 | 显示全部楼层
再请教个问题,将一段程序写成一个函数,将这个函数插入一个程序,没有调用语句,那么这个函数会不会被执行?
回复

使用道具 举报

 楼主| 发表于 2013-5-17 07:45 | 显示全部楼层

RE: 这个定时器哪里的问题

efan 发表于 2013-5-17 00:39 static/image/common/back.gif
我怎么觉得是临时变量的问题?改为全局试试?
uchar tim1,tim2;           //定义临时变量

变量还是起作用的,只是快了。
回复

使用道具 举报

发表于 2013-5-17 08:42 | 显示全部楼层
benli 发表于 2013-5-17 07:43 static/image/common/back.gif
再请教个问题,将一段程序写成一个函数,将这个函数插入一个程序,没有调用语句,那么这个函数会不会被执行 ...

将这个函数插入一个程序
什么意思
回复

使用道具 举报

 楼主| 发表于 2013-5-17 09:00 | 显示全部楼层

RE: 这个定时器哪里的问题

chjj0 发表于 2013-5-17 08:42 static/image/common/back.gif
将这个函数插入一个程序
什么意思

就是给一个程序增加一部分内容
回复

使用道具 举报

发表于 2013-5-17 09:15 | 显示全部楼层
在keil里单步跟踪把中断函数跟一遍看看有没有没有预计到的逻辑条件变量(比如那几个读数器)发生变化?
回复

使用道具 举报

发表于 2013-5-17 09:18 | 显示全部楼层
benli 发表于 2013-5-17 07:43 static/image/common/back.gif
再请教个问题,将一段程序写成一个函数,将这个函数插入一个程序,没有调用语句,那么这个函数会不会被执行 ...

理论上,没有显式调用,而且你的程序没有逻辑错误,应该不会被执行到。但实际上,象程序跑飞了、手工操作堆栈而影响到了函数调用时保存的返回地址等,都有可能使程序跳到不该到的地方执行,如果你有怀疑,可以在怀疑的程序段里做一个标记,执行完前显示这个标记的状态,如果标记变化了,说明就是执行到了。
回复

使用道具 举报

发表于 2013-5-17 10:12 | 显示全部楼层
“uchar tim1,tim2;           //定义临时变量”
好歹前面也要加上static 修饰符吧,否则临时变量真成了局部变量了。
哪有又想把数累加上去又舍不得分配资源的道理
回复

使用道具 举报

 楼主| 发表于 2013-5-17 12:01 | 显示全部楼层

RE: 这个定时器哪里的问题

fat 发表于 2013-5-17 09:18 static/image/common/back.gif
理论上,没有显式调用,而且你的程序没有逻辑错误,应该不会被执行到。但实际上,象程序跑飞了、手工操作 ...

这函数是独立的功能,要执行这函数如何处理为好,在main函数里写一调用语句?
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-2 01:02 , Processed in 0.039270 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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