16f877 ile iki timer kullanımı

Başlatan zafermuh, 26 Temmuz 2016, 10:31:11

zafermuh

merhaba arkadaşlar, ne zamandır pic programlama üzerinde çalışmadığım için unutmuşum. bir çalışma yapıyorum. önce timer1 kesmesini açıp 3 ms pulse çıkışı veriyorum. ardından timer1'i kapatıp timer0'ı açıyorum ve yine 3 ms başka pinden pulse çıkışı veriyorum. ardından bu pulse de kapatıp timer0'da 30 ms bekleyip tekrar timer1'i aktif ediyorum. proteusta denedim timer1 düzgün çalışıyor görünüyor ama timer1 düzgün görünmüyor. kodlar aşağıda sorun ne olabilir öneriniz var mı?

#include <16F877A.h>
#FUSES XT,NOWDT,NOPUT,PROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG
#use delay(clock=4000000)

int i=0,izin=0;

#int_timer1
void timer1_kesme()
{
disable_interrupts(int_timer1);
set_timer1(65160);
output_low(pin_b6);
izin=1;
}

#int_timer0
void timer0_kesme()
{
i++;
set_timer0(161);
if(i==1)
{
output_low(pin_b7);
}
if(i==9)
{
i=0;
izin=0;
}
}


void main()
{
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);
   
   setup_adc(adc_clock_div_32);
   setup_adc_ports(ALL_ANALOG);
   
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_32);
   set_timer0(161);
   
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
   set_timer0(65160);
   
   enable_interrupts(GLOBAL);
   
   while(true)
   {
   
   if(izin==0)
   {
   output_high(pin_b6);
   enable_interrupts(int_timer1);
   while(input(pin_b6)==1);
   }
   
   if(izin==1)
   {
   output_high(pin_b7);
   enable_interrupts(int_timer0);
   while(input(pin_b7)==1);
   izin=2;
   }
   
   }
}

ziyaretci

while(input(pin_b7)==1);  diye bir kullanım var mı?
While(input(pin_xx)); diye kullanın.

Tekrar deneyip geri bildirim yaparsınız.


Okan AKÇA

Dediklerimizi bir tane timer yaparsınız onu ac bunu kapat doğru değil kaldiki bunu ccs ile yapıyorsunuz.

mehmet

Anladığım kadarıyla olay 3mS. üzerine kurulu. Herhangi
bir timer ile 1mS. kesme kurulur, kesme içerisinde bir değişken
artırılır. Bu değişken 3 olunca bir işlem, 30 olunca başka bir işlem
yaptırılabilir. İşlem içerisinde timer durdurulur, işlem sonunda da
değişken sıfırlanır...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

zafermuh

arkadaşlar cevaplarınız içi çok teşekkür ederim. Dediğiniz şekilde yaptım ve çalıştırdım. 3ms ayarlı tek timer kullandım ve i adında bir değişkenle i=1 ise B0 pinini aç i=2 ise B0 kapat B1 aç i=3 ise B1 kapat şeklinde yaptım. Ne zamandır yazılımla uğraşmayınca unutmuşum :)