Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Whıle kontrolu yardım

Başlatan Eyt1, 21 Temmuz 2016, 12:21:59

Eyt1

Merhaba arkadaşlar örneğin ra1 pini lojik 0 lojik 1 oldu döngu içerisinde ledin sadece bir kere yanıp sonmesini nasıl bir mantıkla yapabiliriz.lojik 1 olmasına rağmen led sadece lojik 1 olduğu an yanacak ve sönecek taki bir daha lojik 0 lojik1 olana kadar.

volkanunal

şöyle bir mantık olabilir
if(lojikdurum kontrol edilir)
{
if(leddurumu kontrol edilir yanık değil mi)
ledyanık=0
else
ledyanık=1

}
daha sonra if(ledyanık==1 )
else
sön

böyle bir mantık belki olabilir yine pin change interrupt ile içerisine de yazılabilir diye düşünüyorum
Primum nil nocere

Eyt1

Alıntı yapılan: volkanunal - 21 Temmuz 2016, 14:09:34
şöyle bir mantık olabilir
if(lojikdurum kontrol edilir)
{
if(leddurumu kontrol edilir yanık değil mi)
ledyanık=0
else
ledyanık=1

}
daha sonra if(ledyanık==1 )
else
sön

böyle bir mantık belki olabilir yine pin change interrupt ile içerisine de yazılabilir diye düşünüyorum

Mantığı tam anlamadımda aşşağıdaki koda uyarlamak istersek nasıl yapabilirim.

#include <16F876.h>// Kullanılcak denetleyicinin başlık dosyası tanımlanıyor

#include <stdio.h>

// Denetleyici konfigürasyon ayarları

#FUSES HS                       //High Speed

#FUSES NOWDT                    //No Watch Dog Timer

#FUSES NOPUT                    //No Power Up Timer

#FUSES NOPROTECT                //Code not protected from reading

#FUSES NOBROWNOUT               //No brownout reset

#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#FUSES NOCPD                    //No EE protection    

#use delay (clock=20000000) // Gecikme fonksiyonu için kullanılan osilatör frekansı

//------------------------------------------------------------------------------

#define LED_YAK(pin) output_high(pin)

#define LED_SONDUR(pin) output_low(pin) 

#define LED pin_b1

#define BUTTON pin_b0

//------------------------------------------------------------------------------

void main () {

setup_spi(SPI_SS_DISABLED); // SPI birimi devre dışı

setup_timer_1(T1_DISABLED); // Timer1 devre dışı

setup_timer_2(T2_DISABLED,0,1); // Timer2 devre dışı

setup_adc_ports(NO_ANALOGS); // ANALOG girdi 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ışı

while(1){

if (input(BUTTON)==1){ // Butona Basılırsa

LED_YAK(LED); // LED Yak

}

}

}

RaMu

#3
while 1 kısmını şu şekilde değiştirebilirsin:
toggle komutunu kullanman işleri kolaylaştırır,


while(1){

if (input(BUTTON)==1){ // Butona Basılırsa
                                   delay_ms(20);                    //buton arkının geçmesi için bekle
                                     output_toggle(LED); // LED yanıyorsa söndür, led sönükse yak
                                     while ( input(BUTTON)==1 );  //while döngüsü sonunda noktalı virgül kullanılırsa,
//while içindeki şart doğru olduğu müddetçe, while satırında kal, işlemini yapar.
                                   delay_ms(20);                    //buton arkının geçmesi için bekle
                                     }

}


mesaj birleştirme:: 21 Temmuz 2016, 19:09:53

Bu program söylediğinden biraz farklı bir iş yapıyor ama,
istediğin hale çevirmen gayet kolay.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

mehmet

Arkın geçmesini bekledikten sonra
yeniden butonun 1 olduğuna bakmak
daha iyi olacaktır diye düşünüyorum. 
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr