#include <avr/interrupt.h> // Library untuk Interrupt AVR
// Pin konfigurasi
const int ledPin = 13; // LED terhubung ke pin 13
volatile bool ledState = false; // Variabel status LED
void setup() {
// Konfigurasi pin LED sebagai output
pinMode(ledPin, OUTPUT);
// Konfigurasi Timer1 untuk Overflow Interrupt
cli(); // Matikan interrupt global sementara
TCCR1A = 0; // Normal operation (non-PWM)
TCCR1B = (1 << CS12) | (1 << CS10); // Prescaler 1024
TCNT1 = 0; // Reset timer counter register
TIMSK1 |= (1 << TOIE1); // Aktifkan Timer1 Overflow Interrupt
sei(); // Aktifkan kembali interrupt global
// Pesan Serial (opsional)
Serial.begin(9600);
Serial.println("Simulasi Trap Interrupt dengan Timer Overflow");
}
void loop() {
// Program utama (tetap berjalan)
Serial.println("Program utama berjalan...");
delay(1000); // Delay 1 detik
// Tetapkan status LED
if (ledState) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
// Interrupt Service Routine (ISR) untuk Timer1 Overflow
ISR(TIMER1_OVF_vect) {
// ISR ini dijalankan ketika Timer1 overflow (simulasi trap interrupt)
Serial.println("Trap Interrupt (Timer Overflow) dipicu!");
ledState = !ledState; // Toggle LED
// Reset Timer1 counter untuk siklus berikutnya
TCNT1 = 0;
}