Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

CCS Goto komutu

Başlatan bulut_01, 02 Nisan 2012, 20:04:51

bulut_01

iyi aksamlar bir sorum olcaktı. Goto komutu yerine ccs hangi komutu kullanabilirim aynı yere dallanması sağlarım.

#include <12F675.h>
#FUSES noWDT               
#FUSES PUT
#FUSES INTRC_IO    
#FUSES NOBROWNOUT 
#fuses NOMCLR
#use delay(INT=4000000)
#define GPIO.0  PIN_A0
#define GPIO.1  PIN_A1
#define GPIO.2  PIN_A2
#define GPIO.3  PIN_A3
#define GPIO.4  PIN_A4
#define GPIO.5  PIN_A5
int1 x=0 ;
int16 i=0 ;
void main()
{
   setup_adc_ports( NO_ANALOGS );
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_adc(ADC_OFF);
   set_tris_a(0b00000001) ;
   output_a(0x00) ;
   write_eeprom(0,x) ;
   IF (x==0)
   GOTO cc;   -------------------------------
   ELSE                                             
   output_high(pin_a2);                   
   WHILE(1)                                      
   {                                                     
      IF (input(pin_a0))                          
      {                                                     
         delay_ms(15);        ===> buraya goto komutundan hariç hangi 
         IF (x==0)               komutu kullanırsam aynı yera dallanır.
         x++ ;                                       
         ELSE                                      
         x-- ;                                     
         write_eeprom(0,x);            
         delay_ms(10);                   
         WHILE (input(pin_a0))        
         x=read_eeprom(0);             
         delay_ms(15);                       
         output_bit(pin_a1,x);               
         cc:      ---------------------------
         WHILE(i<2000)
         {
            FOR (i=400; i<2000;i++)
            {
               output_high(pin_a2) ;
               delay_us(i) ;
               output_low(pin_a2) ;
               delay_us(2000-i) ;
               output_high(pin_a2) ;
            }
         }
      }
   }
}
YENİLMEZ..

cemilkendir

 ??? bu program ne iş yapıyor anlamadım ve neden goto kullanmak istemiyorsun eğer kullanmamam şart ise programı daha farklı yazman gerekir

bulut_01

Alıntı yapılan: cemilkendir - 02 Nisan 2012, 20:12:26
??? bu program ne iş yapıyor anlamadım ve neden goto kullanmak istemiyorsun eğer kullanmamam şart ise programı daha farklı yazman gerekir

bu programı ben el matkapı ıcın yapmısdım 4.8v redukturlu olanlar ıcın elektrıklı tornavida bu programda bır buton ıle 675 eepromuna verı yazarak matkapın dugmesıne basarak motor enerjı geldıgınde devreye önce enerjı gelıyo secdıgımız 2 tane mode var 1cisi motor normal sekılde suruyor hard driver olrak 2ci mode ise soft start pwm ile 0 dan 1800 d/dk kadar 4.5 sn gibi süreyle ulasarak soft start kalkış sağlıyor amaç matkap kalkıs yaparken soft şekilde kalkıs yapması diğer modda zaten normal kalkış için.
YENİLMEZ..

Okan AKÇA

bugüne cok büyük projelere imza attım hic bir zaman goto komutunu kullanmadım goto programın cıkılmaz oldugu yerlerde kullanılabilir. gercek c# ler goto program akışını kullanmayı tercih etmezler

bulut_01

Alıntı yapılan: cyclone - 02 Nisan 2012, 20:20:51
bugüne cok büyük projelere imza attım hic bir zaman goto komutunu kullanmadım goto programın cıkılmaz oldugu yerlerde kullanılabilir. gercek c# ler goto program akışını kullanmayı tercih etmezler

ozaman bellirtiğim yerdeki goto komutu yerine nasıl bir algoritma üretebilirsin ?
YENİLMEZ..

cemilkendir

bu program çalışıyormu şuan

bulut_01

proteusda çalısıyo gercekde deneyemedım pic portuna 5v vereceğime 12v verdım pic uçtu  ;D şuandakı 12 ve 16 seri picler piyasadakı orj gıbı gelmıyolar çok narinler benım durumum farklı kulanıcı hatası ama gercekdede çalışır sanırım.
YENİLMEZ..

Okan AKÇA


bulut_01

YENİLMEZ..

cemilkendir

Alıntı yapılan: bulut_01 - 02 Nisan 2012, 20:04:51
iyi aksamlar bir sorum olcaktı. Goto komutu yerine ccs hangi komutu kullanabilirim aynı yere dallanması sağlarım.

