BAB II
Pengesahan
Tanggal:
Asisten
LABORATORIUM PEMBELAJARAN ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
BAB : INTERUPSI
NAMA : JASON WIJAYA
NIM : 205150307111029
TANGGAL : 21/09/2021
ASISTEN : - MUHAMMAD FATHAM MUBINA A
- RANDY CHRISTIAN SAPUTRA
TUGAS / LAPORAN
B. Penjelasan Kode
Percobaan21.int
1 Memanggil library untuk input output.
2 Memanggil library delay.
3 Memanggil library untuk interrupt.
4 Menggunakan internal clock 1MHz.
5 Mendefine LED sebagai PORTC.
6 Mendefine LEDDir sebagai DDRC.
7 Fungsi utama program.
8
9 Inisialisasi PORTC (pin untuk LEDDir) sebagai keluaran.
10 Memberi nilai awal PORTC (pin untuk LEDDir) = 1.
11 Inisialisasi PORTD sebagai input.
12 Memberi nilai awal PORTD = 1.
13 Fungsi perulangan while
14
15 Menyalakan LED pada bit 0 (C.0) dengan delay 1000ms
16 Menyalakan LED pada bit 1 (C.1) dengan delay 1000ms
17 Menyalakan LED pada bit 2 (C.2) dengan delay 1000ms
18 Menyalakan LED pada bit 3 (C.3) dengan delay 1000ms
19 Menyalakan LED pada bit 4 (C.4) dengan delay 1000ms
20 Menyalakan LED pada bit 5 (C.5) dengan delay 1000ms
21 Menyalakan LED pada bit 6 (C.6) dengan delay 1000ms
22 Menyalakan LED pada bit 7 (C.7) dengan delay 1000ms
23
24 Jika pin D.3 bernilai 0 atau push button 1 ditekan
25 Menyalakan LED pada pin C7-C4 dengan delay 1000ms
26
C. Screenshot Hasil Simulasi
- Nyala LED setelah program dijalankan
- Tekan dan tahan Push 1 (terhubung ke D3) hingga LedBar bagian atas selesai
menyala. Ceritakan bagaimana pola nyala LedBar pada saat switch ditekan.
Jawab: Saat LED pada PIN C7 selesai menyala, LED yang berada di bagian
atas (PIN C4-PIN C7) menyala secara bersamaan, lalu dilanjutkan dengan
menyalakan LED pada PIN C0.
- Kode program baris ke berapakah yang berfungsi untuk memeriksa input dan
mengubah pola nyala LedBar saat Push 1 ditekan?
Jawab: Kode program pada baris ke 24 dan 25.
- Tekan Push bit 3 sekali lagi dalam waktu singkat dan tanpa ditahan. Ulagi
beberapa kali untuk memastikan. Dapatkah mikrokontroler menjalankan kode
program pada soal no 3 seketika pada saat switch ditekan? Jelaskan.
Jawab: Ketika Push bit 3 ditekan dalam waktu singkat tanpa ditahan, LED akan
menyala seperti biasa tanpa adanya perubahan pola seperti soal no 3. Hal
tersebut dikarenakan kita tidak menggunakan sistem interrupt.
Percobaan 1.2: Interupsi
A. Source Code
Percobaan22.int
1 #include <avr/io.h>
2 #include <util/delay.h>
3 #include <avr/interrupt.h>
4 #define F_CPU 1000000UL
5 #define LED PORTC
6 #define LEDDir DDRC
7 int main(void)
8 {
9 LEDDir = 0xFF;
10 LED = 0xFF;
11 DDRD = 0x00;
12 PORTD = 0xFF;
13 GICR = 1<<INT1;
14 MCUCR = 1<<ISC10 | 1<<ISC11;
15 sei();
16 while (1)
17 {
18 LED = 0b00000001; _delay_ms(1000);
19 LED = 0b00000010; _delay_ms(1000);
20 LED = 0b00000100; _delay_ms(1000);
21 LED = 0b00001000; _delay_ms(1000);
22 LED = 0b00010000; _delay_ms(1000);
23 LED = 0b00100000; _delay_ms(1000);
24 LED = 0b01000000; _delay_ms(1000);
25 LED = 0b10000000; _delay_ms(1000);
26 }
27 }
28 ISR(INT1_vect)
29 {
30 LED = 0xF0; _delay_ms(1000);
31 }
B. Penjelasan Kode
Percobaan22.int
1 Memanggil library untuk input output.
2 Memanggil library delay.
3 Memanggil library untuk interrupt.
4 Menggunakan internal clock 1MHz.
5 Mendefine LED sebagai PORTC.
6 Mendefine LEDDir sebagai DDRC.
7 Fungsi utama program.
8
9 Inisialisasi PORTC (pin untuk LEDDir) sebagai keluaran.
10 Memberi nilai awal PORTC (pin untuk LEDDir) = 1.
11 Inisialisasi PORTD sebagai input.
12 Memberi nilai awal PORTD = 1.
13 Mengaktifkan GICR dengan interrupt 1 (INT1)
14 Set MCUCR ISC 10 dengan ISC 11
15 Mengaktifkan register SREG (sei)
16 Fungsi perulangan while
17
18 Menyalakan LED pada bit 0 (C.0) dengan delay 1000ms
19 Menyalakan LED pada bit 1 (C.1) dengan delay 1000ms
20 Menyalakan LED pada bit 2 (C.2) dengan delay 1000ms
21 Menyalakan LED pada bit 3 (C.3) dengan delay 1000ms
22 Menyalakan LED pada bit 4 (C.4) dengan delay 1000ms
23 Menyalakan LED pada bit 5 (C.5) dengan delay 1000ms
24 Menyalakan LED pada bit 6 (C.6) dengan delay 1000ms
25 Menyalakan LED pada bit 7 (C.7) dengan delay 1000ms
26
27
28 Tempat menaruh kodingan ISR dengan INT1
29
30 Menyalakan LED 4bit paling atas dengan delay 1000ms
31
- Kode program baris ke berapakah yang berfungsi untuk mengubah pola nyala
LedBar?
Jawab: Kode program baris ke 28 sampai ke 31
B. Penjelasan Kode
Percobaan23.int
1 Memanggil library untuk input output.
2 Memanggil library delay.
3 Memanggil library untuk interrupt.
4 Menggunakan internal clock 1MHz.
5 Mendefine LED sebagai PORTC.
6 Mendefine LEDDir sebagai DDRC.
7 Fungsi utama program.
8
9 Inisialisasi PORTC (pin untuk LEDDir) sebagai keluaran.
10 Memberi nilai awal PORTC (pin untuk LEDDir) = 1.
11 Inisialisasi PORTD sebagai input.
12 Memberi nilai awal PORTD = 1.
13 Mengaktifkan GICR dengan interrupt 0 (INT 0) dan interrupt 1 (INT1)
14 Set MCUCR ISC 10 dengan ISC 11
15 Mengaktifkan register SREG (sei)
16 Fungsi perulangan while
17
18 Menyalakan LED pada bit 0 (C.0) dengan delay 1000ms
19 Menyalakan LED pada bit 1 (C.1) dengan delay 1000ms
20 Menyalakan LED pada bit 2 (C.2) dengan delay 1000ms
21 Menyalakan LED pada bit 3 (C.3) dengan delay 1000ms
22 Menyalakan LED pada bit 4 (C.4) dengan delay 1000ms
23 Menyalakan LED pada bit 5 (C.5) dengan delay 1000ms
24 Menyalakan LED pada bit 6 (C.6) dengan delay 1000ms
25 Menyalakan LED pada bit 7 (C.7) dengan delay 1000ms
26
27
28 Tempat menaruh kodingan ISR dengan INT0
29
30 Menyalakan LED 4bit paling bawah dengan delay 1000ms
31
32 Tempat menaruh kodingan ISR dengan INT1
33
34 Menyalakan LED 4bit paling atas dengan delay 1000ms
35
- Tekan Push 1. Ceritakan bagaimana pola nyala LedBar pada saat switch
ditekan.
- Jawab: LED yang berada di bagian atas (PIN C4-PIN C7) menyala secara
bersamaan. Setelah kita tidak menekan push 1, LED akan nyala secara normal
seperti no 1 melanjutkan LED yang sebelumnya telah menyala.
- Tekan Push 2. Ceritakan bagaimana pola nyala LedBar pada saat switch
ditekan.
- Jawab: LED yang berada di bagian bawah (PIN C0-PIN C3) menyala secara
bersamaan. Setelah kita tidak menekan push 2, LED akan nyala secara normal
seperti no 1 melanjutkan LED yang sebelumnya telah menyala.
Kesimpulan
Percobaan 2.1 – Pada percobaan pertama, program yang kita gunakan belum
menggunakan program interrupt. Oleh karena itu, bila kita ingin mengubah pola
nyala LedBar, maka kita harus menggunakan percabangan if dengan input yang telah
ditentukan.
Percobaan 2.2 – Pada percobaan kedua, program yang kita gunakan sudah
menggunakan program interrupt. Bisa kita lihat saat kita menekan push 1 yang
terhubung pada pin D3, maka pola nyala LedBar akan berubah yaitu hanya LedBar
yang berada pada bagian atas (pin C4-pin C7) yang menyala. Setelah LedBar yang
ada di bagian atas menyala, maka program akan dilanjutkan ke program sebelumnya
atau melanjutkan nyala LedBar yang berpola tersebut. Untuk dapat melakuka
interupsi kita harus mendefinisikan pin INT1 pada register GICR bernilai 1 dan
mendefinisikan pin ISC10 dan ISC11 pada register MCUCR bernilai 1, serta
mengaktifkan Global Interrupt Enable Bit (pin ke 7 pada Status Register).
BAB : INTERUPSI
NAMA : JASON WIJAYA
NIM : 205150307111029
TANGGAL : 21/09/2021
ASISTEN : - MUHAMMAD FATHAM MUBINA A
- RANDY CHRISTIAN SAPUTRA
TUGAS / LAPORAN
1. Pada percobaan ini, kode program baris keberapakah yang mengatur register
untuk interupsi eksternal? Berapakah nilai setiap bit dari register tersebut?
Jelaskan apa arti nilai pada register tersebut.
Jawab:
- Percobaan 2.2
Baris 13 : Pin interrupt 1 pada register GICR bernilai 1/mengaktifkan pin
interrupt 1.
Baris 14 : Memberikan set register MCUCR ISC10 dan ISC11 dengan
nilai 1. Interrupt akan terpicu ketika rising edge (ketika push button
dilepas setelah ditekan)
Baris 15 : Mengaktifkan Global Interrupt Enable Bit (pin ke 7 pada status
register)
- Percobaan 2.3
Baris 13 : Pin interrupt 1 dan pin interrupt 0 pada register GICR bernilai
1/mengaktifkan pin interrupt 1 dan pin interrupt 0.
Baris 14 : Memberikan set register MCUCR ISC01, ISC00, ISC10, dan
ISC11 dengan nilai 1. Interrupt akan terpicu ketika rising edge (ketika
push button dilepas setelah ditekan)
Baris 15 : Mengaktifkan Global Interrupt Enable Bit (pin ke 7 pada status
register)
Source Code
Tugas2.int
1 #include <avr/io.h>
2 #include <util/delay.h>
3 #include <avr/interrupt.h>
4 #define F_CPU 1000000UL
5 #define LED PORTC
6 #define LEDDir DDRC
7 int main(void)
8 {
9 LEDDir = 0xFF;
10 LED = 0xFF;
11 DDRD = 0x00;
12 PORTD = 0xFF;
13 DDRB = 0x00;
14 PORTB = 0xFF;
15 GICR = 1<<INT0 | 1<<INT1 | 1<<INT2;
16 MCUCR = 1<<ISC01 | 0<<ISC00 | 1<<ISC10 | 1<<ISC11;
17 MCUCSR = 1<<ISC2;
18 sei();
19 while (1)
20 {
21 LED = 0b00000001; _delay_ms(1000);
22 LED = 0b00000010; _delay_ms(1000);
23 LED = 0b00000100; _delay_ms(1000);
24 LED = 0b00001000; _delay_ms(1000);
25 LED = 0b00010000; _delay_ms(1000);
26 LED = 0b00100000; _delay_ms(1000);
27 LED = 0b01000000; _delay_ms(1000);
28 LED = 0b10000000; _delay_ms(1000);
29 }
30 }
31 ISR(INT0_vect)
32 {
LED = 0x55; _delay_ms(1000);
33
}
34
ISR(INT1_vect)
35
{
36
LED = 0xAA; _delay_ms(1000);
37
}
38
ISR(INT2_vect)
39 {
40 LED = 0xFF; _delay_ms(2000);
41 }
42
Penjelasan Kode
Tugas2.int
1 Memanggil library untuk input output.
2 Memanggil library delay.
3 Memanggil library untuk interrupt.
4 Menggunakan internal clock 1MHz.
5 Mendefine LED sebagai PORTC.
6 Mendefine LEDDir sebagai DDRC.
7 Fungsi utama program.
8
9 Inisialisasi PORTC (pin untuk LEDDir) sebagai keluaran.
10 Memberi nilai awal PORTC (pin untuk LEDDir) = 1.
11 Inisialisasi PORTD sebagai input.
12 Memberi nilai awal PORTD = 1.
13 Inisialisasi PORTB sebagai input.
14 Memberi nilai awal PORTB = 1.
15 Mengaktifkan GICR dengan interrupt 0 (INT 0) dan interrupt 1 (INT1)
16 Set MCUCR ISC01, ISC 10, dan ISC 11 bernilai 1 dan ISC00 bernilai 0
17 Set MCUCSR ISC 2 bernilai 1
18 Mengaktifkan register SREG (sei)
19 Fungsi perulangan while
20
21 Menyalakan LED pada bit 0 (C.0) dengan delay 1000ms
22 Menyalakan LED pada bit 1 (C.1) dengan delay 1000ms
23 Menyalakan LED pada bit 2 (C.2) dengan delay 1000ms
24 Menyalakan LED pada bit 3 (C.3) dengan delay 1000ms
25 Menyalakan LED pada bit 4 (C.4) dengan delay 1000ms
26 Menyalakan LED pada bit 5 (C.5) dengan delay 1000ms
27 Menyalakan LED pada bit 6 (C.6) dengan delay 1000ms
28 Menyalakan LED pada bit 7 (C.7) dengan delay 1000ms
29
30
31 Tempat menaruh kodingan ISR dengan INT0
32
33 Menyalakan LED C1, C3, C5, dan C7 dengan delay 1000ms
34
35 Tempat menaruh kodingan ISR dengan INT1
36
37 Menyalakan LED C0, C2, C4, dan C6 dengan delay 1000ms
38
39 Tempat menaruh kodingan ISR dengan INT2
40
41 Menyalakan seluruh LED secara bersamaan dengan delay 2000ms
42
Screenshot Hasil Simulasi
• Nyala LED saat program dijalankan