[技术问答] 新唐定时器例程不是和理解,求大神解惑

[复制链接]
1809|8
 楼主| ClimberAzure 发表于 2018-8-31 11:00 | 显示全部楼层 |阅读模式
  1. #include "N76E003.h"
  2. #include "Common.h"
  3. #include "Delay.h"
  4. #include "SFR_Macro.h"
  5. #include "Function_define.h"

  6. #if 0
  7. //#define                TIMER1_MODE0_ENABLE                TMOD&=0x0F
  8. //#define                TIMER1_MODE1_ENABLE                TMOD&=0x0F;TMOD|=0x10
  9. //#define                TIMER1_MODE2_ENABLE                TMOD&=0x0F;TMOD|=0x20
  10. //#define                TIMER1_MODE3_ENABLE                TMOD&=0x0F;TMOD|=0x3F

  11. //#define                TIMER0_MODE0_ENABLE                TMOD&=0xF0
  12. //#define                TIMER0_MODE1_ENABLE                TMOD&=0xF0;TMOD|=0x01
  13. //#define                TIMER0_MODE2_ENABLE                TMOD&=0xF0;TMOD|=0x02
  14. //#define                TIMER0_MODE3_ENABLE                TMOD&=0xF0;TMOD|=0xF3
  15. #endif

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


  20. /************************************************************************************************************
  21. *    TIMER 0 interrupt subroutine
  22. ************************************************************************************************************/
  23. void Timer0_ISR (void) interrupt 1          //interrupt address is 0x000B
  24. {
  25.     TH0 = TH0_INIT;
  26.     TL0 = TL0_INIT;   
  27.     P10 = ~P10;                                                                                                                        // GPIO toggle when interrupt
  28. }
  29. /************************************************************************************************************
  30. *    TIMER 1 interrupt subroutine
  31. ************************************************************************************************************/
  32. void Timer1_ISR (void) interrupt 3          //interrupt address is 0x001B
  33. {
  34.     TH1 = TH1_INIT;
  35.     TL1 = TL1_INIT;   
  36.     P03 = ~P03;                                                                                                                        // GPIO toggle when interrupt
  37. }
  38. /************************************************************************************************************
  39. *    Main function
  40. ************************************************************************************************************/
  41. void main (void)
  42. {
  43.         TMOD = 0XFF;
  44.         Set_All_GPIO_Quasi_Mode;
  45.         TIMER0_MODE0_ENABLE;                        //Timer 0 and Timer 1 mode configuration
  46.         TIMER1_MODE0_ENABLE;
  47.    
  48.         clr_T0M;
  49.         clr_T1M;
  50.    
  51.         TH0 = TH0_INIT;
  52.         TL0 = TL0_INIT;
  53.         TH1 = TH1_INIT;
  54.         TL1 = TL1_INIT;
  55.    
  56. //        set_ET0;                                    //enable Timer0 interrupt
  57.         set_ET1;                                    //enable Timer1 interrupt
  58.         set_EA;                                     //enable interrupts
  59.        
  60.         set_TR0;                                    //Timer0 run
  61. //        set_TR1;                                    //Timer1 run

  62.   while(1)
  63.         {
  64.                 TH0 = TH0_INIT;
  65.                 TL0 = TL0_INIT;
  66.                 set_TR0;
  67.                 while(!TF0);
  68.                 clr_TR0;
  69.                 P12 = ~P12;       
  70.                 TF0 = 0 ;
  71. }
  72. }
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 | 显示全部楼层
 楼主| 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

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