#include <12F675.h>
#FUSES noWDT               
#FUSES PUT
#FUSES INTRC_IO    
#FUSES NOBROWNOUT 
#fuses NOMCLR
#use delay(INT=4000000)
#define GPIO.0  PIN_A0
#define GPIO.1  PIN_A1
#define GPIO.2  PIN_A2
#define GPIO.3  PIN_A3
#define GPIO.4  PIN_A4
#define GPIO.5  PIN_A5
int1 x=0 ; // x in başlangıç değeri 0
int16 i=0 ;
void main()
{
   setup_adc_ports( NO_ANALOGS );
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_adc(ADC_OFF);
   set_tris_a(0b00000001) ;
   output_a(0x00) ;
   write_eeprom(0,x) ;
   IF (x==0)  // burada x e bakmışsın 0 mı diye ama zaten x her halde 0 olacaktır çünkü x e sıfır atamışsın
   GOTO cc;   -------------------------------
   ELSE                                             
   output_high(pin_a2);                   
   WHILE(1)                                      
   {                                                     
      IF (input(pin_a0))                          
      {                                                     
         delay_ms(15);     
         IF (x==0)               
         x++ ;                                       
         ELSE                                      
         x-- ;                                     
         write_eeprom(0,x);     /// burada x i epproma yazmışsın       
         delay_ms(10);                   
         WHILE (input(pin_a0))  /// butona basılı butulduğu sürece x ye eppromdaki değeri atamışsın okumuşsun       
         x=read_eeprom(0);    // burada neden eppromdan okuttun tekrar  x i . zaten  x değişkenin hiç demişmediki
         delay_ms(15);                       
         output_bit(pin_a1,x);               
         cc:      ---------------------------
         WHILE(i<2000)///buradaki  while gerek yok zaten for döngüsü bittiğinde i 2000 den büyük olacaktır.
         {
            FOR (i=400; i<2000;i++)
            {
               output_high(pin_a2) ;
               delay_us(i) ;
               output_low(pin_a2) ;
               delay_us(2000-i) ;
               output_high(pin_a2) ;
            }
         }
      }
   }
}


kafam karıştı gerçekten ama işini görüyorsa sorun yok
gerçi bende hiç tavsiye etmem böyle program yazmanı

bulut_01

#10
while döngüsünü silerseniz program her oraya dallandıgında pwm resetleyip 0 baslayıp devam ediyor oda dengesız calısmasını saglar  programın şu goto işine nasıl çağre bulurum ?
YENİLMEZ..

cemilkendir

#11
#include <12F675.h>
#FUSES noWDT               
#FUSES PUT
#FUSES INTRC_IO    
#FUSES NOBROWNOUT 
#fuses NOMCLR
#use delay(INT=4000000)
#define GPIO.0  PIN_A0
#define GPIO.1  PIN_A1
#define GPIO.2  PIN_A2
#define GPIO.3  PIN_A3
#define GPIO.4  PIN_A4
#define GPIO.5  PIN_A5
int1 x=0 ;

void soft_basla()
{
int16 i=0;
    for (i=400; i<2000;i++)
    {
      output_high(pin_a2) ;
      delay_us(i) ;
      output_low(pin_a2) ;
      delay_us(2000-i) ;
      output_high(pin_a2) ;
     }
}

void main()
{
   setup_adc_ports( NO_ANALOGS );
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_adc(ADC_OFF);
   set_tris_a(0b00000001) ;
   output_a(0x00) ;
   x=read_eeprom(0) ;
   if (x==0)
   soft_basla();
   output_high(pin_a2);                   
   while(1)                                      
   {                                                     
      if (input(pin_a0))                          
      {                                                     
         while (input(pin_a0));
         x=~x;                           
         write_eeprom(0,x);            
         output_bit(pin_a1,x);               
      }
   }
}


bak bakalım olmuşmu

bulut_01

olmamış. butonla tetik verdiğim zaman eeproma 0 veya 1 yazması lazım her severınde senınkınde sadece 0 olarak kalıyor eeprom verısı olrak onundan dolayıda devre amacı dısında calısıyor .
YENİLMEZ..

cemilkendir


bulut_01

void soft_basla() burda () işaret sonsuz döngü mü oluyor diğeri ise x=~x; burdakı komutta her tetik geldiğinde x değişkenini tersliyor bu code çalıyor ve daha kısa ben ccs c yenıyım kendımı gelıstıyorum.
YENİLMEZ..