打印
[KungFu8位 MCU]

【KF8V111控制器】定时器T0配置

[复制链接]
518|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LM莫|  楼主 | 2020-2-26 21:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
先看一下定时器框图:

使用特权

评论回复
沙发
LM莫|  楼主 | 2020-2-26 21:50 | 只看该作者

我们选择图中红色圈出的线路,然后根据以下流程和相关的寄存器进行配置,


使用特权

评论回复
板凳
LM莫|  楼主 | 2020-2-26 21:51 | 只看该作者
我们的T0定时器的初始化函数如下
void TIM0_Init(void)
{
T0CS = 0;  //选择定时模式
PSA =1;//不分配预分频器
T0 = 205;  //计数初始值

T0IE =1;  
AIE = 1;  //开中断
}

使用特权

评论回复
地板
LM莫|  楼主 | 2020-2-26 21:51 | 只看该作者
定时器T0初始化好了,接下来就是中断函数处理了,官方给出的处理函数名为void int_fun0() __interrupt (0);
这样我们编一个中断处理函数:
void int_fun0() __interrupt (0)
{
T0IF= 0; //清除标志
。。。。 //相关处理函数
}

使用特权

评论回复
5
LM莫|  楼主 | 2020-2-26 21:52 | 只看该作者
下面的程序功能是利用定时器T0中断控制输出矩形波,周期为50us,占空比50%:
#include<KF8V111.h>
unsigned char Flag; //中断计数标志
void SYSTEM_Init(void) //系统时钟配置
{
Flag=0;
IRCS0 =0;
IRCS1 =1;
IRCS2 =1; //系统时钟频率8MHz
}

void PORT_Init(void)    //I/O口配置
{
TR05 = 0;             //P05配置为为输出模式
P0LR5 = 0;           //P05初始化输出为0
}

void TIM0_Init(void)
{
T0CS = 0;  //选择定时模式
PSA =1;//不分配预分频器
T0 = 205;  //计数初始值

T0IE =1;  
AIE = 1;  //开中断
}

void main()
{
SYSTEM_Init();
PORT_Init();
TIM0_Init();

while(1)

 {

if(Flag)
{
Flag =0;
P0LR5 = ~P0LR5; /输出取反
}
         }
}

使用特权

评论回复
6
LM莫|  楼主 | 2020-2-26 21:53 | 只看该作者
//中断函数0:0X04入口地址
void int_fun0() __interrupt (0) //时间间隔=(255-205)*1/f =50*0.5us=25us
{
T0IF= 0;
Flag++;
}

这样定时器中断控制时间就OK了!
上面注意点就是中断时间的配置,定时器的频率是系统时钟4分频后的频率!这样根据频率与计数值的关系可以任意制定时间定时!

使用特权

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

本版积分规则

61

主题

447

帖子

3

粉丝