#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?
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.
Teşekkür ederim.Peki timer1 kesmesinde niye böyle bir sorun yapıyor fikriniz var mı?
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.
Teşekkür ederim hocam.Kontrol biti kullandım ve ilk basışta kesmeye girmiyor.Main de yazınca düzgün çalışıyor.
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.