mikroc kesme uygulaması

Başlatan emreozgol, 20 Nisan 2015, 21:19:50

emreozgol

Merhaba arkadaşlar,

mikroc'de 1 saniyede butona kaç kez basıldığını, nasıl bulabilirim?

timer0 ve harici kesme ile denedim ancak başarılı olamadım. timer0 ve harici kesme için 2 ayrı interrupt açamıyor muyum?

harici kesme Rb0'a bağlı butona kaç kere basıldığını saysın.
timer0 kesmesi de 1 sn sonunda harici kesme interruptının içindeki değişkendeki sayı değerini alsın istiyorum.

Konu ile ilgili yardımcı olabilirseniz çok sevinirim.

Şimdiden teşekkürler.

selimkoc

Alıntı Yapmikroc'de 1 saniyede butona kaç kez basıldığını, nasıl bulabilirim?

Önce buton kontrolünü yapmalıyız. Buton arkı denen bir durum var. Aşağıdaki linki inceleyiniz.

https://elektrokod.wordpress.com/2013/11/18/buton-kontrolu/


Aynı anda birden çok kesme kullanabiliriz. Timer ve kesmelerle ilgili aşağıdaki linkleri inceleyiniz.

https://elektrokod.wordpress.com/2013/10/07/pic16f628-mikrodenetleyicinde-rb0-kesmesi-interrupt/

https://elektrokod.wordpress.com/2014/05/19/usb-frekansmetre/

emreozgol

#2
sbit LCD_RS at RC2_bit;
sbit LCD_EN at RC3_bit;
sbit LCD_D7 at RC7_bit;
sbit LCD_D6 at RC6_bit;
sbit LCD_D5 at RC5_bit;
sbit LCD_D4 at RC4_bit;

sbit LCD_RS_Direction at TRISC2_bit;
sbit LCD_EN_Direction at TRISC3_bit;
sbit LCD_D4_Direction at TRISC4_bit;
sbit LCD_D5_Direction at TRISC5_bit;
sbit LCD_D6_Direction at TRISC6_bit;
sbit LCD_D7_Direction at TRISC7_bit;

float say=0;
float sonuc=0;
int zaman=0;
char txt[30];
char tcc[30];

void interrupt()
{
if(intcon.intf)
say=say+1;
intcon.intf=0;
}

void InitTimer0()
{
zaman++;
if (zaman==4){
sonuc=say;
zaman=0;
say=0;}
TMR0=0;


intcon.t0if=0;}

void main() {
trisb=255;
trisc=0;

portc=0;
option_reg=0b01000111;
intcon.gie=1;          //Kesmeler aktif
intcon.inte=1;           // Harici kesme aktif
intcon.t0ie=1;             // Timer kesmesi aktif
TMR0=0;

Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);

while(1)
{
floattostr(say,tcc);
Lcd_Out(1,1,tcc);
floattostr(sonuc,txt);
Lcd_Out(2,1,txt);
}
}


Öncelikle teşekkür ederim ilgilendiğiniz için.
Programı şu şekilde sizin yolladığınız kaynaklara göre düzenlemeye çalıştım. Buton için donanımsal olarak ark önlemesini de gerçekleştirdim. Ancak iki kesme programını bu şekilde kullanınca da sonuca varamadım. Kesmelerle ilgili bir sıkıntı var. Gözlemlediğiniz bir hata var mıdır acaba programda


NOT:
16F887 kullanıyorum.
Timer'ı yaklaşık olarak 1 saniyeye ayarladım. Program çalışsa tam hassa olarak ayarlayacağım.

selimkoc

Her şey çok karışık. Kod yazarken düzen çok önemli.

Kodları önce düzenle. Bunu için önce C kurallarına göre küme parantezlerini (blokları) düzenle.