16f628de kodların tekrar etmesi

Başlatan chezque, 17 Mayıs 2012, 01:11:13

chezque

isiste simulasyon yaparken virtual terminal üzerinden veri göndermeye çalışıyorum ancak herhangi bir veri gönderdiğim an pic kodu sırayla çalışmaya başlıyor. bunun sebebi nedir acaba?

#include <16F628a.h>

#FUSES NOWDT            //No Watch Dog Timer
#FUSES INTRC_IO          //Internal RC Osc, no CLKOUT
#FUSES NOPUT            //No Power Up Timer
#FUSES PROTECT           //Code protected from reads
#FUSES NOBROWNOUT         //No brownout reset
#FUSES NOMCLR           //Master Clear pin used for I/O
#FUSES NOLVP            //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD            //No EE protection

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
int Send_Bilgi;
void main()
{
   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);
     
   while(TRUE)
   {
   
      Send_Bilgi=getc();
      if(Send_Bilgi=='1');
      {
         output_high(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
         while(Send_Bilgi=='1');
         delay_ms(500);
      }
      if(Send_Bilgi=='2');
      {
         output_low(pin_b3);
         output_high(pin_b4);
         output_low(pin_b5);
         output_high(pin_b6);
         delay_ms(500);
      }
      if(Send_Bilgi=='3');
      {
         output_high(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
         delay_ms(500);
      }
      if(Send_Bilgi=='4');
      {
         output_low(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
         delay_ms(500);
      }
      if(Send_Bilgi=='5');
      {
         output_low(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
         delay_ms(500);
      }
   }

}


kodlar bu şekilde ama anlamadım.

skara1214

bu kodun aynısını başka yerdede sorumuştunuz keşke oradan devam etseydiniz her açılan fazla konu kalabalık yapıyor.
kodu şu şekilde denermisiniz;
#include <16F628a.h>
#FUSES NOWDT,INTRC_IO  
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
char Send_Bilgi;
void main()
{  
   while(TRUE)
   {
   
      Send_Bilgi=getch();
      if(Send_Bilgi=='1');
      {
         output_high(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
         while(Send_Bilgi=='1');
         delay_ms(500);
      }
      else if(Send_Bilgi=='2');
      {
         output_low(pin_b3);
         output_high(pin_b4);
         output_low(pin_b5);
         output_high(pin_b6);
         delay_ms(500);
      }
   else if(Send_Bilgi=='3');
      {
         output_high(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
         delay_ms(500);
      }
     else  if(Send_Bilgi=='4');
      {
         output_low(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
         delay_ms(500);
      }
     else  if(Send_Bilgi=='5');
      {
         output_low(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
         delay_ms(500);
      }
   }

}


eğer rs232 v.s kullanacaksanız dışarıdan kristal takın yeni serilerin iç kristalleri iyi ama bu eski serilerin iç kristalleri sıkıntılı biraz haberleşmede sorun yaratabilir...
Herkes ölür ama herkes gerçekten yaşamaz

chezque

yok hocam olmuyor ya. sanırım ";" dan dolayı hepsini sırayla işliyor ama onu kaldırınca da hiç biri çalışmıyor.

esensoy

send_bilgi de ki değerle ilgili kodu tamamladıktan sonra send_bilgi içinde ki değeri sıfırlamak işe yarayabilir,
aslında buna gerek yok çünkü ilgili kod bittikten sonra klavyeden yeni bir veri gelene kadar getch satırında beklemesi lazım,
En tehlikeli an "zafer" anıdır.

skara1214

#include <16F628a.h>
#FUSES NOWDT,INTRC_IO  
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
char Send_Bilgi;
void main()
{  
   while(TRUE)
   {
   
      Send_Bilgi=getch();
      if(Send_Bilgi=='1')
      {
         output_high(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
      }
      else if(Send_Bilgi=='2')
      {
         output_low(pin_b3);
         output_high(pin_b4);
         output_low(pin_b5);
         output_high(pin_b6);
      }
   else if(Send_Bilgi=='3')
      {
         output_high(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
      }
     else  if(Send_Bilgi=='4');
      {
         output_low(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
         
      }
     else  if(Send_Bilgi=='5')
      {
         output_low(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
      }
   }
}


birde şu şekilde deneyin...
Herkes ölür ama herkes gerçekten yaşamaz

bymrz

#5
#include <16F628a.h>
#FUSES NOWDT,INTRC_IO  
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
char Send_Bilgi;
void main()
{  
   while(TRUE)
   {
   
      Send_Bilgi=getch();
      if(Send_Bilgi=='1')
      {
         output_high(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
      }
      else if(Send_Bilgi=='2')
      {
         output_low(pin_b3);
         output_high(pin_b4);
         output_low(pin_b5);
         output_high(pin_b6);
      }
   else if(Send_Bilgi=='3')
      {
         output_high(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
      }
     else  if(Send_Bilgi=='4')
      {
         output_low(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
         
      }
     else  if(Send_Bilgi=='5')
      {
         output_low(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
      }
   }
}

taso

biraz daha sadeleştirelim mi?

while (true){



switch(getch()){

case '1':

         output_high(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
break;

case '2':

         output_low(pin_b3);
         output_high(pin_b4);
         output_low(pin_b5);
         output_high(pin_b6);
break;

case '3':
         output_high(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
break;

case '4':
         output_low(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
break;

case '5':
         output_low(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
break;

default:
int i;
while (!kbhit()){
         output_bit(pin_b3,i&1);
         output_bit(pin_b4,i&2);
         output_bit(pin_b5,i&4);
         output_bit(pin_b6,i&8);
i++;

}

break;
}




}

chezque

Alıntı yapılan: taso - 17 Mayıs 2012, 18:45:00
biraz daha sadeleştirelim mi?

while (true){



switch(getch()){

case '1':

         output_high(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
break;

case '2':

         output_low(pin_b3);
         output_high(pin_b4);
         output_low(pin_b5);
         output_high(pin_b6);
break;

case '3':
         output_high(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
break;

case '4':
         output_low(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
break;

case '5':
         output_low(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
break;

default:
int i;
while (!kbhit()){
         output_bit(pin_b3,i&1);
         output_bit(pin_b4,i&2);
         output_bit(pin_b5,i&4);
         output_bit(pin_b6,i&8);
i++;

}

break;
}




}


hocam dediğin şekilde yaptım bu seferde çalışıyor ama istediğim şekilde değil. yani terminalden 1e bastığımda pin3 ve pin6 devreye giriyor. diğerlerinde de aynı hatalar oluyor. bunun sebebi nedir ki?

taso

#8
birde sunu sorayım ascii mi yolluyorsun hex mi

cunku   '1' != 1

söyle deneyelim bide


int deger;
main(){

while (true){

if(kbhit){deger=getc();}

switch(deger){

case '1':

         output_high(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
break;

case '2':

         output_low(pin_b3);
         output_high(pin_b4);
         output_low(pin_b5);
         output_high(pin_b6);
break;

case '3':
         output_high(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
break;

case '4':
         output_low(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
break;

case '5':
         output_low(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
break;




}

}

chezque

kbhit için undefined identifier uyarısı verdi şimdide.

taso


chezque

Alıntı yapılan: taso - 17 Mayıs 2012, 20:02:24
kbhit() olcak pardon

bu arada ben klavyeden yollamıcam yalnız veriyi. c#ta sesli olarak iletiyorum. seri porta bunu yolluyor. onda sıkıntı yok. sanırım dediğini kbhit() klavyeden veri girişi olduğunda geçerli?

taso

rs232 den herhangibir bilgi geldimi demek aslında

x=getch(); koyarsan 1 yolladın x=1 tamam 2 ci turda x=0; olacak onu onleyip sadece haberleşme oldugunda x değişsin diye var

chezque

Alıntı yapılan: taso - 17 Mayıs 2012, 20:31:29
rs232 den herhangibir bilgi geldimi demek aslında

x=getch(); koyarsan 1 yolladın x=1 tamam 2 ci turda x=0; olacak onu onleyip sadece haberleşme oldugunda x değişsin diye var

anladım ama yine olmadı. simulasyonda hiç hareket yok yani.

taso

simulasyonda hiç hareket yoku tanımlar mısın ?