PIC 中断代码 求助

[复制链接]
4571|18
 楼主| tianyalingyin 发表于 2011-4-23 14:02 | 显示全部楼层 |阅读模式
本帖最后由 tianyalingyin 于 2011-4-23 14:05 编辑

使用的芯片是PIC12F635,内部晶振4MHZ,分频1:256,目的是在计数器达到一定次数后执行flashled()函数,代码如下:


void interrupt isr(void)
{   
  unsigned char cnt=0;
  int times=0;

  if(T0IE&&T0IF)
  {   T0IF=0;  
   ++cnt;   
   if(cnt==0xff)
     {
       cnt=0;
       times=times+1;
     }
     
       if(times==25)
         {
         times=0;
         flashled();
        }
  }  
}

但是却无法看到flashled()函数的执行。
请问问题出在哪里?
zgs523801275 发表于 2011-4-23 14:20 | 显示全部楼层
执行flashled()函数前要把中断关闭,之后再开启中断
yewuyi 发表于 2011-4-23 16:35 | 显示全部楼层
中断只做中断标志判断,其它的计数和函数操作放到主程序中执行。
JayGong 发表于 2011-4-23 22:59 | 显示全部楼层
你先软件模拟一下,能不能进中断,也许是初始化的问题。
 楼主| tianyalingyin 发表于 2011-4-25 07:47 | 显示全部楼层
void interrupt isr(void)
{   
    if(T0IE&&T0IF)
           flashled();
}
这种情况下可以执行了flashled();这与上述情况有什么不同么?
为何最初的程序不能执行flashled()?
JayGong 发表于 2011-4-25 12:50 | 显示全部楼层
可能你的定时中断只中断了一次!我刚才软件模拟了一下,如果定时中断不断重复发生的话,会执行flashled()的!
JayGong 发表于 2011-4-25 12:57 | 显示全部楼层
本帖最后由 JayGong 于 2011-4-25 13:06 编辑

问题出在这里


改成:

static unsigned char cnt=0;
static int times=0;


原因:要使用静态全局变量,否者每次中断发生就都初始化为0。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
XIEYUANBIN 发表于 2011-4-25 14:10 | 显示全部楼层
本帖最后由 XIEYUANBIN 于 2011-4-25 14:16 编辑

你定义了两个局部变量CNT,TIMES,这个局部变量编译器会在这个程序执行完之后把它分配给其他程序使用.所以你可能永远也进不了FLASHLED() 楼上的方法是将这两个声明为静态的"局部"变量,这样声明了之后编译器变不再将其挪作他用
 楼主| tianyalingyin 发表于 2011-4-25 16:16 | 显示全部楼层
谢谢回复,我尝试看看,然后告诉大家结果。
再次谢谢! 7# JayGong
JayGong 发表于 2011-4-25 16:19 | 显示全部楼层
这样改后肯定是可以的!
 楼主| tianyalingyin 发表于 2011-4-25 16:22 | 显示全部楼层
还是不行啊,看不到flashled()函数的执行
JayGong 发表于 2011-4-25 16:26 | 显示全部楼层
我试了行,你试了不行?
JayGong 发表于 2011-4-25 16:27 | 显示全部楼层
中断里设置个断点,每次在断点处停下来后看cnt和times的值!
allround 发表于 2011-4-25 20:53 | 显示全部楼层
想法和7楼完全一样
 楼主| tianyalingyin 发表于 2011-4-26 07:44 | 显示全部楼层
7楼 正解,我函数的问题,谢谢各位的帮助
qzhui121 发表于 2011-5-5 14:49 | 显示全部楼层
有点难度啊
chongren 发表于 2011-5-5 19:17 | 显示全部楼层
赞分析
fangfei036 发表于 2012-3-27 15:32 | 显示全部楼层
顶一个啊,很容易忽略的问题,分析的很漂亮
figo20042005 发表于 2012-3-27 20:07 | 显示全部楼层
还有你的定时器只初始化时赋初值了,中断结束前也要赋初值的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

52

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部