[技术问答]

新唐定时器例程不是和理解,求大神解惑

[复制链接]
1323|8
手机看帖
扫描二维码
随时随地手机跟帖
ClimberAzure|  楼主 | 2018-8-31 11:00 | 显示全部楼层 |阅读模式
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"

#if 0
//#define                TIMER1_MODE0_ENABLE                TMOD&=0x0F
//#define                TIMER1_MODE1_ENABLE                TMOD&=0x0F;TMOD|=0x10
//#define                TIMER1_MODE2_ENABLE                TMOD&=0x0F;TMOD|=0x20
//#define                TIMER1_MODE3_ENABLE                TMOD&=0x0F;TMOD|=0x3F

//#define                TIMER0_MODE0_ENABLE                TMOD&=0xF0
//#define                TIMER0_MODE1_ENABLE                TMOD&=0xF0;TMOD|=0x01
//#define                TIMER0_MODE2_ENABLE                TMOD&=0xF0;TMOD|=0x02
//#define                TIMER0_MODE3_ENABLE                TMOD&=0xF0;TMOD|=0xF3
#endif

#define TH0_INIT        0xFC //5.0ms@XTAL=12MHz, Period = (10.85/2) ms@XTAL=22.1184MHz
#define TL0_INIT        0x0F
#define TH1_INIT        0xE0 //2.5ms@XTAL=12MHz, Period = (5.425/2) ms@XTAL=22.1184MHz
#define TL1_INIT        0x00


/************************************************************************************************************
*    TIMER 0 interrupt subroutine
************************************************************************************************************/
void Timer0_ISR (void) interrupt 1          //interrupt address is 0x000B
{
    TH0 = TH0_INIT;
    TL0 = TL0_INIT;   
    P10 = ~P10;                                                                                                                        // GPIO toggle when interrupt
}
/************************************************************************************************************
*    TIMER 1 interrupt subroutine
************************************************************************************************************/
void Timer1_ISR (void) interrupt 3          //interrupt address is 0x001B
{
    TH1 = TH1_INIT;
    TL1 = TL1_INIT;   
    P03 = ~P03;                                                                                                                        // GPIO toggle when interrupt
}
/************************************************************************************************************
*    Main function
************************************************************************************************************/
void main (void)
{
        TMOD = 0XFF;
        Set_All_GPIO_Quasi_Mode;
        TIMER0_MODE0_ENABLE;                        //Timer 0 and Timer 1 mode configuration
        TIMER1_MODE0_ENABLE;
   
        clr_T0M;
        clr_T1M;
   
        TH0 = TH0_INIT;
        TL0 = TL0_INIT;
        TH1 = TH1_INIT;
        TL1 = TL1_INIT;
   
//        set_ET0;                                    //enable Timer0 interrupt
        set_ET1;                                    //enable Timer1 interrupt
        set_EA;                                     //enable interrupts
       
        set_TR0;                                    //Timer0 run
//        set_TR1;                                    //Timer1 run

  while(1)
        {
                TH0 = TH0_INIT;
                TL0 = TL0_INIT;
                set_TR0;
                while(!TF0);
                clr_TR0;
                P12 = ~P12;       
                TF0 = 0 ;
}
}
jasontu| | 2018-8-31 13:50 | 显示全部楼层
http://wiki.jikexueyuan.com/project/mcu-tutorial-one/timer-register.html

使用特权

评论回复
734774645| | 2018-8-31 15:14 | 显示全部楼层
楼主结合手册这一章节看啊,只看代码你怎么懂。

使用特权

评论回复
734774645| | 2018-8-31 15:42 | 显示全部楼层
373265b88f14936b0e.png

使用特权

评论回复
ClimberAzure|  楼主 | 2018-8-31 16:29 | 显示全部楼层

定时器中断的优先级怎么设置

使用特权

评论回复
734774645| | 2018-8-31 16:36 | 显示全部楼层
中断优先级看手册20.3章节
20.3  中断优先级
系统为所有中断源提供4种优先级:最高(3级)、高(2级)、低(1级)、最低(0级)。中断源可以单独设置
各自的优先级位来配置其优先级。表20-2. 列举了4种优先级配置。相对来说,低优先级中断可以被高优先级中断
打断,但不能被同等优先级或更低的优先级打断。默认优先级可以帮助中断控制器解决同等优先级同时请求中断
的状况。
在多个中断时,遵循以下规则:
1.当一个低优先级中断正在运行,这时一个高优先级产生,该中断会被打断去执行高优先级中断。当高优先级中
断执行完RETI后,低优先级中断恢复继续运行。当低优先级中断执行完RETI后,控制器把运行权利交回给主程
序。
2.如果一个高优先级中断正在运行,不能被任何其他中断源打断——即使这高优先级中断,在默认优先级中比正
在运行的中断优先级更高,也不能打断运行中的中断。
3.低优先级中断只有在其他中断没有执行的情况下才能被调用。然后同时,低优先级中断不能被另一个低优先级
中断打断,即使这个低优先级中断,在默认优先级中比正在运行的中断优先级更高,也不能打断运行中的中断。
4.如果两个中断同时发生,优先级高的中断先执行。如果两个中断优先级相同,默认优先级高的中断先执行,这
是符合默认优先级唯一的条件。
默认优先级如表 20–3所示,总结了中断源、标志位、向量地址、使能位、优先级位和允许CPU可以从掉电模式
中唤醒。CPU从掉电模式中唤醒, 请参照:章节22.1 掉电模式

使用特权

评论回复
734774645| | 2018-8-31 16:37 | 显示全部楼层
587725b88fe222a128.png
表 表 20–3.  各级中断源特性表
898575b88fe568de4e.png

使用特权

评论回复
mintspring| | 2018-8-31 17:36 | 显示全部楼层
下载最新的手册,不懂的在手册搜索关键词。

使用特权

评论回复
huahuagg| | 2018-8-31 20:06 | 显示全部楼层
是要配合例子,手册,头文件注释仪器看。

使用特权

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

本版积分规则

4

主题

23

帖子

0

粉丝