明白了以上,那么我们便可以继续下去。实现这个 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)
{
}
|