pcbway

öğrenciye yardım :) basic kodlarını microc kodlarına nasıl çevirebilirim

Başlatan elom, 24 Kasım 2013, 20:25:14

elom

selamınaleykum malum öğrencilik halleri araştırıp bulamama olayımız fazla oluyor :) neyse fazla uzatmadan konuya geçeyim internetten bi devre buldum ama kodları basicde yazılmış bunu micro c ye çevirip anlamam gerekiyor nasıl başarabilirim ? olumlu veya olumsuz tüm cevaplarınız ve yardımlarınız için teşekkür ediyorum saygılar...

pwm.c

kodları gösterme imkanın var mı? çok uzun değilse sorun değil yapılır fakat elbette direk dönüştüremessin. kodun mantığını kavrayıp c ile yeniden yazman gerekir. başkada yolu yok.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

elom

hocam pek uzun değil kısa birşey ama size de zahmet vermek istemem hazırcı olmak istemiyorum :S

elom


ibrahim626

Alıntı yapılan: elom - 27 Kasım 2013, 18:04:04keşke bi program olsaydı iyi olurdu
Basic kodlarını eklersen eğer muhakkak yardım görürsün ama ortada kod yok devre yok sen yardım bekliyorsun,öncelikle bir iki kaynak ekle daha sonra c diline çevrilir.

elom

haklısın abi ekliyorum konuyla ilgili belgeleri.


bu devre abi 20 mhz kristalle çalışan alıntı bi devre



bu da devrenin basic\'le yazılmış kodu


TRISB=%01000000
PORTA=0
DEFINE OSC 20
DEFINE LCD_DREG     PORTB
DEFINE LCD_DBIT     0     
DEFINE LCD_EREG     PORTB
DEFINE LCD_EBIT     4     
DEFINE LCD_RSREG    PORTB
DEFINE LCD_RSBIT    5     
DEFINE LCD_BITS     4     
DEFINE LCD_LINES    2     
MESAFE VAR WORD
GERCEK  VAR WORD
METRE   VAR WORD
METRE=0
PAUSE   200
LCDOUT $FE, 1,\"   RAMAZAN SEKER \"
PAUSE 1000
LCDOUT $FE, $C0, \"   ULTRASONIK \"
PAUSE 1000
LCDOUT $FE, $C0, \"  BOY OLCER \"
PAUSE 1000
LCDOUT $FE, $C0, \"    PROJESI   \"
PAUSE   1000
OLCUM:
MESAFE=0
HIGH PORTB.7
PAUSEUS 20
LOW PORTB.7
OLCUM2:
IF PORTB.6=1    THEN
OLCUM1:   
    IF  PORTB.6=0   THEN
        GOSUB   LCDYAZ
        GOTO    OLCUM
        ELSE
        GOSUB   OLC
        GOTO    OLCUM1
        ENDIF       
ELSE   
GOTO    OLCUM2
ENDIF
OLC:
MESAFE=MESAFE+1
RETURN
LCDYAZ:
MESAFE=MESAFE*10
GERCEK=MESAFE/223
LCDOUT $FE, 1,\"UZUNLUK:\",#GERCEK, \" CM\"
IF  GERCEK>400  THEN
    LCDOUT $FE, 1,\"    UZUNLUK 4\"
    LCDOUT $FE, $C0,\" METREDEN FAZLA\"
    PAUSE   500
    RETURN
    ENDIF
IF  GERCEK>300  THEN
    METRE=GERCEK-300
    LCDOUT $FE, $C0,\"3 METRE \",#METRE,\" CM\"
    PAUSE   500
    RETURN
    ENDIF
IF  GERCEK>200  THEN
    METRE=GERCEK-200
    LCDOUT $FE, $C0,\"2 METRE \",#METRE,\" CM\"
    PAUSE   500
    RETURN
    ENDIF
IF  GERCEK>100  THEN
    METRE=GERCEK-100
    LCDOUT $FE, $C0,\"1 METRE \",#METRE,\" CM\"
    PAUSE   500
    RETURN
    ENDIF
PAUSE   500
RETURN   
END

pwm.c

