atmega16单片机定时器t2实现1s定时

 我来答
百度网友ec35c0b5a
2016-01-04 · TA获得超过1692个赞
知道大有可为答主
回答量:2508
采纳率:73%
帮助的人:1195万
展开全部
//ICC-AVR application builder : 2016-1-4 上午 11:32:30
// Target : M16
// Crystal: 12.000Mhz

#include <iom16v.h>
#include <macros.h>
//利用T2实现2ms定时,而后计时500次就是1S
unsigned int dly_ms,timer_1s;

void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}

//TIMER2 initialize - prescale:128
// WGM: Normal
// desired value: 2mSec
// actual value: 1.995mSec (0.3%)
void timer2_init(void)
{
TCCR2 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT2 = 0x45; //setup
OCR2 = 0xBB;
TCCR2 = 0x05; //start
}

#pragma interrupt_handler timer2_ovf_isr:5
void timer2_ovf_isr(void)
{
TCNT2 = 0x45; //reload counter value
dly_ms++;//2MS定时
if(dly_ms>=500) //定时2ms*500=1000ms=1S
{
dly_ms=0; //500次复位后继续冲0-500
timer_1s++; //1S往上加吧!!!!
}
}

//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer2_init();

MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x40; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}

main()
{
init_devices();//设备初始化
while(1)//作死的循环吧
;

}
cjj796
2015-12-29 · TA获得超过8709个赞
知道大有可为答主
回答量:1.3万
采纳率:68%
帮助的人:3448万
展开全部
你好!定时后,需要做什么呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式