// Definisikan pin LED
const int ledPin = 13;
// Variabel untuk menyimpan status LED
volatile bool ledState = false;
void setup() {
// Inisialisasi pin LED sebagai OUTPUT
pinMode(ledPin, OUTPUT);
// Nonaktifkan global interrupts sementara
cli();
// Konfigurasi Timer1
// Mode: CTC (Clear Timer on Compare Match)
TCCR1A = 0; // Set register A ke 0
TCCR1B = 0;
TCCR1B |= (1 << WGM12); // Mengatur Mode CTC
// Atur nilai perbandingan untuk menghasilkan interupsi setiap 1 detik
// Formula: OCR1A = (F_CPU / (Prescaler * Desired Frequency)) - 1
// F_CPU = 16,000,000 Hz (untuk Arduino Uno)
// Prescaler = 256
// Desired Frequency = 1 Hz (1 detik)
OCR1A = 62499;
// Atur prescaler menjadi 256
TCCR1B |= (1 << CS12);
// Aktifkan interupsi Compare Match A untuk Timer1
TIMSK1 |= (1 << OCIE1A);
// Aktifkan global interrupts
sei();
}
void loop() {
// Tidak perlu kode di sini karena kontrol LED dilakukan di ISR
}
// ISR untuk Timer1 Compare Match A
ISR(TIMER1_COMPA_vect) {
// Toggle status LED
ledState = !ledState;
// Perbarui status LED
digitalWrite(ledPin, ledState ? HIGH : LOW);
}