döngüden çıkma sorunu

Başlatan satilla, 08 Aralık 2010, 14:45:19

satilla

#include <pic.h>
#include "delay.h"
unsigned char i,led=1;

void main(){
PORTA=0;
PORTB=0;
TRISA=0;
TRISB=0;
CMCON=0;

while(1){
for(i=0;i<1;i++){
PORTB=255;
DelayMs(200);
PORTB=0;
DelayMs(200);
}

i=0;
for(i=0;i<7;i++){
led=PORTB;
led=led<<1;

}

}
}


ilk for döngüsünden 2 defa portb high oldugunda cıkması gerekmiyormu?
bir türlü cıkmıyor

JKramer

İki defa olması için i<2 olması gerekiyor. Şu haliyle i=0 iken döngüyü bitirir, i=1 olur, şart i<1  olduğundan tekrar döngüye girmez.

satilla

sayıya soru sorarken dikkat etmemişim kaç defa tekrar ettigi önemli değildi döngüden cıkmamasıydı bununda nedeni ikinci döngüde gecikme koymammış  ve daha bir sürü hata buldum

ilginize teşekkür ederim

bu arada en büyük bi zahmet şu kodada bakarmısın hocam

sorun 5 sn civarında çalışıyor daha sonra, kod döngüden cıkıyor sanırım çünkü pic çalışmayı durduruyor
#include <pic.h>
#include "delay.h"



char ara;
unsigned char a;
unsigned char i;
unsigned char say;
unsigned char tarama[]={0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,0b00100000,0b01000000,0b10000000};
const unsigned char A[]={0b00100000,0b01001000,0b10001000,0b11111000,0b10001000,0b10001000,0b10001000,0b10001000};

bir(){
RA3=1;DelayUs(10);
RA1=1;DelayUs(10);RA1=0;DelayUs(10);

}
sifir(){
RA3=0;DelayUs(10);
RA1=1;DelayUs(10);RA1=0;DelayUs(10);
}


void main(void){
TRISB=0x00;
TRISA=0x00;
PORTB=0x00;
PORTA=0x00;
CMCON=0X07;

RA2=1;
DelayMs(250);DelayMs(250);


for(;;){



for(say=0;say<8;say++){
PORTB=tarama[say];
DelayMs(1);

if(say==0){
bir();
bir();
bir();
bir();
sifir();
sifir();
sifir();
sifir();


}


if(say==1){
bir();
sifir();
sifir();
sifir();
bir();
sifir();
sifir();
sifir();


}

if(say==2){
bir();
sifir();
sifir();
sifir();
bir();
sifir();
sifir();
sifir();

}

if(say==3){
bir();
sifir();
sifir();
bir();
sifir();
sifir();
sifir();
sifir();


}

if(say==4){
bir();
bir();
bir();
bir();
sifir();
sifir();
sifir();
sifir();


}
if(say==5){
bir();
sifir();
sifir();
bir();
sifir();
sifir();
sifir();
sifir();



}

if(say==6){
bir();
sifir();
sifir();
sifir();
bir();
sifir();
sifir();
sifir();

}
if(say==7){
bir();
bir();
bir();
bir();
sifir();
sifir();
sifir();
sifir();



}




RA0=1;DelayUs(10);RA0=0; //acıklama
RA2=0;DelayUs(10);RA2=1;



}
}
}

JKramer

Derleyici olmadığından deneyemiyorum ama görünürde bir sorun yok gibi. Yalnız 10 us'lik tarama işlemini nerede kullanıyorsunuz?

satilla

#4
Alıntı yapılan: JKramer - 08 Aralık 2010, 15:20:15
Derleyici olmadığından deneyemiyorum ama görünürde bir sorun yok gibi. Yalnız 10 us'lik tarama işlemini nerede kullanıyorsunuz?

shift register için kullanıyorum 10uslik pulsları 74hc595


peki bu kodda en aşaüıdaki while(RA3); neden işleme alınmıyor olabilir?
#include <pic.h>
#include "delay.h"
unsigned char i,led=1;
unsigned char dizi[]={0b00000001,0b00000011,0b00000111,0b00001111,0b00011111,0b00111111,0b01111111,0b11111111};
void main(){
PORTA=0;
PORTB=0;
TRISA=0b00001000;
TRISB=0;
CMCON=0;

while(1){
for(i=0;i<2;i++){
PORTB=255;
DelayMs(200);
PORTB=0;
DelayMs(200);
}

for(i=0;i<9;i++){
DelayMs(100);
PORTB=led;
led=led<<1;
}

DelayMs(100);
led=1;
RA2=1;
DelayMs(1);

while(RA3);

for(i=0;i<7;i++){
DelayMs(100);
PORTB=dizi[i];
}




}
}