当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]定时器是单片机的重要功能模块之一,在检测、控制领域有广泛应用。定时器常用作定时时钟,以实现定时检测,定时响应、定时控制,并且可以产生ms宽的脉冲信号,驱动步进电机。

设计要求:

每秒点亮P1.0口的发光二极管一次,然后熄灭,使发光二极管形成闪烁效果

实现思路:

通过定时/计数器,每秒触发一次P1.0取反

涉及到的功能模块:定时器,中断,LED操作

定时器装填:

需要计数每秒的话,计数921600时溢出即可,在四种方式定时方式中,最大的计数范围是方式2:65536,将921600分解成20份,每份计数46080时溢出,当溢出20次时灯闪烁,每次定时器溢出都要重新装填

模块设计

1、初始化

LED(上拉输入模式)

定时器(T0,工作方式1,装填初值,启动(在中断初始化后启动))

中断(开放中断,开放T0中断)

2、while(1)

3、中断

重置定时器(溢出位复位,重新装填计时)

判断溢出次数(到达20次时LED改变状态,计数清零。未到达20次时溢出次数加一)

实现代码:

#include

#include

typedef unsigned char uchar;

sbit LED = P1 ^ 0;

uchar count = 0;

void Interrupt() interrupt 1

{

TH0 = (65536 - 46080) / 256; //触发中断时重新装填计时

TL0 = (65536 - 46080) % 256;

if (count == 20)

{

LED = ~LED;

count = 0;

}

else ++count;

}

void main(void)

{

LED = 0xff; //初始化LED

TMOD = 0x01; //初始化TMOD,定时器0,方式1

TH0 = (65536 - 46080) / 256; //装填计数

TL0 = (65536 - 46080) % 256;

EA = 1; //开放所有中断

ET0 = 1; //开放定时器0中断控制位

TR0 = 1; //定时器0开始计时

while(1)

{

_nop_();

}

 

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