Bir şart gerçekleştiğinde bir komut grubu atlansın yada görmezden gelinsin.

Başlatan Melih1802, 14 Haziran 2014, 13:07:49

Melih1802

#include "C:\Users\melih\Desktop\MD800\MD800.h"


void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);


  set_tris_d(0b11111111);//
  set_tris_a(0x00);
  set_tris_b(0x00);
  set_tris_c(0x00);
    output_a(0x00);
    output_b(0x00);
    output_c(0x00);
     
while(1)
{
  if ((input(pin_d0)==1)&&(input(pin_d1)==1)&&(input(pin_d2)==0)&&(input(pin_d4)==0)&&(input(pin_d5)==0)&&(input(pin_d6)==0)&&(input(pin_d7)==0))
 {
 output_high(pin_b0);
 output_high(pin_b7);
 }
 else
 {
 output_low(pin_b0);
 output_low(pin_b7);
 }
   if ((input(pin_d2)==1)&&(input(pin_d3)==1)&&(input(pin_d0)==0)&&(input(pin_d4)==0)&&(input(pin_d5)==0)&&(input(pin_d6)==0)&&(input(pin_d7)==0))
 {
 output_high(pin_b1);
 output_high(pin_b7);
  }
 else
 {
 output_low(pin_b1);
 output_low(pin_b7);
 }
}
}


#include "C:\Users\melih\Desktop\MD800\MD800.h"


void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);


  set_tris_d(0b11111111);//
  set_tris_a(0x00);
  set_tris_b(0x00);
  set_tris_c(0x00);
    output_a(0x00);
    output_b(0x00);
    output_c(0x00);
     
while(1)
{                                // Alttaki şart gerçekleşmezse b7 çıkışı LOW oluyor.
  if ((input(pin_d0)==1)&&(input(pin_d1)==1)&&(input(pin_d2)==0)&&(input(pin_d4)==0)&&(input(pin_d5)==0)&&(input(pin_d6)==0)&&(input(pin_d7)==0))
{
output_high(pin_b0);
output_high(pin_b7);
}
else
{
output_low(pin_b0);
output_low(pin_b7);
}

                                      // Bu alttaki şart gerçekleştiğinde b7 çıkışı HIGH oluyor

   if ((input(pin_d2)==1)&&(input(pin_d3)==1)&&(input(pin_d0)==0)&&(input(pin_d4)==0)&&(input(pin_d5)==0)&&(input(pin_d6)==0)&&(input(pin_d7)==0))
{
output_high(pin_b1);
output_high(pin_b7);
  }
else
{
output_low(pin_b1);
output_low(pin_b7);
}
}
}



Yukarıda görüldüğü gibi bir çıkışı 2 kere kullanıyorum. Bu sebeple çıkış bir komut satırında HIGH bir alttaki komut satırında LOW oluyor.

Bu sebeplede led yanıp yanıp sönüyor. Kararlı durmuyor.

5 günde öğrendiğimle çözüm;

b7 çıkışını 1 kere kullanmak,

Bir şart gerçekleştiğinde o satır diğer satırların yada b7 çıkışının atlanmasını sağlayacak.




Bir çözüm öneriniz var' mı. Bunu nasıl çözebilirim.

Bayramsumbul

Bir Elektronik Meraklısının Serüveni...

elektronart

ortak kullanılan b7 olduğuna göre
b7 yi değişken olarak tanımlayım
output_low(pin_b7) yerine b7 = LOW;  output_high(pin_b7) yerine b7 = HIGH; yazın. Sonra da tüm bu döngünün altına
if(b7) output_high(pin_b7)
else output_low(pin_b7)

böylece b7 döngü içinde ne kadar değişirse değişsin döngüden çıktığındaki son hali pine yansıtılacaktır.
Açık Elektronik

Melih1802


Bayramsumbul

Yani şöyle bir kod gerekiyor;
switch (PORTD)
{
case 3:PORTB|=9;break;
case 12:PORTB|=10;break;
default:PORTB&=!11;
}
Gibi ama ccs c de galiba İşlemci registerlari tanimli değil.
Bir Elektronik Meraklısının Serüveni...

elektronart

Alıntı yapılan: Melih1802 - 14 Haziran 2014, 17:26:58
Denerim. Fakat yinede her tarama periyodunda işlem yapmayacakmı.
Ben iki adet if ve else olduğu için ikisini de kullanacağınızı düşünmüştüm. Herhangi bir durum geri kalan 3 durumu da devre dışı bıraksın istiyorsanız bayramsumbul ün önerdiği yöntem sizin için çözüm olacaktır. Pin girişlerinize neyin bağlı olduğunu bilmiyorum ama if lerin içinde çok fazla kontrol var, şu haliyle her iki else durumunun çakışması kuvvetle muhtemel, ve else'ler için yaptığınız işler farklı. switch mantığında bu iki else'i nasıl yerleştirirsiniz bilemiyorum.
Açık Elektronik

Melih1802

Alıntı yapılan: Bayramsumbul - 14 Haziran 2014, 17:52:28
Yani şöyle bir kod gerekiyor;
switch (PORTD)
{
case 3:PORTB|=9;break;
case 12:PORTB|=10;break;
default:PORTB&=!11;
}
Gibi ama ccs c de galiba İşlemci registerlari tanimli değil.

Alıntı yapılan: Bayramsumbul - 14 Haziran 2014, 17:52:28
Yani şöyle bir kod gerekiyor;
switch (PORTD)
{
case 3:PORTB|=9;break;
case 12:PORTB|=10;break;
default:PORTB&=!11;
}
Gibi ama ccs c de galiba İşlemci registerlari tanimli değil.


Komutlara yabancıyım bunları yukarıdaki programa nasıl entegre edebilirim.

emre salman

if(porta.1==1)
{
emre=1;
}
if(emre==0)
{
porta=255;
}
böyle olabilir kendin biraz daha geliştirebilrsin