bu programdaki mantık hatası nedir?????

Başlatan emocan, 04 Ocak 2007, 23:39:53

emocan




istediğim devrede RD1 e bağlı butona basınca istenen değerine 25 atıycak ve for döngüsüne gircek..bu sırada PORTB=1 ve PORTC=1 olcak ve for döngüsü bitince de tekrar PORTB=0 ve PORTC=0 yani bu portlara bağlı led ler söncek...bu işlemler sırasında sürekli RD1 e bağlı butona basılı tutacaz tabi...
ama olmuyo istediğim gibi..bana yardımcı olurmusunuz...

#include <pic.h>
#include <delay.c>

main(void){
   
   unsigned int ortam=35,istenen;
   TRISB=0;
   TRISC=0;
   TRISD=0xFF;
   
for(;;){
 if(RD1==0){
  istenen=25;

for(ortam=35;ortam<=istenen;ortam--){
                 PORTB=1;
                 PORTC=1;
 
 }

   PORTB=0;
   PORTC=0;        

 }

 else {

    PORTB = 0 ;
    PORTC = 0 ;

    }


   }
 }

emocan

şekilde soldaki kaynak 1V gözüküyo..o aslında 5V buraya koyarken yerlerini değiştirmiştim sadece..ana programda 5V

unerakcay

for(ortam=35;ortam<=istenen;ortam--){
PORTB=1;
PORTC=1;


Pic c hiç kullanmadım ama c den hatırladığım kadarı ile for dongüsü şart doğru oldukça dönen bir döngüdür. burada istenene değeri bir önceki satırda 25 olduğundan istenen > ortam olmaz bundan dolayı döngüye giremiyor olabilrisin. Ama c ile 1 yıl önce uğraşmıştım tam hatırlayamıyorum yinede bir kontrol et derim. Forumda bir çok üstat var sana yardımcı olacaklar ben onlar bakana kadar bir yorum yapayım dedim.
Birde c de komutların işlenme süresini bilmiyorum ama eğer bu program doğru ise sanırım bu durumda da döngü çok hızlı bir şekile bitecek gibi gelior bana eğer öyle olursa da yine ledlerin yandığını göremiyeceğini düşünüyorum.
Mikro C 6.20 MPLAB 7.50 EasyPIC4

vsalma

for(ortam=35;ortam<=istenen;ortam--){  küçük işareti büyük olmalı. Fakat bu halde bile butona basıldığında anında for döngüsüne girip çıkar hala basılı olduğundan tekrar döngüye girer. Bence orada yapmak isteğin olayı while(button == 0 ) şeklinde daha kolay yapabilirsin.  Kolay gelsin.