打印
[复制链接]
2608|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 pizizhu1234 于 2014-9-1 14:59 编辑

void Timer_Init()
{
    //Timer0 Initialise
    T0CS=0;                                  //时钟选择:内部时钟
    PSA=0;                                   //预分频器分配给TMR0
    PS2=0;  PS1=0;  PS0=1;                   //预分频比选择
    TMR0=0x13;                               //设置中断初始值
    T0IF=0;                              //清除TMR0中断标志位
    T0IE=1;                                  //使能TMR0溢出中断
    //Timer2 Initialise
    T2CKPS1=0;   T2CKPS0=1;                                                               //预分频比选择
    T2OUTPS3=0;  T2OUTPS2=0;    T2OUTPS1=0;     T2OUTPS0=0;                            //后分频比选择
//    TMR2=0x13;                                                                                   //设置中断初始值
    PR2=100;
    TMR2IF=0;                                                                              //清除TMR2中断标志位
    TMR2IE=1;                                                                              //使能TMR2匹配中断
    TMR2ON=1;                                                                            //开Timer2

    GIE=1;                                                                                             //开全局中断
}

void interrupt All_Int()
{
    if(T0IE&&T0IF)
    {
        T0IF=0;                                //清除TMR0中断标志位
        TMR0=0x11;                        //设置中断初始值
        LATD4=~LATD4;
        Buzz_T++;
        if(Buzz_T>800)
        {
//            T0IE=0;
            Buzz_T=0;
        }
    }
    if(TMR2IF&&TMR2IE&&TMR2ON)
    {
        TMR2IF=0;
//        TMR2=0x13;
        LATC6=~LATC6;
    }
}

这里有个问题想请问一下.当T0IE=0的时候.不进入中断,导致TIMER2没法判断.这是什么原因?版主帮我看看.我看版主在好多关于中断的帖子里让楼主了解中断结构.想请问一下我对中断结构的理解有没有到位.如果没有请指点一下.我查了很多资料.自己的理解大概是这样.希望能给我一些点拨.
沙发
wangch_sh| | 2014-9-1 14:36 | 只看该作者
T0IE是中断允许

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
pizizhu1234 + 1 很给力!
板凳
pizizhu1234|  楼主 | 2014-9-1 14:46 | 只看该作者
wangch_sh 发表于 2014-9-1 14:36
T0IE是中断允许

那请问如何才能在关闭定时器0的时候,开启定时器2?




使用特权

评论回复
地板
pizizhu1234|  楼主 | 2014-9-1 14:47 | 只看该作者
补两个图

2.jpg (8.78 KB )

2.jpg

1.jpg (23.04 KB )

1.jpg

使用特权

评论回复
5
pizizhu1234|  楼主 | 2014-9-1 14:54 | 只看该作者
数据手册上写的TMR2IE是允许TIMER2和PR2的匹配中断.我开启这个,按理说也应该进入中断不是吗?

4.jpg (11.18 KB )

4.jpg

使用特权

评论回复
6
wangch_sh| | 2014-9-1 15:26 | 只看该作者
TIMER2设置了吗?

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
pizizhu1234 + 2 很给力!
7
pizizhu1234|  楼主 | 2014-9-1 15:33 | 只看该作者
    PR2=100;
    TMR2IF=0;                                                                             
    TMR2IE=1;                                                                     
    TMR2ON=1;         //开Timer2
这个设置好像是可以了.当T0IE=1;的时候.进入中断.if(TMR2IF&&TMR2IE&&TMR2ON)条件成立.并且TMR2IF被正确清0.
当T0IE=0的时候就不进入中断了.按我的理解.我已经开启了TIMER2的匹配中断.即使T0IE=0;也应该进入中断.

2.jpg (6.78 KB )

2.jpg

1.jpg (30.65 KB )

1.jpg

使用特权

评论回复
8
pizizhu1234|  楼主 | 2014-9-1 15:39 | 只看该作者
wangch_sh 发表于 2014-9-1 15:26
TIMER2设置了吗?

7楼有图和代码.如果你说的是TMR2的值的话.我注释起来就是已经测试过了.这个中断是个匹配中断.如果不设置TR2的话就是从0x00开始计数直到和PR2匹配产生一次匹配信号,并且把TR2清0.所以配置一次PR2就可以了.不需要重复配置TR2.我理解是这样的.测试中当T0IE=1;的时候结果也是正常的.
//    TMR2=0x13;

使用特权

评论回复
9
pizizhu1234|  楼主 | 2014-9-1 15:48 | 只看该作者
if(T0IE&&T0IF&&Buzz_Flag)
    {
        T0IF=0;//清除TMR0中断标志位
        TMR0=0x11;//设置中断初始值
        LATD4=~LATD4;
        Buzz_T++;
        if(Buzz_T>800)
        {
//            T0IE=0;
            Buzz_T=0;
            Buzz_Flag=0;
        }
    }


我自己定义了一个Buzz_Flag.已经能够实现我的功能.但是还是想了解一下.为什么TIMER2的匹配中断在T0IE=0时无法进入中断.如果没有得到说服我的答案此贴不结.

使用特权

评论回复
10
wangch_sh| | 2014-9-1 15:55 | 只看该作者
我感觉T0IE和定时器2中断没关系。你贴出全部代码

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
pizizhu1234 + 2 赞一个!
11
pizizhu1234|  楼主 | 2014-9-1 16:17 | 只看该作者
本帖最后由 pizizhu1234 于 2014-9-4 09:01 编辑
wangch_sh 发表于 2014-9-1 15:55
我感觉T0IE和定时器2中断没关系。你贴出全部代码

问题已经解决.TIMER2定时器需要开启PEIE外部中断使能位.在数据手册里并没有详细的说明需要开启该位.但是在 与 TIMER2/4/6 相关的寄存器汇总 里确实有显示TIMER2定时器使用了PEIE寄存器.可能数据手册的撰写者认为TIMER2的匹配中断开启PEIE是常识,不需要说明也应该知道.所以没有再提.

解决方法就是在初始化里加一句
PEIE=1;

明天结帖.谢谢wangch_sh一起讨论.

在回头看中断模块的时候发现一句话.要允许任何外设中断,必须将INTCON寄存器的PEIE位置1.而外设中断允许器1中就有TMR2IE.所以PEIE必须置1.而在TIMER2的介绍中就没有赘述了.特在此补充,不要误导其他人.

使用特权

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

本版积分规则

5

主题

31

帖子

0

粉丝