Şimdi Ara

8051 yardıım C kullanmaya çalışıyorum

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
22
Cevap
0
Favori
2.431
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • Arkadaşlar yardıma ihtiyacım var.

    şimdi 8051 işlemcisini asm ile kodlarken dolaylı adresleme yapabiliyoruz.
    mesela

    MOVC DPTR,1000
    MOV A,00

    MOVC @A+DPTR,FF

    DPTR + A nın gösterdiği harici bellek adresine FF değerini atıyor.

    Şimdi ben bi eşşeklik ettim ve projeyi C kodlarıyla hazırlamaya başladım. şimdi yazdığım satırlarca kodu da silip tümünü baştan ASM ile yazmak da istemiyorum :D
    Bu işin kolay bi yolu var mı? yani yukarıdaki olayı C kodlarıyla yapmamız mümkünmü? nolur birisi yarıdm etsin deli olcak saatlerdir onunla uğraşıyorum :)



  • C kodunun içine direkt olarak

    asm
    {

    }

    Şeklinde assembly kodu yazabilirsin.
  • quote:

    Orijinalden alıntı: sehlor

    C kodunun içine direkt olarak

    asm
    {

    }

    Şeklinde assembly kodu yazabilirsin.



    haha php de script tagı yazar gibi yani :D
    deniycem şimdi eğer bu olursa abi dile benden ne dilersen :D:D
  • olmadı hocam tanımıyor derleyici. ne diyon len sen diyo resmen bana :)
  • derleyiciden derleyiciye değişebilir birde şunu dene:

    _asm
    {
    }
  • Genelde keil kullanırlar. keil derleyicisinde şu şekilde;

    #pragma asm
    ...
    ...
    #pragma endasm
  • Yanıt veren herkese teşekkürler,

    Dolaylı adreslemeyle erişilebilen harici veri hafızası bölgesine erişmek istemekteki tek amacım, dizi tanımlarken kullanılan tüm alanın
    128 karakteri geçememesiydi yani bir diziyi sadece RAM de tanımlıyodu tabi 128 byte ram yetmiyordu.

    cevaplarınızı görmeden biraz daha araştırma yapmıştım. ve 64kbyte lık alana erişebilmek için olan C kodlarını buldum.
    Sorunumu çözdüm. aynı problemi olacak arkadaşlar olabilir diye paylaşıyorum. buyrun.

    öncelikle <absacc.h> başlık dosyasını yüklemek gerekiyor(bu başlık dosyası keil kütüphanesinde mevcut indirmeden sadece programın başına eklemek yetiyor)


    Dizi tanımlamak için char xdata dizi[boyut]; boyut 0-65535 (0000-FFFF) arası değişebiliyor tabi C de yazarken 0xFFFF veya 0x0000 yazmak gerekiyor.

    XBYTE [0x0002] = 5; // 0002 h adresli data belleğe 5 bilgisini yaz
    Oku = XBYTE [0x0002]; // 0002 h adresli code bellekten 1 byte oku

    bunlar en temelleri bikaç kod daha şurada mevcut.

    bütün bunları yaptıktan sonra bahsettiğiniz #pragma komutunu denedim.
    Keil tanıdı yani komutun rengi değişti ama derleme anında şu hatayı verdi. aktif olabilmesi için src nin kontrol edilmesi gerekiyor diyo ama anlamadım tabi ne demek istediğini D:.d

    error C272: 'asm/endasm' requires src-control to be active

    Herkese tekrar teşekkürler..




  • Error C272 : ASM Requires SRC Directive

    Kaynak dosyasında asm-endasm kullanılırsa,
    SRC (compiler directive) ile derlemek gerekiyor.
    Derleyici asembler kaynak dosyası oluşturuyor.
    Bundan sonra asm.kaynak dosyasını kullanabiliyorsunuz..

    http://www.keil.com/support/man/docs/c51/c51_c272.htm
    ===

    keil'in "inline asm" özelliğine ilişkin bazı uyarılar var.
    Bu yapının biraz hatalı oduğu ama düzeltilebileceği söyleniyor.
    Bu yüzden projeni daha fazla ilerletmeden aşağıdaki forumda
    özellikle 2 yorumcuyu okumalısın ("#9 : how to store in memory keil" ve "#11 : extern char end asm")

    http://www.edaboard.com/thread5666.html




  • quote:

    Orijinalden alıntı: ISIS

    Error C272 : ASM Requires SRC Directive

    Kaynak dosyasında asm-endasm kullanılırsa,
    SRC (compiler directive) ile derlemek gerekiyor.
    Derleyici asembler kaynak dosyası oluşturuyor.
    Bundan sonra asm.kaynak dosyasını kullanabiliyorsunuz..

    http://www.keil.com/support/man/docs/c51/c51_c272.htm
    ===

    keil'in "inline asm" özelliğine ilişkin bazı uyarılar var.
    Bu yapının biraz hatalı oduğu ama düzeltilebileceği söyleniyor.
    Bu yüzden projeni daha fazla ilerletmeden aşağıdaki forumda
    özellikle 2 yorumcuyu okumalısın ("#9 : how to store in memory keil" ve "#11 : extern char end asm")

    http://www.edaboard.com/thread5666.html


    Çok çok teşekkür ederim.
    Adres vermekle kalmamış bide oradaki yorumların da işe yarar olanlarını çekip çıkarmışsın resmen :D
    akümülatöre veya başka bi kaydediciye nasıl veri itileceğini anlatmış adam.


    Tabi sorunları aştıkça yenileri çıkıyor ortaya :)
    Başka bi sorum da:

    Şimdi yaptığım projede değerini kullanıcının belirleyeceği bazı bilgiler olacak. tabi işlemci beslemesi kesildiğinde kullanıcının belirlediği bu bilgiler tamamen sıfırlanıp default değerlerine geri dönecek.
    Misal şimdi yaptığım proje şifreli kilit benzeri bişey olarak düşündüğümüzde kullanıcının sonradan değiştirdiği bu şifreyi nasıl daima saklarız. veya kilitin o zamana kadar kaç kere açılıp kapandığını tutan bi kaydedicimiz varsa. işlemcinin elektriği kesildiğinde bu bilgilerin kaybolmamasını nasıl sağlarız. Hafıza pili benzeri bir durum şart mıdır? yoksa tıpkı flash belleklerimizdeki gibi bi düzenek kurmak mümkün müdür?
    Bu konuda yardımcı olabilecek arkadaşlara şimdiden teşekkür ederim.



    < Bu mesaj bu kişi tarafından değiştirildi Th3r4p1sT -- 19 Aralık 2010; 19:29:55 >




  • 8051 de dahili eeprom yok sanırım. Harici bir eeprom alıp mcu ile haberleştireceksin. Mcu da varsa i2c, yoksa isp veya uart protokolleri ile bağlanabilir.
    Keil de bunları kullanmak için hazır fonksiyonlar vardır. Yoksa datasheet e bakıp kendin ayarlaman lazım.

    Sonradan aklıma geldi flash belleğede yazılabilir. Hatta yukarıda yazdığın xdata sanırım bu işe yarıyor. Ama önemli bir nokta var. Eğer adresi kendin veriyorsan programın kapladığı alanın ötesine yazman lazım yoksa program kodunu bozar.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 19 Aralık 2010; 19:59:21 >
  • quote:

    Orijinalden alıntı: elektro_gadget

    8051 de dahili eeprom yok sanırım. Harici bir eeprom alıp mcu ile haberleştireceksin. Mcu da varsa i2c, yoksa isp veya uart protokolleri ile bağlanabilir.
    Keil de bunları kullanmak için hazır fonksiyonlar vardır. Yoksa datasheet e bakıp kendin ayarlaman lazım.

    Sonradan aklıma geldi flash belleğede yazılabilir. Hatta yukarıda yazdığın xdata sanırım bu işe yarıyor. Ama önemli bir nokta var. Eğer adresi kendin veriyorsan programın kapladığı alanın ötesine yazman lazım yoksa program kodunu bozar.


    Şimdi bildiğim kadarıyla xdata veri belleğe ulaşıyor. ve oraya da hangi verilerin hangi satıra koyulacağını biz programlarken belirliyoruz. Böylece işlemci voltajı alıp çalışmaya başladığında o belirlediğimiz yerdeki bütün değerlere ilk değerlerini yani bizim verdiğimiz ilk değerleri atmakla başlıyor işe.

    code bellekte de program kodlarımız duruyor. ve tabi orası silinmiyor.
    Tabi bu code bellek diyince kafamda şimşekler çakmaya başladı. acaba program çalışınca ilk işi ilk değer atamadan. code bellekteki benim belirlediğim noktalara bakıp eğer değer yoksa oralara ilk değer atayıp. içerde saklı bir değer varsa da bu işi yapmazsam olabilir.

    tabi senin dediğin gibi o seçeceğim bellek satırları program kodlarının dışındaki bir yer olması lazım. Bu iş üzerinde biraz çalışayım bakalım code bellekte istediğim yere bilgi yazma/okuma yapabilecekmiyim.
    olmadı başka bir arkadaş 24C64 entegresini tavsiye etti. tabi toplamda 20 satırı geçmeyecek bi ihtiyaç için o entegre en son bakacağım çare olacak. yer kaplama problemi yani.




  • Yukarıdaki giriyi yazdıktan hemen sonra bikaç deneme yaptım

    programı derleme yaparken aşağıdaki gibi program boyutunu keil bize veriyor. güzel bir özellik.


    DBYTE [0xFFF0] = 20;

    komutunu yazıp derlediğimde

    Program Size: data=42.0 xdata=68 code=1921 şeklinde oluyor.

    -----------------------------------

    int code selo; //selo isminde bi değişken tanımladım. tabi kod bellekte olduğunu düşünüyorum. bu şekilde derlediğimde

    Program Size: data=42.0 xdata=68 code=1919 şeklinde oluyor.

    Tabi burda selo değişkenine değer atmak istediğimde bazen değiştirilemez hatasını alıyorum. sanırım bu anda kodların bulunduğu satıra denk geliyor.
    -----------------------------------

    bu komutların ikisini de kullanmayıp normal halde derlediğimde

    Program Size: data=42.0 xdata=68 code=1917 şeklinde oluyor.


    Burda,

    Program kodlarınn olduğu, RAM belleğin ve harici veri belleğinin olduğu bölgeleri hangisi ifade ediyor bi türlü çözemedim :D

    harici veri belleği sanırım xdata oluyor da diğer ikisini çözemedim bi türlü .D

    Bilen biri yardımcı olsun lütfen.



    < Bu mesaj bu kişi tarafından değiştirildi Th3r4p1sT -- 19 Aralık 2010; 21:00:07 >




  • Yardım lütfeen bu konuda yardım edebilecek birisi varmı?
  • Sorularına doğrudan çözüm olur mu emin değilim; paylaşmak istediğim
    fikir ve kaynaklar var.

    En son 8080 ile okulda uğraşmıştım.
    Aradan epey zaman geçti. Şu an bir breadboard ile
    joule-thief, TEC, güneş paneli +ledler gibi çok basit deneylerin
    dışında elektronikle fazla bir uğraşım yok.

    Ama internette istemediğin kadar kaynak var. Hele ingilizcen de
    biraz iyiyse; her şey elinin altında.

    Ben sana teorik bir kaç bilgi bulup göndermiştim,
    ne yazık ki şimdi de öyle yapacağım - umarım yararı olur.

    /* bu açıklama alanını okumayabilirsin

    Bellek olarak çeşitli ortamları kullanabiliyorsun :
    Program segmenti ve harici bellekler. Bunu zaten biliyoruz.
    Ben pic ile biraz araştırma yapmıştım; kısıtlı bellek alanı var ve
    program kendi kendini değiştirsin istedim (overlay mantığı).
    Böylece ana belleğe sığmayan modülleri değiş-tokuş ile
    program segmentine yüklemek istedim. Ama bu alanın belli bir yazma
    kapasitesi varmış ve vazgeçtim.
    Senin projende, yazma sıklığına göre karar vermelisin;
    10.000, 100.000 kez yazılabilir bellek türleri var.
    Ama yapılan işe göre bu adetler kolayca tükenebilir.
    Sözgelimi, bir datalogger, 24 saatlik sinyalleri bu alana sürekli
    kaydederse, kısa sürede artık yazamaz hale gelir. Bu durum programdan kaynaklanmıyor,
    belleğe fiziksel olarak artık yazılamıyor...
    Bir musluğu düşünürsek, aç-kapa yapıldıkça "yalama" oluyor ve
    bir süre sonra bozuluyor - bu da onun gibi ne yazık ki.

    Kullandığın keil derleyicisi, program alanını "protected" işaretliyor olabilir.
    Normalde program ve data segmenti ayrı görünmüyor, ancak bazı okuduğum
    notlarda program segmentini "data" olarak kullanıp,
    bilgileri kalıcı olarak bu alana kaydetmekle ilgili uyarılar var.
    Bunu anlayabiliyorum, ama yazma sırasında bu alana erişim yapılamaz deniliyor...
    Bu, program sayacının gösterdiği blokta bir yazma işlemi yapılamayacağı anlamına mı geliyor
    tam anlamadım. Çünkü öyleyse, bu çok kısıtlı bir erişime olanak
    verir ve asm kodlarıyla çözmen gerekir. Bu da C gibi bir derleyici
    kullanarak mikroişlemciyi programlayanlar için olanaksız bir durumdur.
    (inline assembler'dan bahsetmiyorum; derleyiciyi "baypas" edip
    doğrudan ASM yazmak gerekiyor.)

    Bu arada, C derleyicisi, "boot" sırasında değişkenleri sıfırlıyor.
    Çünkü örn.elektrik gidip-geldiği zaman eğer devreyi besleyen gerilim
    kritik bir süre boyunca belirli bir değerin altına inerse bellekteki veri güvenilmez oluyor.
    Derleyiciyi yazanlar, doğrudan sıfırlayarak bunu çözmüşler.
    Aslında 3-5 saniyelik kesintide bellek içeriği korunur, hemen silinmez.
    Bunu anlamak için (geçerlilik testi için) komutlar var.
    C derleyicisi yazanlar ya bunu bilmiyor,
    ya da "herşeyi sıfırlama" çözümü işlerine gelmiş - bilmiyorum.
    Oysa yeni geliştirilen yarı-iletken teknolojisi ile bu süre
    10-30 dakikaya kadar çıkabiliyor, ki bu da örn. pil değiştirmek için
    yeterli bir süre demektir (bazı kaynaklar birkaç saate kadar varan sürelerden
    bahsediyor ama ne gördüm ne de ayrıntılı bir makale okudum -yalan yok;
    eğer doğruysa çok yeni bir ürün olmalı.
    Burada, "volatile" yani kalıcı-olmayan-bellekten bahsediyorum).
    Bu güzel bir gelişme ama, bir belleğin silinme süresinin uzaması
    o alana yazma/okuma süresinin de uzaması anlamına geliyor.
    Aradaki dengeyi nasıl koruyacaklar merak ediyorum.

    Kullandığın çipe ilişkin dökümanların mutlaka olsun, bazı sorularından
    kullanım klavuzu ya da mimari-çizelgesi gibi bir kaynağa sahip olmadığını düşünüyorum..
    Yanılıyorsam bağışla.
    Ben yeterli döküman olmadan yola çıkmam. Her ne kadar o an için lazım olmasa bile
    üşenmeyip tümünü okurum. Hepsini anlar mıyım; hayır.

    Son olarak, denemekten çekinme. Biraz da deneme-yanılma yapmak lazım.

    */

    Aşağıdaki aramaları yaparsan bir çok kaynak çıkıyor :

    "In Application Programming 8051"
    - (bootloader http://www.8052.com/forum/read/145532
    - toplam 7 tane post var. Aslında 1.soruyu soran kişi
    - sonradan yine 1.soruya dönüp düzeltme yapmış;
    - kafan karışabilir o yüzden tüm postlara gözatmanı öneririm.)

    "8051 persistent memory"
    - Forumda 8051/52 için bir kişi çok özet ama yararlı bilgiler vermiş :
    - (sram, xram vb.) http://www.cygnal.org/ubb/Forum1/HTML/001648.html
    - Yorumlar 2006 yılına ait.
    - (Yeni 8051'lerde xram çip içine alınmış ve mimari biraz değişmiş olabilir.)

    "keil compiler result"
    - Çok fazla sonuç döndü; birçok forum var. Önerim, o forumlara gözatman.
    - Bununla ilgili arama yaparken, doğrudan senin projenle ilgili değil ama
    - ilginç bir makaleye rastladım;
    - "Byte code Interpreter for 8051 Microcontroller"
    - (cross-platform yorumlayıcı; bir kez yaz, bütün MCU'larda çalışsın)
    - pic yerine mcu hedeflenmiş (risc yerine cisc!).
    - www.iaeng.org/publication/IMECS2010/IMECS2010_pp1125-1129.pdf
    - Makale 2010 yılına ait. Yakın bir gelecekte bunun benzerlerini görebiliriz...
    - Fikir hoşuma gitti, paylaşmak istedim.


    Son olarak, 8051 için C derleyicilerine genel bir bakışla ilgili
    oldukça yararlı olacağını düşündüğüm bir yazı.
    Derleyicilerin o kadar da hatasız olmadıkları, nerelerde programcının
    optimizasyon yapması gerektiği gibi önemli noktalar var.

    "Optimal C Constructs for 8051 Microcontrollers"
    - http://www.netrino.com/node/174




  • quote:

    Orijinalden alıntı: ISIS

    Sorularına doğrudan çözüm olur mu emin değilim; paylaşmak istediğim
    fikir ve kaynaklar var.

    En son 8080 ile okulda uğraşmıştım.
    Aradan epey zaman geçti. Şu an bir breadboard ile
    joule-thief, TEC, güneş paneli +ledler gibi çok basit deneylerin
    dışında elektronikle fazla bir uğraşım yok.

    Ama internette istemediğin kadar kaynak var. Hele ingilizcen de
    biraz iyiyse; her şey elinin altında.

    Ben sana teorik bir kaç bilgi bulup göndermiştim,
    ne yazık ki şimdi de öyle yapacağım - umarım yararı olur.

    /* bu açıklama alanını okumayabilirsin

    Bellek olarak çeşitli ortamları kullanabiliyorsun :
    Program segmenti ve harici bellekler. Bunu zaten biliyoruz.
    Ben pic ile biraz araştırma yapmıştım; kısıtlı bellek alanı var ve
    program kendi kendini değiştirsin istedim (overlay mantığı).
    Böylece ana belleğe sığmayan modülleri değiş-tokuş ile
    program segmentine yüklemek istedim. Ama bu alanın belli bir yazma
    kapasitesi varmış ve vazgeçtim.
    Senin projende, yazma sıklığına göre karar vermelisin;
    10.000, 100.000 kez yazılabilir bellek türleri var.
    Ama yapılan işe göre bu adetler kolayca tükenebilir.
    Sözgelimi, bir datalogger, 24 saatlik sinyalleri bu alana sürekli
    kaydederse, kısa sürede artık yazamaz hale gelir. Bu durum programdan kaynaklanmıyor,
    belleğe fiziksel olarak artık yazılamıyor...
    Bir musluğu düşünürsek, aç-kapa yapıldıkça "yalama" oluyor ve
    bir süre sonra bozuluyor - bu da onun gibi ne yazık ki.

    Kullandığın keil derleyicisi, program alanını "protected" işaretliyor olabilir.
    Normalde program ve data segmenti ayrı görünmüyor, ancak bazı okuduğum
    notlarda program segmentini "data" olarak kullanıp,
    bilgileri kalıcı olarak bu alana kaydetmekle ilgili uyarılar var.
    Bunu anlayabiliyorum, ama yazma sırasında bu alana erişim yapılamaz deniliyor...
    Bu, program sayacının gösterdiği blokta bir yazma işlemi yapılamayacağı anlamına mı geliyor
    tam anlamadım. Çünkü öyleyse, bu çok kısıtlı bir erişime olanak
    verir ve asm kodlarıyla çözmen gerekir. Bu da C gibi bir derleyici
    kullanarak mikroişlemciyi programlayanlar için olanaksız bir durumdur.
    (inline assembler'dan bahsetmiyorum; derleyiciyi "baypas" edip
    doğrudan ASM yazmak gerekiyor.)

    Bu arada, C derleyicisi, "boot" sırasında değişkenleri sıfırlıyor.
    Çünkü örn.elektrik gidip-geldiği zaman eğer devreyi besleyen gerilim
    kritik bir süre boyunca belirli bir değerin altına inerse bellekteki veri güvenilmez oluyor.
    Derleyiciyi yazanlar, doğrudan sıfırlayarak bunu çözmüşler.
    Aslında 3-5 saniyelik kesintide bellek içeriği korunur, hemen silinmez.
    Bunu anlamak için (geçerlilik testi için) komutlar var.
    C derleyicisi yazanlar ya bunu bilmiyor,
    ya da "herşeyi sıfırlama" çözümü işlerine gelmiş - bilmiyorum.
    Oysa yeni geliştirilen yarı-iletken teknolojisi ile bu süre
    10-30 dakikaya kadar çıkabiliyor, ki bu da örn. pil değiştirmek için
    yeterli bir süre demektir (bazı kaynaklar birkaç saate kadar varan sürelerden
    bahsediyor ama ne gördüm ne de ayrıntılı bir makale okudum -yalan yok;
    eğer doğruysa çok yeni bir ürün olmalı.
    Burada, "volatile" yani kalıcı-olmayan-bellekten bahsediyorum).
    Bu güzel bir gelişme ama, bir belleğin silinme süresinin uzaması
    o alana yazma/okuma süresinin de uzaması anlamına geliyor.
    Aradaki dengeyi nasıl koruyacaklar merak ediyorum.

    Kullandığın çipe ilişkin dökümanların mutlaka olsun, bazı sorularından
    kullanım klavuzu ya da mimari-çizelgesi gibi bir kaynağa sahip olmadığını düşünüyorum..
    Yanılıyorsam bağışla.
    Ben yeterli döküman olmadan yola çıkmam. Her ne kadar o an için lazım olmasa bile
    üşenmeyip tümünü okurum. Hepsini anlar mıyım; hayır.

    Son olarak, denemekten çekinme. Biraz da deneme-yanılma yapmak lazım.

    */

    Aşağıdaki aramaları yaparsan bir çok kaynak çıkıyor :

    "In Application Programming 8051"
    - (bootloader http://www.8052.com/forum/read/145532
    - toplam 7 tane post var. Aslında 1.soruyu soran kişi
    - sonradan yine 1.soruya dönüp düzeltme yapmış;
    - kafan karışabilir o yüzden tüm postlara gözatmanı öneririm.)

    "8051 persistent memory"
    - Forumda 8051/52 için bir kişi çok özet ama yararlı bilgiler vermiş :
    - (sram, xram vb.) http://www.cygnal.org/ubb/Forum1/HTML/001648.html
    - Yorumlar 2006 yılına ait.
    - (Yeni 8051'lerde xram çip içine alınmış ve mimari biraz değişmiş olabilir.)

    "keil compiler result"
    - Çok fazla sonuç döndü; birçok forum var. Önerim, o forumlara gözatman.
    - Bununla ilgili arama yaparken, doğrudan senin projenle ilgili değil ama
    - ilginç bir makaleye rastladım;
    - "Byte code Interpreter for 8051 Microcontroller"
    - (cross-platform yorumlayıcı; bir kez yaz, bütün MCU'larda çalışsın)
    - pic yerine mcu hedeflenmiş (risc yerine cisc!).
    - www.iaeng.org/publication/IMECS2010/IMECS2010_pp1125-1129.pdf
    - Makale 2010 yılına ait. Yakın bir gelecekte bunun benzerlerini görebiliriz...
    - Fikir hoşuma gitti, paylaşmak istedim.


    Son olarak, 8051 için C derleyicilerine genel bir bakışla ilgili
    oldukça yararlı olacağını düşündüğüm bir yazı.
    Derleyicilerin o kadar da hatasız olmadıkları, nerelerde programcının
    optimizasyon yapması gerektiği gibi önemli noktalar var.

    "Optimal C Constructs for 8051 Microcontrollers"
    - http://www.netrino.com/node/174


    Gösterdiğin ilgi için gerçekten çok teşekkür ederim.
    Elimde oldukça fazla kaynak var. hepsine de gözattım konuyla ilgili. hepsi türkçe kaynaklardı tabi.
    verdiğin edaboard sitesine de şu andaki problemimi sormak için bi konu açtım orda da yardımcı olan kişiler var. Birisi "The final word on 8051" isimli bi kitap önerdi, buldum bakıyorum. Türkçe kaynaklarda olmayan C notları mevcut. tabi benim sorunuma halen bi çare bulamadım.
    Projeyi kodlamayı durdurdum zaten. Elimde şu anda ne 8051 var ne de programlayıcı. sadece proteus ve Keil ile yürütüyodum. tabi orda da dediğin gibi keil her başlangıçta belleği komple temizlemeyi seçiyor.
    Yarın okuldaki imkanlarla sorunumu deniycem değişik alanlara(segmentlere) veri atıp, cihazı kapatıp açıp verinin halen oralarda olup olmadıklarını kontrol edicem. hem C de hem de asm de deniycem hepsini. eğer işi C de değil de asm de başarabilirsem C kodlarını aynen asm ye çevirip tüm programa asm ile devam edicem. Bu arada verdiğin kaynaklara da tek tek inceliycem tabiki.

    Tabi bu sırada programlamak için bi alet de arıycam. Çok çeşitli programlama cihazları var ama kafama göre bulamadım bi türlü. bunu programlamak pic ler kadar kolay olmuyor anlaşılan :D




  • Pic lerde basit bir hack ile program çalışırken flash belleğe yazılabiliyordu. Ben avr ile uğraşmıştım hobi olarak. Onda derleme esnasında sabit nesneleri flash'a atmak mümkündü. Yani rom belleğe atılacak nesnenin değişemez (const) olması gerekiyordu. Gördüğüm kadarıyla 8051 de de olay bu şekilde.

    Zaten olması gereken de bu. Rom bellek program çalışırken salt okunur oluyor. Bu durumda senin ihtiyacını karşılamaz, harici eeprom a ihtiyaç var.

    Eğer 8051 kullanman zorunlu değil ise avr öneririm. Programlayıcısı çok basittir. Ben breadboard üzerine usb programlayıcı kurmuştum. 2 saniyede programı atıyordu içine. Bütün avr larda dahili eeprom bulunur. Çoğu yerde bulabileceğin atmega8 çipinde 8k flash rom, 1k ram ve 512 byte eeprom var. Ayrıca c/c++ derleyicisi, simulatorü ve IDE ücretsizdir.
  • quote:

    Orijinalden alıntı: elektro_gadget

    Pic lerde basit bir hack ile program çalışırken flash belleğe yazılabiliyordu. Ben avr ile uğraşmıştım hobi olarak. Onda derleme esnasında sabit nesneleri flash'a atmak mümkündü. Yani rom belleğe atılacak nesnenin değişemez (const) olması gerekiyordu. Gördüğüm kadarıyla 8051 de de olay bu şekilde.

    Zaten olması gereken de bu. Rom bellek program çalışırken salt okunur oluyor. Bu durumda senin ihtiyacını karşılamaz, harici eeprom a ihtiyaç var.

    Eğer 8051 kullanman zorunlu değil ise avr öneririm. Programlayıcısı çok basittir. Ben breadboard üzerine usb programlayıcı kurmuştum. 2 saniyede programı atıyordu içine. Bütün avr larda dahili eeprom bulunur. Çoğu yerde bulabileceğin atmega8 çipinde 8k flash rom, 1k ram ve 512 byte eeprom var. Ayrıca c/c++ derleyicisi, simulatorü ve IDE ücretsizdir.


    Bununla ilgili programlayıcı ararken atmega8 adnı çok duydum. Ama paralel port, timer sayısı, kesme girişleri filan düşüdüğümde 8051 cazip geliyor. tabi atmega nın bilgilerini bilmiyorum. aslında bütün bunlardan ziyade programlanması nasıldır. yani komut seti?
    bu projeyle ilgili şu ana kadar yazdığım fonksiyonlar sadece lcd ile haberleşme ve keypad ile haberleşme ile ilgili oldu. herhangi bir malzemeyi de halen almış değilim. İşte yarın okulda hafıza olayını bi denicem. işime uymazsa, atmega nın da programlaması kolaysa ona geçerim.
    Tabi 8051 için programlayıcı da çok zor. dediğin giib board üzerine bile kurulabilen bi cihaz varsa cazip gelir. :D tabi board da yapmam pcb hazırlarım.




  • Tam olarak kullandığın 8051'in modeli nedir? Bazı firmaların dahili EEPROM lu 8051 modelleri mevcut.

    Ayrcıa ilk mesajındaki olayı hiç assembly karıştırmadan c de pointer ile yapabilirsin.
  • arkadaşlar konuyla fazla alakalası yok ama size birşey sorucam bilişim teknolojileri 10.sınıfta okuyorum visual basic programını görüyoruz 2 hafta falan oldu başlayalı bundan önce algoritma örnekleri falan çözdük yarın ise visual basic ten ilk uygulama sınavı olucaz sizce hoca ne tip sorular sorabilir
  • quote:

    Orijinalden alıntı: controller_

    Tam olarak kullandığın 8051'in modeli nedir? Bazı firmaların dahili EEPROM lu 8051 modelleri mevcut.

    Ayrcıa ilk mesajındaki olayı hiç assembly karıştırmadan c de pointer ile yapabilirsin.



    hocam kullandığım entegre 89c51rd2

    bunda dahili bir eeprom olduğunu biliyorum. buralarda değişken tanımlayabiliyorum ama bana bu değişkenlerin adresi gerekli ve o adresin işlemci her açıldığında aynı olması gerekli. ama bildiğimiz kadarıyla işlemci, biz bir değişken tanımladığımıda ona bellekten herhangi bir satır ayırıyor yani adresi sabit kalmıyor.

    ilk mesajdaki olayı yapmak için benim de ilk aklıma gelen pointer olmuştu ama pointer in içine direkt adress bilgisini atamadığımız için o iş yatmıştı.


    quote:

    Orijinalden alıntı: emincanekici

    arkadaşlar konuyla fazla alakalası yok ama size birşey sorucam bilişim teknolojileri 10.sınıfta okuyorum visual basic programını görüyoruz 2 hafta falan oldu başlayalı bundan önce algoritma örnekleri falan çözdük yarın ise visual basic ten ilk uygulama sınavı olucaz sizce hoca ne tip sorular sorabilir

    Hakikaten alakasız bi yazı olmuş. biz bu tür sorunlarımızı üst sınıftaki abilerimizle hallederdik halen de öyle yapıyoruz. tavisye ederim sana da..




  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.