16C558 yerine 16F628

Başlatan Logan, 11 Eylül 2007, 23:43:40

Logan

Merhaba arkadaşlar.Programı bundan 10 sene önce başka birisi tarafından yazılmış, şimdi ise hala kullanılmakta olan bir sistem üzerinde çeşitli değişiklikler yapmam istendi. İlk olarak üzerinde kullanılan 16C558 entegresinin yerine 16F628 koymak istediklerini, zira bu entegreyi her zaman bulamadıklarını söylediler.Bende programı açıp çeşitli düzenlemeler yaparak uydurmaya çalıştım.Cihaz tamamen sorunsuz çalışmasına rağmen sadece ayar kısmında set değerini 7 segment displaylere yansıtırken decimal yerine hex sayılar göstermeye çalıştığı için, yapılan ayar doğru olsada hoş olmayan bir görüntü ortaya çıkıyor.  :?

        Daha önce çalıştığına tamemen emin olmamdan dolayı direk programa müdahale etmek istemedim. Bu kısım ile ilgili olan program bloğunu incelemeye aldım ve şöyle bir mantık ile karşılaştım;

        Ekranda ayarlamak istediğimiz değeri 370 olarak varsayalım. Programlama dili olarak ASM kullanıldığı için bu değeri ancak 2 adet register kullanarak saklayabilir. H_byte ve L_byte adlı iki adet register ile bu değerler saklanıyor. 370 decimal sayısının binary karşılığı 0b101110010, hex karşılığı ise 0x172' dir. Bu değerleri R1-R2 ve R3 isimli 3 adet registere sadece 4'erli basamaklar halinde ayırarak atama yapıyor. Bu işlemi kısaca açıklayacak olursak, R1-R2-R3 registerleri ayırma işlemini yapan alt programdan döndükten sonra H_Byte.L_Byte=0b0000.0001.0111.0010 rakamı, R1=0001 - R2=0111 - R3=0010 halini alıyor. Eğer bu halleriyle göstergeye yansıtırsak ekranda 172 değerini, BCD'ye çevirip yansıtırsak 370 değerini görürüz. Program içerisinde list ve include dosyaları ile birkaç adet bu konuyla alakası olmayan register haricinde hiçbir değişikliğe gitmedim.
       
      Bu iki işlemci arasında, bahsi geçen konuyla alakalı gözden kaçırdığım bir takım farklılıklar olduğu kanısındayım. Programın herhangi bir gizliliği yok fakat şu an için koymam mümkün değil. Ancak yarın upload edebilirim. Benim şüphelendiğim tek nokta, daha önce programı yazan kişinin bu işlemler esnasında FSR'yi kullanıyor olmasıdır. Bu register hakkında fazla bir bilgim yok, hiçbir programımda da  kullanmadım. Konu ile alakalı fikirlerinizi bekliyorum. İyi akşamlar, iyi çalışmalar...
İmza.

mustafa_cmbz

hocam 2 pic in datasheetlerini karşılaştırdınmı belki değişik özellikleri olabilir...

buiba

fsr registeri dolayli adreslemede kullanilan bir registerterdir orn :programinda arda ram'lara atman gereken kodlar var ve sayilari cok fazla;her registere isim vermek cagirmak cok zahmetli hatta imkansiz.iste fsr ve indf registerleri burada devreye girer.kullanimi ise ;fsr'ye genel yazmac blogunun baslamasini istedigin equ degerini girersin,daha sonra kodu indf registerine yuklersin,o adrese kod yazilmis olur,daha sonra sirayla fsr'i 1 arttirirsin ayni islemleri tekrarlarsin.

Logan

Karşılaştırdım arkadaşlar. Bugün bir adet 16C558 aldım ve aynı programı ona yazdırdım sorunsuz çalıştı. Kesinlikle iç yapıları ile ilgili bir problem var.  :?
İmza.