sbit LCD_RS at Rb5_bit;
sbit LCD_EN at Rb4_bit;
sbit LCD_D7 at Rb3_bit;
sbit LCD_D6 at Rb2_bit;
sbit LCD_D5 at Rb1_bit;
sbit LCD_D4 at Rb0_bit;
sbit LCD_RS_Direction at TRISb5_bit;
sbit LCD_EN_Direction at TRISb4_bit;
sbit LCD_D7_Direction at TRISb3_bit;
sbit LCD_D6_Direction at TRISb2_bit;
sbit LCD_D5_Direction at TRISb1_bit;
sbit LCD_D4_Direction at TRISb0_bit;
char sayi[6];
unsigned int mesafe=0;
unsigned int gercek=0;
unsigned int metre=0;
void main() {
 Delay_ms(200);
 TRISB=0B01000000;
 Lcd_Init();
 Lcd_Cmd(_LCD_CURSOR_OFF);
 Lcd_Cmd(_LCD_CLEAR);
 Lcd_Out(1,4,\"ULTRASONiK\");
 Lcd_Out(2,4,\"BOY OLCER\");
 Delay_ms(1000);
while (1) {
      mesafe=0;
      Rb7_bit=1;
      Delay_us(20);
      Rb7_bit=0;
     
 while(Rb6_bit=1){
      Delay_us(1);
      mesafe=mesafe+1;}
     
      mesafe=mesafe*10;
      gercek=mesafe/223;
      Lcd_Cmd(_LCD_CLEAR);
      Lcd_Out(1,1,\"    UZUNLUK:    \");
     
            if(gercek>=400){
            Lcd_Out(2,1,\"4 METREDEN FAZLA\");
            Delay_ms(500);}

            if(gercek>=300 && gercek<400){
            metre=gercek-300;
            WordToStr(metre,sayi);
            Lcd_Out(2,1,\"3 METRE\");
            Lcd_Out(2,8,sayi);
            Lcd_Out_Cp(\" CM\");
            Delay_ms(500);}

            if(gercek>=200 && gercek<300){
            metre=gercek-200;
            WordToStr(metre,sayi);
            Lcd_Out(2,1,\"2 METRE\");
            Lcd_Out(2,8,sayi);
            Lcd_Out_Cp(\" CM\");
            Delay_ms(500);}

            if(gercek>=100 && gercek<200){
            metre=gercek-100;
            WordToStr(metre,sayi);
            Lcd_Out(2,1,\"1 METRE\");
            Lcd_Out(2,8,sayi);
            Lcd_Out_Cp(\" CM\");
            Delay_ms(500);}
           
            if(gercek<100){
                metre=gercek;
                WordToStr(metre,sayi);
                Lcd_Out(2,4,sayi);
                Lcd_Out_Cp(\" CM\");
                Delay_ms(500);}

      }
}
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

elom

çok teşekkür ediyorum abi yardımların için allah razı olsun senden. birşey sormak istiyorum hani kod kısmında yazmışsınız ya abi
Lcd_Out(1,4,\"ULTRASONiK\");
 Lcd_Out(2,4,\"BOY OLCER\");

diye. buna farklı kelimeler eklemek için de aynı yöntemi kullanabiliyor muyuz mesela

Lcd_Out(3,4,\"SELCUK UNIV \");
Lcd_Out(4,4,\"ELEKTRONIK\");        gibi olabiliyor mu yani anlamak istediğim mantık şu lcd\'ye vereceğimiz çıkış komutlarımızı 1,4    2,4    3,4 diye mi sıralıyoruz ?

pwm.c

Lcd_Out(1,4,\"ULTRASONiK\");
bu komuttaki 1 rakamı karakterleri LCD nin hangi satıra yazılacağını belirler. kullandığın LCD 2x16 ise buraya en fazla 2 sayısını girebilirsin. eğer 4x20 LCD kullanıyorsan 1, 2 ,3 ,4 sayılarını yazabilirsin.

sıradaki 4 rakamı ise LCD ye yazmaya kaçıncı sıradan başlanacağı belirlenir. 2x16 LCD kullanıyorsan  1...16 arası değer girebilirsin eğer LCD 20 karakterse aynı oranda arttırabilirsin. \"bu neden kullanılıyor?\" diye soracak olusan, LCD nin belli kısımlarına daha önceden karakter yazdıysan onların silinmemesi için aynısını yazmak yerine devamına karakter ekleyebiliyorsun yada o kısımları boş bırakabiliyorsun.

\"ULTRASONiK\" sitringi ise LCD ye yazılacak karakteri belirler. kelime uzunluğu LCD karakter boyutuna göre değişir. buradaki \"ULTRASONiK\" örneği 10 karakterlidir. bu karakteri yazmaya 4. sıradan başladığımıza göre toplamda 13 karakter kullanmış oluyoruz. 2x16 LCD için bu değer en fazla 16 olabilir. eğer 16 karakterli bir yazı göndereceksen yazmaya 1. sıradan başlamalısın yoksa yazının tamamını göremessin.

_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

elom