Output_toggle Uygulamasında Hata Nerede???

Başlatan rkinaci, 24 Aralık 2009, 23:24:38

rkinaci

Arkadaşlar aşağıdaki kod ile output toggle deniyorum ama bir türlü istediğim sonucu alamadım proteus ile. Ya 2 kere tuşa basınca led yanıyor ya da 2 kere bastıktan sonra sönüyor. İşin ilginci bunları aynı peryotta tekrarlamıyor yani bazen 2 kere de bazen 1 kerede. Devreyi yapıp deneme şansım olmadı acaba proteusla ilgili mi yoksa yazdığım kodlarda bir yanlışlık mı yapıyorum. Başka girişler içinde denedim sonuç alamadım. Hata nerede???

#include <16f877a.h>
#fuses XT,NOWDT,NOPUT,NODEBUG,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD
#use fast_io(a)
#use fast_io(b)
#use fast_io(e)
#use delay(clock=4000000)

#define lambaBtn     pin_b0
#define yukariBtn    pin_b1
#define asagiBtn     pin_b2
#define muslukBtn    pin_b3
#define oneBtn       pin_b4
#define arkayaBtn    pin_b5

#define lambaCikis   pin_a0
#define yukariCikis  pin_a1
#define adagiCikis   pin_a2
#define muslukCikis   pin_a3
#define oneCikis     pin_a4
#define arkayaCikis  pin_a5

void main()
   {
      setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
   
   set_tris_a(0x00);
   set_tris_b(0xFF);
   set_tris_e(0x00);
   
   output_a(0x00);
   output_e(0x00);
   
   while(1)
      {
//************************************   lamba yakma    *******************************************************         
         if ((input(lambaBtn))&&(!input(lambaCikis)))
            {
             delay_ms(20);
             output_high(lambaCikis);
            }
         else
            {
               output_low(lambaCikis);
            }
         while(input(lambaBtn));

//***********************************   musluk toggle   ************
         
         
         
         if (input(muslukBtn))
            {
               delay_ms(20);
               output_toggle(muslukCikis);
            }
        while (input(muslukBtn));
         
         
      }
   }
Ne kadar bilirsen bil, söylediklerin karşındakinin anladığı kadardır!

necati

#include <16f877a.h>
#fuses XT,NOWDT,NOPUT,NODEBUG,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD
#use fast_io(a)
#use fast_io(b)
#use fast_io(e)
#use delay(clock=4000000)

#define lambaBtn     pin_b0 //butonlari - ye bagla
#define yukariBtn    pin_b1
#define asagiBtn     pin_b2
#define muslukBtn    pin_b3
#define oneBtn       pin_b4
#define arkayaBtn    pin_b5

#define lambaCikis   pin_a0
#define yukariCikis  pin_a1
#define adagiCikis   pin_a2
#define muslukCikis  pin_a3
#define oneCikis     pin_a4
#define arkayaCikis  pin_a5
int1 pos=0;


void main(){

  port_b_pullups (0b11111111);

  set_tris_a(0x00);
  set_tris_b(0xFF);
  set_tris_e(0x00);
   
  output_a(0x00);
  output_e(0x00);
   
  while(1){
//************************************   lamba yakma    ***************    
        if ((!input(lambaBtn))&&(pos==0)){  
            output_high(lambaCikis);
            delay_ms(500);pos=1;}
             ///////////////////////////////////////////////            
       if ((!input(lambaBtn))&&(pos==1)){
              output_low(lambaCikis);
              delay_ms(500);pos=0;}
//***********************************   musluk toggle   ************          
        if (!input(muslukBtn)){
              output_toggle(muslukCikis);
              delay_ms(500);}    
     }}
/////////////////////////////////////////////////////////////////////////
[email]entegreterbiyecisi@yahoo.com[/email]

aliveli

fast_io(xxx)
set_tris_xxx komutlarını kullanana gerek yok ccs kendi ayarlıyor zaten
kullanma şeklinde yanlış olmuş sanırım a portunu çıkış yapmışsın daha sonra da lambaCikis'dan bilgi okumaya çalışmışsın