定时器中断程序-AVR STUDIO6-ATMEGA88PA

#include < avr/io.h >
#include < avr/interrupt.h >
unsigned int CNT = 0;
void timer0_init()
{
TCCR0A = 0x00;    //普通模式
TCCR0B = 0x00;    //停止计数
TCNT0 = 0xFA;      //计数初值,为了单步时能快点计数溢出,就用0xFA作初值了
TIMSK0 = 0x01;    //计数溢出使能
}
int main(void)
{
timer0_init();
TCCR0B = 0x01;          //计数频率=系统时钟频率
sei();     //开启全局中断
    while(1)
    {
        ;//TODO:: Please write your application code 
    }
}
ISR(TIMER0_OVF_vect)   //中断服务程序
{
cli();
TCNT0 = 0xFA;
if(++CNT == 10) CNT = 0;
sei();
}

#include <avr/io.h>
#include <avr/interrupt.h>
 
int main(void)
{
    DDRB |= (1<<PORTB5);        //DDRB – The Port B Data Direction Register. Initial Value 0. 设PB5输出(Arduino管脚13)
        PORTB |= (1<<PORTB5);        //PORTB – The Port B Data Register. Initial Value 0. 设PB5高电平
        TCNT0 = 0;                                //TCNT0 – Timer/Counter Register. Initial Value 0. 设计数器初值0
        TIMSK0 |= (1<<TOIE0);        /*TIMSK0 – Timer/Counter Interrupt Mask Register. Initial Value 0. 允许定时器0溢出中断
                                                        TOIE0: Timer/Counter0 Overflow Interrupt Enable.
                                                        When the TOIE0 bit is written to one, and the I-bit in the status register 
                                                        is set, the Timer/Counter0 overflow interrupt is enabled.*/
    TCCR0B |= (1<<CS00)|(1<<CS02);        //给定时器设置预分频系数
        sei();
        while (1) 
    {
    }
}
 
 
SIGNAL(TIMER0_OVF_vect)                //TIMER0_OVF_vect指向定时器0溢出中断地址
{
        //此添加中断服务程序代码
        PORTB ^= (1<<PORTB5);        //PB5取反,管脚13输出方波
}

(30条消息) 定时器中断程序-AVR STUDIO6-ATMEGA88PA_CSDN博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值