单片机系列(定时器)-2

本文介绍了如何使用单片机的定时器替代delay()函数以提高执行效率。通过初始化定时器0并设置为12T模式,实现了20毫秒的定时周期。提供了start和stop函数来控制定时器,并利用全局变量timer_cnt记录中断次数,实现时间计数。这种方法可以复用为多个定时器,有效利用有限的定时器资源。
摘要由CSDN通过智能技术生成

    在单片机里定时器也是常用了一个东西,相比的于常用的延时delay(),更精确而且用delay()有个不太好的地方就是它把主程序执行的时间占用了很多对功能上来说没有问题,但从执行效率来说,花费大量的时间才跑delay()这种循环,好像有点划不才一样。所以在main loop 这样的程序中尽量不要去写太多的delay().除非在串口中断发送数据时必要的延时。

头文件 time.h

#ifndef _timer_h_
#define _timer_h_

extern void delay(unsigned char i);
void Delay100ms();
void timer0_init(void);
void timer0_start(void);
void timer0_stop(void);

extern unsigned int timer_cnt;

extern void timer0_init(void);
extern void timer0_start(void);
extern void timer0_stop(void);
#endif


c文件 time.c

#include "../include/timer.h"
#include "../include/stc12c5a60s2.h"

unsigned int timer_cnt;

void timer0_init(void)
{    
    //20毫秒@18.432MHz
    AUXR &= 0x7F;        //定时器时钟12T模式
    TMOD &= 0xF0;        //设置定时器模式
    TL0 = 0x00;  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值