16F84A Interrupt ile İleri Geri Saydırma

Başlatan loveswagen, 19 Ocak 2022, 17:21:04

loveswagen

Merhabalar. 16F84A mikroişlemcisi ile H to L yaparak interrupt kullanıp ileri ve geri butonlarına basarak 0'dan 99 a kadar saydırma yapmak istiyorum. Bunu normal bi şekilde yaptım ama interrupt ile bağlantısı ve kodları nasıl olacak anlayamadım. Yardımcı olabilir misiniz.

Devre şeması:



Kodlar:

#include<16F84A.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT
#use delay(clock=4000000)

int sayi=0;
int rakam=0;
int A[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};


#byte PortA = 0x05
#byte PortB = 0x06

void main()
{
set_tris_a(0x0C);
set_tris_b(0x00);
   while(true)
   {
       if(bit_test(PortA,2)){
       sayi++;
       delay_ms(300);
       }
       if(bit_test(PortA,3)){
       sayi--;
       delay_ms(300);
       }
   
       if(sayi==100){
       sayi=0;
       }
       
   
       bit_clear(PortA,0);
       bit_set(PortA,1);
       rakam=sayi/10;
       output_b(A[rakam]);
       delay_ms(10);
     
       bit_set(PortA,0);
       bit_clear(PortA,1);
       rakam=(sayi%10);
       output_b(A[rakam]);
       delay_ms(10);
       
   }

}

Üstte de belirttiğim gibi butonları interruptlarla H to L yaparak artırma azaltma işlemini yapmak istiyorum. Yardımcı olur musunuz ?

sifirzero

Timer kesmeleri kullanmamişsin.timer0 veya timer1 örneklerine bakabilirsin
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

loveswagen

Kesmeleri henüz kullanamadım. Sadece buton bağlantılarını anlasam soruyu çözebileceğim ancak iki butonu ra4 e bağlayıp artırma azaltma yapabilir miyim ?

mehmet

RB0 'ı boşaltın buton kesmesini buraya
bağlayın. Aynı uçları diyot ile şimdiki
butonlarla birleştirin.
Butona basılınca kesme oluşur. Kesme içinde
hangi buton olduğunu anlarsınız.

CCS C bilmiyorum kod kısmında yardımcı olamam...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

sadogan

harici interrup tı aktif etmek için
while loopun üzerne 
enable_interrupts(INT_EXT);
 enable_interrupts(GLOBAL);

#INT_EXT                       
void int_ext_interrupt()
{   
   
}
Bu harici interrut fonsiyonunu main loopun üzerine koyun