Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: ovaliiismail - 03 Mart 2018, 21:16:42

Başlık: Timer 1 Kesmesine Girmeme Sorunu
Gönderen: ovaliiismail - 03 Mart 2018, 21:16:42
#include <16f877.h>

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NODEBUG,NOCPD

#use delay(clock=4000000)

#use fast_io(b)

#define use_portb_lcd TRUE

#include <lcd.c>

#byte portd=0x08

const int digit[]={1,2,3,0,4,5,6,0,7,8,9,0,0xF,0,0xF,0};

int i;

#INT_TIMER1
void timer1_kesmesi()
{
   set_timer1(65535);
   i=digit[portd >> 4];
   printf(lcd_putc,"\f%d",i);
   delay_ms(300);
}

void main()
{
   setup_psp(PSP_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_ccp1(CCP_OFF);
   setup_ccp2(CCP_OFF);
   
   set_tris_b(0x00);
   set_tris_c(0x01);
   set_tris_d(0xF0);
   
   output_b(0x00);
   
   lcd_init();
   
   setup_timer_1(T1_EXTERNAL_SYNC | T1_DIV_BY_1);
   set_timer1(65535);
   
   enable_interrupts(int_timer1);
   enable_interrupts(GLOBAL);
   
   while(1)
   {
     
   }
   
}


Arkadaşlar amacım keypad'den sayı alıp lcd'de yazdırmak.Kesme kullanmadığımda bir sorun olmuyor çalışıyor ama kesme kullandığımda ilk sayıya bastığımda göstermiyor ikinci de başlıyor göstermeye.Yardımcı olur musunuz?
Başlık: Ynt: Timer 1 Kesmesine Girmeme Sorunu
Gönderen: selimkoc - 03 Mart 2018, 21:37:42
https://elektrokod.wordpress.com/2014/05/14/4x4-keypad-tus-takimi-tasarimi/ (https://elektrokod.wordpress.com/2014/05/14/4x4-keypad-tus-takimi-tasarimi/)

PORTB'nin değişik kesmesini kullan. Yukarıdaki linkte yaptığım çalışma var. İnceleyiniz.
Başlık: Ynt: Timer 1 Kesmesine Girmeme Sorunu
Gönderen: ovaliiismail - 03 Mart 2018, 21:41:37
Teşekkür ederim.Peki timer1 kesmesinde niye böyle bir sorun yapıyor fikriniz var mı?
Başlık: Ynt: Timer 1 Kesmesine Girmeme Sorunu
Gönderen: tekosis - 03 Mart 2018, 22:27:29
timer1 içine girildiğinde bir register bitini set edin, main programda bu biti kontrol edin. eğer set olmuşsa kesme gelmiş demektir. bu biti bir if ile kontrol edip kesme oluştuğunu anladığınızda
 
i=digit[portd >> 4];   
printf(lcd_putc,"\f%d",i);   
delay_ms(300);

kodunu başka bir alt fonksiyonda veya main içinde çalıştırıp dener misiniz? Kesmelerin içinde delay, printf gibi fonksiyonları kullanmamaya gayret edin.
Başlık: Ynt: Timer 1 Kesmesine Girmeme Sorunu
Gönderen: ovaliiismail - 03 Mart 2018, 22:31:33
Teşekkür ederim hocam.Kontrol biti kullandım ve ilk basışta kesmeye girmiyor.Main de yazınca düzgün çalışıyor.
Başlık: Ynt: Timer 1 Kesmesine Girmeme Sorunu
Gönderen: fide - 04 Mart 2018, 09:06:42
Set_timer1(65535) neden kullandığını anlamadım.
Tuş algılama için ext int yada port change interrupt kullanılır. Hatta port change interrupt daha mantıklım Anladığım kadarıyla 4 butonun var. Tuşa basma süresini almak istersen başka.