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.
şö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
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
}
}
}
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.
Arkın geçmesini bekledikten sonra
yeniden butonun 1 olduğuna bakmak
daha iyi olacaktır diye düşünüyorum.