volatile uint8_t count_2=0, compare_2=122;
volatile bool button_flag=false;
void init_timer(void);
void init_port(void);
void init_external_interrupt(void);
void setup() {
init_port();
init_external_interrupt();
init_timer();
Serial.begin(115200);
// put your setup code here, to run once:
}
void loop() {
if(button_flag){
delay(500);
Serial.println("button");
volatile uint16_t *timer1_ocr1a=(uint16_t *)0x88;
*timer1_ocr1a=31250;
compare_2=61;
button_flag=false;
}
// put your main code here, to run repeatedly:
}
void init_port(void){
//port f data direction register
volatile uint8_t *ddr_f=(uint8_t *)0x30;
//set bit 0, 1, 2 as output
*ddr_f=0x03;
}
void init_timer(void){
//timer 1
volatile uint8_t *timer1_tccr1a=(uint8_t *)0x80;
volatile uint8_t *timer1_tccr1b=(uint8_t *)0x81;
volatile uint16_t *timer1_tcnt1=(uint16_t *)0x84;
volatile uint16_t *timer1_ocr1a=(uint16_t *)0x88;
volatile uint8_t *timer1_tmsk1=(uint8_t *)0x6f;
//configuring timer1 registers
*timer1_tccr1a=0;
*timer1_tccr1b=0x0d;
*timer1_tcnt1=0;
*timer1_ocr1a=15625;
*timer1_tmsk1=0x02;
//timer 2
volatile uint8_t *timer2_tccr2a=(uint8_t *)0xb0;
volatile uint8_t *timer2_tccr2b=(uint8_t *)0xb1;
volatile uint8_t *timer2_tcnt2=(uint8_t *)0xb2;
volatile uint8_t *timer2_ocr2a=(uint8_t *)0xb3;
volatile uint8_t *timer2_tmsk2=(uint8_t *)0x70;
//configuring timer2 registers
*timer2_tccr2a=0x02;
*timer2_tccr2b=0x07;
*timer2_tcnt2=0;
*timer2_ocr2a=255;
*timer2_tmsk2=0x02;
}
ISR(TIMER1_COMPA_vect){
//port f output register
volatile uint8_t *out_f=(uint8_t *)0x31;
//toggle bit 0 of port f
*out_f^=0x01;
}
ISR(TIMER2_COMPA_vect){
count_2++;
if(count_2==compare_2){
//port f output register
volatile uint8_t *out_f=(uint8_t *)0x31;
//toggle bit 1 of port f
*out_f^=0x02;
count_2=0;
}
}
void init_external_interrupt(void){
volatile uint8_t *eicra=(uint8_t *)0x69;
volatile uint8_t *eimsk=(uint8_t *)0x3d;
*eicra=0x03;
*eimsk=0x01;
}
ISR(INT0_vect){
button_flag=true;
Serial.println("ulla vanthuten");
//else{
// Serial.println("Not pressed");
//}
// delay(1000);
}