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ı:
(https://i.ibb.co/N2XSxpF/Ekran-g-r-nt-s-2022-01-19-172011.jpg) (https://ibb.co/N2XSxpF)
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 ?
Timer kesmeleri kullanmamişsin.timer0 veya timer1 örneklerine bakabilirsin
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 ?
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...
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