//2.CTC Mode
boolean myflag1 = true; //ประกาศตัวแปร myflag1 (boolean) เก็บข้อมูลค่าความจริง
void setup() {
DDRB = 0xFF; //PORTB เป็น outputs
TCCR1A = 0; // initialize timer1
TCCR1B = 0; // ล้างสถานะทุก bit
OCR1A = 6943.44 ; // 9 Hz (รหัสนศ 099 = 9 Hz) ((16*10^6/256*9)-1)=6943.44
TIMSK1 = 0; // ปิดกาารใช้งาน interrupts ทั้งหมด
TCNT1 = 0x0; // รีเซ็ต Counter
TIFR1 = 0x6 ; // Clear all interrupt flags
TCCR1B |= (1 << WGM12); // ตั้งค่าCTC mode ดูตาราง 2-2
TCCR1B |= (1 << CS12); // prescaler 256 ดูตาราง 2-1
}
void loop() {
if(TIFR1 & (1 <<OCF1A)){ // เช็ค interrupt
TIFR1 = (1 << OCF1A); // เช็ค interrupt
if(myflag1){
PORTB &= ~(1 <<PORTB7); //PB7 ไม่ทำงาน
}
else{ //กำหนดให้โปรแกรมทำงานเมื่อเงื่อนไขเป็นจริง
PORTB = (1 <<PORTB7); //PB7 ทำงาน
}
myflag1 =! myflag1; // สลับค่าflag
}
}