RB0 kesmesi ile timer1'i tetiklemek?

Başlatan ssx, 25 Şubat 2009, 23:02:50

ssx

Selamlar...

Yapmak istediğim şey pic'in RB0 pininde bir değişiklik olduğu zaman 100ms süre ile A1 pinini aktif yapıp sonra kapatmak. 100 ms'lik süreyi timer1 zamanlayıcısını kullanarak yapmam gerek. Çünkü main() fonksiyonu içerisinde delay_ms ve delay_us fonksiyonlarını var (dolayısıyla herhangi bir kesme içinde kullanamıyorum). Yani RB0 pininde değişiklik olduğu zaman timer_1 tetiklenecek, bunun dışında kapalı konumda olacak.
Fakat yazdığım programda RA1'e bağlı olan led sürekli yanıyor (RB0'da değişiklik olmasına rağmen). Bir türlü çözemedim.
#include <16F628A.h>
#fuses NOWDT,INTRC_IO,NOPUT,NOBROWNOUT,NOMCLR,NOLVP,NOCPD
#use delay(clock=4000000)
#use fast_io(b)
#int_ext
void ext_isr(){
   output_high(pin_a1);
   set_timer1(15536);
   enable_interrupts(int_timer1); 
}

#int_timer1
void timer1_isr()
{
    output_low(pin_a1);
    disable_interrupts(int_timer1);
}


void main()
{
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_ccp1(CCP_PWM);
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_2);
   setup_timer_2(T2_DIV_BY_1,27,1);
   ext_int_edge(H_TO_L);
   enable_interrupts(int_ext);
   enable_interrupts(GLOBAL);
   disable_interrupts(int_timer1);
   set_pwm1_duty(14);
   set_tris_a(0x00);
   set_tris_b(0x11);
   output_a(0x00);
   
      while(1){
         set_pwm1_duty(14);
         delay_us(999);
         set_pwm1_duty(0);
         delay_ms(10);
      }
}



PIC 16f628A
Dahili osilatörü kullanıyorum.

Yardımlarınız bekliyorum.

atila

#use fast_io(a)
bunu da kodlarına ekleyip bi dene.

ssx

Ekledim fakat değişme yok.

Benim tahminim pwm ile timer1'in aynı dahili osilatörü kullanmasından kaynaklanıyo olabileceği.

Yine de teşekkürler cevap için.

aliveli

#int_ext
void ext_isr(){
   output_high(pin_a1);
   set_timer1(15536);
   clear_interrupts(INT_TIMER1); 
   enable_interrupts(int_timer1);
}