Pengenalan Interrupt

Post kali ni adalah untuk memperkenalkn kepada noob2 sekalian wujudnye function "interrupt" di dalam programming c++. Ape tuh interrupt?  Intterupt dgn kate mudahnye sesuatu set instruction yg memerlukan layanan serta merta daripada pic(utk pic programming). Interrupt biasanye digunakan supaya pic menjalankn 2 atau lebih routine dalam sesuatu masa ataupon sesuatu program yg harus dijalankan oleh pic tanpa ade ganguan daripada program lain. Contohnye applikasinya; di dalam main program, pic kena paparkan nilai analog sesuatu sensor dan dlm mase yg sme pic harus membaca nilai analog dari sensor itu setiap mase. Bace nilai analog dari sensor tu kena guna interrupt supaya "time responce" program korang lebih stabil. Interrupt juga mempunyai timer nye tersendiri, maksudnye kita boleh  jalankan sesuatu program contonhye led blingking(delay program) dan dalam mase yg same ade program lain yg pic jalankan. kali aku, dgn bangga dirinya nk tunjukkan bertapa mudahnye pengunaan interrupt ni dalm ccs software :P




Elemen penting interrupt

Sebelum kita pegi lebih menyimpang, aku nk terangkan sikit elemen penting yg perlu ade utk aktifkan interrupt ni. Command biasa utk hidupkan interrupt ni ialah ‘enable_interrupts(level)’... Klu ikutkan pengetahuan aku stakat nih, interuppt ni ade 2 level.. yg pertama global level dan kedua individual level. Global ni macam main switch utk interrupt lah, kena bukak dia dulu sebelum interrupt lain. Camne nk bukak dia? senang je.. gunakan command "enable_interrupts(global);" lepas tu barulah enable interrupt yg lain.. individual interrupt ni ade byk.. terpulanglah kat kita nk gunakan yg mne ikot kesesuaian applikasi program kita. gunakan command ‘#int_xxxx’, xxxx tu jenis interrupt kita nk guna.. bawah command ni korang kena letakkan interrupt routine korang...
jenis interrupt yg aku tau:

INT_EXT (External Interrupt)
INT_RTCC (Timer0 [RTCC] overflow)
INT_RB (Change on B4-B7 PIN)
INT_AD (A/D Converter)
INT_TIMER1 (Timer1 overflow)
INT_TIMER2 (Timer2 overflow)
INT_SSP (S mart Serial Port (SPI,I2C))
INT_PSP (Parallel Slave Port)
INT_RDA(UART Port)

-dia nye penerangan korang cari sendirilah kat google.... :D

Oh ye lupe nk sebut.. korang gak bleh disable interrupt ni bila2 mase je korang nk dalm main program.. guna command nih "disable_interrupts(level)".... sebenarnye interrupt dlm pic nih ade flag dia dimana binary code menentukan hala tuju flag tuh.. tpi bila guna ccs software nih interrupt jadi sgt mudah.. :)

External interrput

Utk ape2 interrupt yg menggunakn signal luar korang kena tentukan edge dia sama ade:
L_to_H
H_to_L

nota: L tu untk LOW dan H tu utk High. kira Low kepada high tu maksudnye signal tu low dulu(0v) pahtu bila aktif jadi High(5v) dan sebaliknya.

command nye contoh: ext_int_edge(L_to_H);


Mengaktifkan interrupt

Utk contoh kali ni aku nk cube guna interrupt paling mudah dan kerap org guna iaitu #int_RB.

Utk interrupt ni, signal yg kita nk bace msti pin B4 smpai B7... plih je mane2...

program:

#include <18f4620.h>
#fuses HS,NOWDT,NOLVP,NOPROTECT //hs=high speed nowatch
#device adc=10
#use delay(clock=20M)
int nilai=0; //declaration variable buat atas ni supaya interrupt bleh bace  


#int_rb  // jenis interrupt
void ape_ape_je() { // namekan routine ni ikt suka korang
if( !input(PIN_B4)){ // mesti B4 smpai B7
      nilai = 1;
 }
   else{}
if( !input(PIN_B5) ){
         nilai = 2;
 }      
 else{}
}

void main() {
   enable_interrupts(global);//enable interrupt global
   enable_interrupts(int_rb);//enable interrupt individu

   ext_int_edge( H_TO_L ); //edge dia sebab kita guna sistem pull down

while(true){
      if(nilai==1){
         output_high(PIN_D1);
         delay_ms(500);
         output_low(PIN_D1);
         delay_ms(500);
      }
     
      else if(nilai==2){
          output_high(PIN_D2);
         delay_ms(500);
         output_low(PIN_D2);
         delay_ms(500);
      }
      else{
      output_low(PIN_D1);
      output_low(PIN_D2);
      }
}}

litar:

                                               (tekan gambar utk besarkan)

Tekan button 1, lampu D1 akan blingking tekan button 2, lampu D2 akan blingking. program yg sesimple ni tanpa mengunakan interrupt pon bole... tapi utk program main yg panjang interrupt mmg sgt membantu dari segi time responce program kita dan program kita kan jadi lebih ringkas.

Nota:Name utk routine interrupt nih korang boleh letak sesuka ati je ikut kepala hotak dan nafsu korang.. Post2 lain yg akan menyusul akan terangkan lagi jenis interrupt yg lain.. selmat mecuba noob.. :)

Download:


 Proteus nye file:

Popular posts from this blog

Pendahuluan:Peripheral Interface Controller(PIC microcontroller)

Pendahuluan: Proteus simulasi yg berguna