打印

PIC 中断代码 求助

[复制链接]
2736|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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 | 只看该作者
你先软件模拟一下,能不能进中断,也许是初始化的问题。

使用特权

评论回复
5
tianyalingyin|  楼主 | 2011-4-25 07:47 | 只看该作者
void interrupt isr(void)
{   
    if(T0IE&&T0IF)
           flashled();
}
这种情况下可以执行了flashled();这与上述情况有什么不同么?
为何最初的程序不能执行flashled()?

使用特权

评论回复
6
JayGong| | 2011-4-25 12:50 | 只看该作者
可能你的定时中断只中断了一次!我刚才软件模拟了一下,如果定时中断不断重复发生的话,会执行flashled()的!

使用特权

评论回复
7
JayGong| | 2011-4-25 12:57 | 只看该作者
本帖最后由 JayGong 于 2011-4-25 13:06 编辑

问题出在这里


改成:

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


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

使用特权

评论回复
8
XIEYUANBIN| | 2011-4-25 14:10 | 只看该作者
本帖最后由 XIEYUANBIN 于 2011-4-25 14:16 编辑

你定义了两个局部变量CNT,TIMES,这个局部变量编译器会在这个程序执行完之后把它分配给其他程序使用.所以你可能永远也进不了FLASHLED() 楼上的方法是将这两个声明为静态的"局部"变量,这样声明了之后编译器变不再将其挪作他用

使用特权

评论回复
9
tianyalingyin|  楼主 | 2011-4-25 16:16 | 只看该作者
谢谢回复,我尝试看看,然后告诉大家结果。
再次谢谢! 7# JayGong

使用特权

评论回复
10
JayGong| | 2011-4-25 16:19 | 只看该作者
这样改后肯定是可以的!

使用特权

评论回复
11
tianyalingyin|  楼主 | 2011-4-25 16:22 | 只看该作者
还是不行啊,看不到flashled()函数的执行

使用特权

评论回复
12
JayGong| | 2011-4-25 16:26 | 只看该作者
我试了行,你试了不行?

使用特权

评论回复
13
JayGong| | 2011-4-25 16:27 | 只看该作者
中断里设置个断点,每次在断点处停下来后看cnt和times的值!

使用特权

评论回复
14
allround| | 2011-4-25 20:53 | 只看该作者
想法和7楼完全一样

使用特权

评论回复
15
tianyalingyin|  楼主 | 2011-4-26 07:44 | 只看该作者
7楼 正解,我函数的问题,谢谢各位的帮助

使用特权

评论回复
16
qzhui121| | 2011-5-5 14:49 | 只看该作者
有点难度啊

使用特权

评论回复
17
chongren| | 2011-5-5 19:17 | 只看该作者
赞分析

使用特权

评论回复
18
fangfei036| | 2012-3-27 15:32 | 只看该作者
顶一个啊,很容易忽略的问题,分析的很漂亮

使用特权

评论回复
19
figo20042005| | 2012-3-27 20:07 | 只看该作者
还有你的定时器只初始化时赋初值了,中断结束前也要赋初值的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

52

帖子

1

粉丝