Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

yazılım kuralları ve argonitma

Başlatan malitronık, 07 Ocak 2016, 23:22:18

malitronık

slm  ccs c  led saat rf araba  vb gibi uygulamalar yapıyorum ama yazdığım yazılımlarda bir düzen görmuyorum 1hafta sonra baksam programa ben burda ne yapmısım derim...  argonitma sorunum var sanırım  nasıl çözerim hangi yolları izlemeliyim bir örnek 16f628a da kara şimsek yaptım calışıyor.. mesala boyle programlama doğrumudur..    daha kısa ve doğru  yöntemi zaman almadan nasıl yapabilirim yardımcı olursanız sevinirim..


#include <16f628a.h>
#fuses     NOWDT,NOPROTECT,INTRC_IO,NOMCLR,NOBROWNOUT
#use       delay (internal=4mhz)
int8 s1,s2;

void main (void)
{
#asm
MOVLW 0x07
MOVWF 0x1f
bsf   0x03.5
movlw 0x00
movwf 0x85
movwf 0x86
bcf   0x03.5
clrf  0x05
clrf  0x06
movlw 0xff
movwf 0x05
movwf 0x06
#endasm
delay_ms(100);

while(true){

output_b(0x00);
output_a(0x00);
s1=0x80;
output_a(s1);
delay_ms(50);
s2=0x80;
while(true){
basla:
s1=s1>>1;
output_a(s1);
if(s1!=0x20)
delay_ms(50);
while(s1==0x01){
output_a(0);
output_b(s2);
delay_ms(50);
while(true){
s2=s2>>1;
output_b(s2);
delay_ms(50);
while(s2==0x01){
while(true){
s2=s2<<1;
output_b(s2);
delay_ms(50);
while(s2==0x80){
s1=0x01;
output_b(0);
output_a(s1);
delay_ms(50);
while(true){
s1=s1<<1;
output_a(s1);
if(s1!=0x20)
delay_ms(50);
if(s1==0x80)
goto basla;
}
}
}
}
}
}
}
}
}

t2

#1
CCS hazır örneklerine bakabilirsiniz. Bu örnekler girintili çıkıntılı yapılmış, güzel görünür. içinde açıklama vardır. istediğiniz uzunlukta açıklama yazılır. hatta foruma eklerken bile güzel görünür. Bakan kişi yardım etmek ister. 

#include <16F887.h> 
//#FUSES NOWDT, HS, NOMCLR, NOBROWNOUT, NOIESO, NOLVP 
#use delay(clock=20000000)   // kristal belirleniyor


// açıklama 001. buradan program başlamış.
void main() { 


   while (TRUE) {    // ana döngü. argonitma :)
     OUTPUT_B(0xff); 
     delay_ms(100); 

     OUTPUT_B(0x00);; 
     delay_ms(100); 

   } 
}



vitruvius

Öncelikle kendi fonksiyonlarınızı yazın. Bunlar için bir .h ve .c dosyası oluşturun. Projenize bu dosyaları ekleyin. Fonksiyonları tanımlamadan da yorumlarla fonksiyonların ne iş yaptığını, giriş ve çıkış parametrelerini vs yazın. Kodlarda da gerekli gördüğünüz yerde yan kısmına yorum yazın. Kodlamanızda da belli kurallar olsun. Bir değişkene baktığınızda bunun integer mı, string mi, global bir değişken mi olup olmadığını anlayabilin.

Tabi en önemlisi döküman hazırlamak. Projenizi açıklayacak birkaç sayfa üşenmeden yazı yazın.

quarko

#3
Bence yazılım kurallarından önce yazım kuralları konusunda kendinizi geliştirmelisiniz. Bu sayede projeniz hakkında hazırladığınız dökümanları kendinizde anlayabilirsiniz. Bir de argonitma diye bir kelime yok. Algoritma olmasın !
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

CaFFeiNe

karaşimşek ASM siz olmaz mıydı?

pea

Ben kaç tane iç içe while(true) olduğunu sayamadım.

Assembly ile devam etmek istiyorsanız, assembly'den devam edin.
C öğrenmek istiyorsanız, bir C kitabı edinin.

Hadi dil işini geçtim, okuyun. Kulaktan dolma sentaks ve "argonitma"larla olmaz bu iş.

malitronık

Assembly ile başladım css c ye yeni geçtim css c  kitabım var okudum. berki yeni olduğum için derdimi anlatamadım  cok sayıda iç içe while yapmak demekki yanlış bir yöntem

mehmet

/*****Include******************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <xc.h>

/*****CONFIG*******************************************************************/
#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config BOREN = ON
#pragma config LVP = OFF
#pragma config CPD = ON
#pragma config CP = ON

//Delay fonksiyonu için kristal degeri
#define _XTAL_FREQ  4000000

/*********Port Hazirla*********************************************************/
void mcuInit(void)
{
    CMCON = 0x07;   // Komparatorler kapalı
    PORTB = 0x00;   
    PORTA = 0x00;
    TRISB = 0x00;   // PortB cikis
    TRISA = 0xFF;   // PortA giris
}

/*******Ana Dongu**************************************************************/
void main(void)
{   
    // Lokal tanımlamalar
    uint8_t b;
    uint8_t a;
    
    mcuInit();                  //Portları hazirla
        
    while(1)                    //Sonsuz dongu
    {        
        a = 0b00000111;         //PortB nin ilk hali
        
        // Ileri gidis
        for(b = 0; b < 5; b++)  // 5 kere ileri
        {
            PORTB = a;          // a degislkeni PortB ye 
            a <<= 1;            // a değiskeni bir bit saga
            __delay_ms(200);    // 200mS bekle
        }
        
        // Geri donus
        for(b = 0; b < 5; b++)  // 5 kere geri
        {
            PORTB = a;          // a degislkeni PortB ye 
            a >>= 1;            // a değiskeni bir bit sola
            __delay_ms(200);    // 200mS bekle
        }
    }
}
//--------SON-------------------------------------------------------------------
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

vitruvius

Alıntı yapılan: malitronık - 09 Ocak 2016, 01:03:53
Assembly ile başladım css c ye yeni geçtim css c  kitabım var okudum. berki yeni olduğum için derdimi anlatamadım  cok sayıda iç içe while yapmak demekki yanlış bir yöntem

İç içe while döngüsü yapabilirsin sıkıntı yok. Ancak while, koşulu yanlış oluncaya kadar içindeki işlemleri tekrar tekrar çalıştırır.

int carpim = 2;
while(carpim < 1000)
carpim = 2 * carpim;


carpim değeri 1000'i geçtikten sonra bu while döngüsü bir daha çalıştırılmaz ve program sonraki satırdan işlemeye devam eder.

while(true), while(1) gibi ifadelerin koşulunda bir kıyas olmadığından ve her zaman doğru olduğundan sonsuz döngü oluştururlar. Sizdeki sıkıntı bu. İç içe birçok sonsuz döngü oluşturmuşsunuz. Muhtemelen kopyala-yapıştır hatası.

RaMu

Bol bol kitap okuyun, roman vs. ...
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

swearer

R ve L ile bir sıkıntınız var sanırım. Argonitma değil algoritma, berki değil belki.