#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "attiny2313-led.h"
uint8_t chika = 0;
uint8_t pika = 0;
void timer_setup(void){
//タイマー0設定
//高速PWM動作(TOP値がOCR0A)
TCCR0A = (1<<WGM01) | (1<<WGM00);
TCCR0B = (1<<WGM02) | timer0_ck_1024;
TCNT0 = 0; //TCNT0の初期値
OCR0A = 77; //TOP値(100.16Hz)
//タイマー1設定
//高速PWM動作(TOP値がICR1)
TCCR1A = (1<<WGM11) | (0<<WGM10);
TCCR1B = (1<<WGM13) | (1<<WGM12) | timer1_ck_8;
TCNT1 = 0; //TCNT1の初期値
ICR1 = 9999; //TOP値(100Hzでオーバーフロー割り込み)
TIMSK = (1<<TOIE1) | (1<<TOIE0); //溢れ割り込み許可
TIFR = (1<<TOV1) | (1<<TOV0); //オーバーフロー割り込み許可
}
void LED_chika(void){ //LEDチカチカさせる
if(GET(green_SW) != 0){OFF(green_LED);}
else if(GET(green_SW) == 0){
if(chika > 100){chika = 0;}
else if(chika > 50){ON(green_LED);}
else if(chika > 0){OFF(green_LED);}
}
if(GET(red_SW) != 0){OFF(red_LED);}
else if(GET(red_SW) == 0){
if(pika > 20){pika = 0;}
else if(pika > 10){ON(red_LED);}
else if(pika > 0){OFF(red_LED);}
}
if((GET(green_SW) != 0)&&(GET(red_SW) != 0)){
OFF(green_LED);
OFF(red_LED);
}
}
//割り込み処理ハンドラ
ISR(TIMER1_OVF_vect) //オーバーフロー割り込み(タイマー1)
{
chika++;
}
ISR(TIMER0_OVF_vect) //オーバーフロー割り込み(タイマー0)
{
pika++;
}
int main()
{
set();
timer_setup();
sei(); //割り込み許可
while(1){
LED_chika();
}
}
コメントをかく