明白了以上,那么我们便可以继续下去。实现这个 125us 定时的功能徆简单,如果还像 T0 那样就没有什么意义了。所以我们可以设定以下 3 点要求:
a、使用 T1 的自动重载功能;
b、选择 T1 定时器的时钟源为 INTHF。
c、 将 T1 作为高优先级处理;
最终程序如下:- #include<KF8TS2716.h>
- void Init_MCU()
- {
- OSCCTL = 0X70; //选择主频为16M,即系统时钟运行16M
- TR0 = 0X04; //P02口为芯片的MODE脚,需要设置为输入。
- TR1 = 0XFF;
- TR2 = 0XFF;
- TR3 = 0XFF;
- }
- void Init_T1_Fun() //初始化T0模块子函数
- {
- T1CTL = 0XB0;//1011 0000 使能T1重载功能,T1预分频比设置为1:8,选择T1为定 时器模式,先关闭T1ON
- T1CLKEN = 1; //T1时钟选择内部高频振荡器INTHF,即16M
- T1L =0;
- T1H = 0;
- PP1 = 250; //PP1对应的是T1L,设置重载点,T1每计数一个数时间为1/16M/8 = 0.5US;那么125us需要计250个数。
- PP2 = 0; //PP2对应的是T1H
- IPEN = 1; //使能中断优先级模式,
- T1IE = 1; //使能T1中断
- T1IF = 0;
- T1ON = 1; //开启T1模块
- PT1 = 1; //设置T1为高优先级中断
- PUIE = 1; //打开外部中断
- AIEH = 1; //使能高优先级总中断
- }
- //主函数
- void main()
- {
- Init_MCU();
- Init_T1_Fun();
- while(1);
- }
- //中断函数0:0X04入口地址
- void int_fun0() __interrupt (0)
- {
- if(T1IF)
- {
- T1IF = 0;
- P0LR3 = !P0LR3;
- }
- }
- //中断函数1:0x14入口地址
- void int_fun1() __interrupt (1)
- {
- }
|