Instruktur : Ferry Wahyu Wibowo, S.Si., M.Cs.
1
Interupsi ◦ ◦ ◦ ◦
Struktur interupsi Program Demonstrasi Interupsi Multiple Interrupt Source Context Saving
Timer dan Counter Watchdog Timer Sleep Mode Rangkuman
2
3
1. 2. 3. 4.
Interupsi eksternal. Membagi pin dengan port B, bit 0, berupa edge triggered. Timer 0 overflow. Terjadi ketika counter 8bit pewaktu overflow. Interupsi port B berubah. Interupsi ini jika berubah dideteksi pada port B 4 bit tinggi. EEPROM ketika menulis telah lengkap.
4
INTCON: SFR 0Bh 5
6
#include p16f84A.inc
; ;Port A all output ;Port B: Bit 0 = Interrupt input ; org 00 ;Reset start goto start org 04 ;Int Service Routine start goto Int_Routine
7
start bsf movlw movwf movlw movwf
status,rp0 01 trisb 00 trisa
;memilih bank 1 ;bit 1-7 output, bit 0 input ;porta bit semua output
bcf status,rp0 ;select bank 0 bsf intcon,inte ;enable external interrupt bsf intcon,gie ;enable global int ;Hapus semi-colon dari instruksi berikut untuk merubah ;interrupt edge ; bsf option_reg,intedg
8
wait movlw movwf movlw movwf goto
0a porta 15 porta wait
;set up port awal nilai keluaran
; org 0080 Int_Routine ;Int Service Routine lanjut movlw 00 movwf porta bcf intcon,intf ;clear INTF retfie end
9
interrupt btfsc goto btfsc goto btfsc goto btfsc goto
intcon,0 portb_int intcon,1 ext_int intcon,2 timer_int eecon1,4 eeprom_int
;uji RBIF ;Port B merubah rutin ;uji INTF ;rutin interupsi eksternal ;uji T0IF ;timer overflow routine ;uji EEPROM write complete flag ;EEPROM write complete routine
10
…
movf addwf movwf btfsc
plo,0 qlo,0 ;Apa yang terjadi pada interupsi? rlo status,0
… Int_Routine bcf status,0 ;clear Carry flag movlw 0ff ;ubah nilai reg W bcf intcon,intf retfie end 11
PUSH movwf w_temp swapf status,0 movwf status_temp ...
... POP
swapf movwf swapf swapf
;Salin W ke register W_TEMP ;Swap status ke W ;Save status
Actual ISR
status_temp,0 ;Swap nibbles ke W status ;Pindah W ke STATUS register w_temp,1 ;Swap nibbles di W_TEMP w_temp,0 ;Swap nibbles di W_TEMP ke W
Clear interrupt flag
retfie 12
Pada critical region, tidak dapat melakukan intrusi interupsi. Critical region biasanya termasuk semua aktivitas sensitif waktu dan kalkulasi dimana ISR memanfaatkan hasil. Disable, atau mask, interupsi untuk durasi, dengan memanipulasi enable bit pada register INTCON.
13
Counter digital biasanya dibuat dari flip flop dan count up atau down. Ketika triggering event berupa clock frekuensi konstan, maka dihasilkan timer. 14
(a) (b) (c)
Mengukur waktu antara dua event Mengukur waktu antara dua pulsa Mengukur durasi pulsa
Menggunakan polling atau interupsi
15
16
17
T0CS: memilih sumber clock T0SE: memilih source edge PSA: prescaler assignment bit PS2:PS0: memilih nilai prescaler
18
; ;Demo Timer 0 sebagai counter, menggunakan ping-pong hardware ; ;Frekuensi clock 800kHz (RC osc.) ;Port A 4 right paddle (ip) Counter input. ; 2 "out of play" led (op) ;Port B 7-0 "play" leds (all op) ; list p=16F84A #include p16f84A.inc ;
19
; org 00 ; Inisialisasi bsf status,rp0 movlw B'00011000' movwf trisa movlw 00 movwf trisb movlw B'00101000'
;memilih memory bank 1 ;set port A ke pola di atas ;semua port B bit output ;set T00 untuk masukan eksternal, ; +ve edge, and no prescale
movwf TMR0 bcf status,rp0 ;memilih bank 0 ;
20
;
movlw movwf loop movf movwf goto end
04 ;switch on led menunjukkan daya hidup porta TMR0,0 ;tampilan T0 pada Port B portb loop
21
Pada tunda berbasis software, CPU berada pada saat tunda. Dapat menggunakan Timer 0 untuk tunda. Timer overflow interrupt digunakan untuk menginformasikan CPU ketika waktu tunda muncul. Contoh: ◦ Clock = 800 KHz → Fosc/4 = 200 KHz → T = 5 μs ◦ Preselect = 8 untuk 125 cacah → 125 x 8 x 5 μs = 5.00 ms ◦ Perlu di-set T0 pada 256-125 = 131 untuk mendapatkan overflow setelah 5 ms
22
... ;Inisialisasi org 0010 start bsf status,5 movlw B'00011000' movwf trisa movlw 00 movwf trisb movlw B'00000010'
movwf option_reg bcf status,5
;memilih memory bank 1 ;set port A ke pola di atas ;semua port B bit keluaran ;set T0 untuk masukan internal, ; prescale oleh 8 ;pilih bank 0
...
23
... ;mengenalkan tunda sekitar 5ms delay5 movlw D'131' ;preload T0, sampai 125 siklus, ;setiap 40us, terjadi overflow movwf TMR0 del1 btfss intcon,2 ;uji untuk Timer Overflow flag goto del1 ;loop jika tidak di-set bcf intcon,2 ;clear Timer Overflow flag return
24
Masalah yang besar ketika suatu sistem berbasis komputer mengalami kerusakan pada software dan sistem terkunci atau menjadi tidak merespon. WDT terus mencacah. Jika overflow, akan memaksa mikrokontroler menjadi reset. Jika instruksi clrwdt tidak dieksekusi setiap (18 ms * prescaler rate), terjadi overflow.
25
Ketika instruksi sleep dieksekusi, PIC menghentikan eksekusi dan memasuki mode penyimpanan daya. Dibangkitkan pada: ◦ Reset eksternal (MCLR) ◦ WDT wake-up ◦ Terjadi interupsi
26
Interupsi dan timer/counter merupakan fitur hardware yang penting hampir semua mikrokontroler. Keduanya membawa konsep hardware dan software yang penting untuk dipahami. Teknik dasar menggunakan interupsi dan timer/counter telah dikenalkan dan perlu pengembangan aplikasi.
27