LCD için Tablo oluşturmada hata!!!

Başlatan MICROCEBEL, 29 Ocak 2006, 17:39:42

MICROCEBEL

Selamün aleyküm;

                             LIST P=16F84A
         I     NCLUDE   "P16F84A.INC"
SAYAC1         EQU      H'0C';Gecikme için
SAYAC2         EQU      H'0D';Gecikme için
SAYAC3         EQU      H'0E';Gecikme için
SAYAC4         EQU      H'0F';LCD Genel amaçlı
SAYAC5         EQU      H'10';LCD Genel amaçlı
               ORG      H'000'
               GOTO      LCD_AYAR
;*************************************************
               ORG      H'00A'
TABLO1
               ADDWF      PCL,1
               DT"xxxxxxxx"
               GOTO      DEVAM1
TABLO2
               ADDWF      PCL,1
               DT"xxxxxxxxxxx"
               GOTO      DEVAM2
;*************************************************
               ORG      H'00B'
TABLO3
               ADDWF      PCL,1
               DT"==xxxxxxxx =="
               GOTO      DEVAM3
TABLO4
               ADDWF      PCL,1
               DT"xxxxxxxxxxx"
               GOTO      DEVAM4
;*************************************************
LCD ye yazı yazdırmak için böyle bir tablo oluşturdum vede tabloların başlangıç adreslerini.2X16 LCD kullanıyorum ve bu LCD de menü olşturmak istedim fakat belli bir karakter yazdıktan sonra PCL H'FF' değerinden sonra ORG H'00' başlangıç adresine yönleniyo.Bu tabloları olşturmamın sebebide bunu engellemek düşüncesiydi.Fakat bu şekilde programı build ettiğimde hata veriyo yani tabloların başlangıç adreslerini gösteriyo.BU tabloları oluştururken nasıl bi yol izlemeliyim ve hatam nerede.Teşekkürler.

Petek

ORG ları yanlış kullanıyorsun :!:
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

MICROCEBEL

Petek arkadaşım org'ları yanlış kullanıyorsun demişsin peki nasıl kullanmalıyım...

Petek

Assemblerdan anlamıyorum. O nedenle sana fazla yardımcı olamayacağım.

İlk tablonun üstündekini (ORG H'00A') ne maksatla yazdığını bilmiyorum ama tablo 3 ün üstündekini (ORG H'00B') yazınca üstteki iki tablonun üzerine tablo3 ve 4 ü yerleştiriyor diye anlıyorum.

bu durumnda 0x00A adresinde PCL=w+1 komutu işlenir. Yani (w) sonraki komuta gidersin. Orada da tablo3 ün  verileri olacak.

Diğer başlık altında sorduğun soruya benim verdiğim cevabı kale almadın. Oysa orada verdiğim kod denenmişti. 877 deki 4 tane page in istediğin yerinde kullanabilirdin. İlgilenseydin o zaman sana 8k lık tablo okuyan program parçasını da verirdim.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

MICROCEBEL

Ben o diğer başlık altındada ilgilendim fakat 5 ilave gibi falan demişsin ordan bişey anlamamıştım sadece pclath ı 1 arttır dediğini anlamıştım.Şuandada arttırıyorum fakat gene aynı gene aynı.O elindeki örneği gönderirisen sevinirim...

mesmert

microcebel arkadaşım dt ile yazdığın mesajları programın en başına al büyük ihtimal senin sorunun çözülmüş olur yada pclath mantığı ile yap

örnek:
movlw    0x3
movwf    pclath
call        lcd_yazı
xxxxxx
xxxxxx
xxxxxx

org  0x300
lcd_yazı
addwf    PCL,F
yazı_1 dt '2x16 lcd deneme',0
movf     PCL,W            :pcl değerini w yükle ve geri dön

MICROCEBEL

Mesmert arkadaşım verdiğin cvp için çok teşekkürler.

Fakat benim anlayamadığım PCLATH'a 0x3 değerini nedden kaydediyosun,birde benim dt ile oluşturduğum tabloları nası en başa alabilirim ben şu şekilde yaptım fakat tekrar hata veriyo hemde org başlangıç noktalarını hata gösteriyo.Yani en başta verdiğim örnekte petek arkadaşım orgları kullanmada hata yaptığımı söylemiş fakat doğrusu nasıl olabilir.Birde kendim oluşturmuş olduğum org başlangıç adtresleri kaçıncı hex ten başlıyo.Ben h'00A' adresinden başladım.Bana her ikisi içinde örnek verirsen çok sevaba girersin takıldım kaldım çünkü bu noktada.

mesmert

microcebel arkadaşım eğer programın proteusta simule programı varsa bana sakıncası yoksa asm dosyası ile mail atarsan düzeltip gönderirim ve ona göre hatanı çözersin

neden 0x3 pic 16f84 data sheet bakarsan 0x300 satır anlamına gelir programın en üstü dekerken eğer macro kullanıyorsan bu macroları ve dt mesajı ile ilgili rutini programın programın en üst kısmına kes yapıştır

mesmert@hotmail.com

supermakarna

kardeş senin sorunun büyük ihtimalle programda 2kb'lık sınırı aşısıyosun. 2.sayfaya geçmen gerekiyo.

bsivgin

Sanırım ORG komutunun kullanımını tam bilmediğiniz için bu yanlışlığı yapmışsınız. ORG komutu program hafızasında programın nereye yerleştirileceğini gösteriyor.
Şimdi ORG h'00A' demişsin ve ardından komutları yazmışsın. Daha sonra ORG h'000B' demişsin komutları yazmışsın. Hafızanın h'00A' nolu gözünden hafızanın h'00B' gözüne sadece bir komutluk alan var. Yani H'00B' den sonra yazdığın kodlar h'00A' dan sonrakileri silip üzerine yazıyor. Tavsiyem şu şekilde yap

ORG H'00A'
TABLO1
ADDWF PCL,1
DT"xxxxxxxx"       ; bu bölge program hafızasında
GOTO DEVAM1      ;h'00A' dan h'021'e kadar alanı kaplar
TABLO2      
ADDWF PCL,1
DT"xxxxxxxxxxx"
GOTO DEVAM2
;*************************************************
ORG H'30'          ; yani en az H'22' den itibaren bu kodları koymalısın
TABLO3
ADDWF PCL,1
DT"==xxxxxxxx =="
GOTO DEVAM3
TABLO4
ADDWF PCL,1
DT"xxxxxxxxxxx"
GOTO DEVAM4



Saygılarımla
Bülent ŞIVGIN
www.diyot.com