DECIMAL GÖRÜNÜMLÜ HEX SAYILAR!!!

Başlatan oyhan, 08 Kasım 2004, 12:15:44

oyhan

:D
SELAM ARKADAŞLAR..
Başlık garip gelebilir bazılarınıza fakat maxim in ürettiği RTC chiplerin (mesela ds1302,ds1306, ds1307 gibi...) içerisindeki registerlara yüklenmesi istenen tarih saat bilgileri ekranda decimal görünüyor ve bu değerler hex olarak RTC ye yükleniyor. 12:30 için saat=$12 ve dakika=$30 değerleri yükleniyor. Lcd li bir uygulama yaparken değişken saat veya diğer bilgilerden birisi arttırıldığı vakit 9 dan sonra A,B,D,E,F şeklinde Hex Sayılar devam eder. Bunu engellemek için daha önce bu konuda çalışma yapmış bir arkadaş varmı? Yada bu chiplere özel picbasic pro içerisinde kullanılabilen hazır bir komut varmı?
Şimdiden Teşekkür eder çalışmalarınızda başarılar dilerim..
Saygılarımla...
BİRLİKTEN KUVVET DOĞAR:

arif

Merhaba,
Ccs C kullanıyorum.
Chipten okunan sayiyi ekrana hexadecimal yazdırınca problem ortadan kalkıyor.

printf(lcd_putc,"%2x:%2x ",hour,min);

%2x ---> iki basamaklı hex sayıya donusturerek yaz demek.
Kolay gelsin.

mmengi

Hex olarak yazdırmak bir çözü fakat tarih yada saati edit ederken mutlaka sıkıntı çıkacaktır. okunan BCD değerler DECIMAL e çevrilip üzerinde işlem yapıldıktan sonra tekrar BCD ye çevrilip ds1307 ye yazılması gerekmektedir.


ConvertBCD:
	B=A DIG 1
	B=B<<4
	B=B+A DIG 0
	Return


ConvertDEC:
   B=((A>>4)&$0F)*10+(A&$0F)
   Return

oyhan

Teşekkürler bende enson şu rutinleri yazdım..
MMengi senin kodları da bir inceleyim bakalım.

**********************************************
dechexcikar:
             dechex1= rsene&$0F
             dechex10= ((rsene>>4)&$0F)
         If  dechex10 >= $0A  then
             dechex10=$09
         endif
         if  dechex10=0 and dechex1=0  then
             dechex1=$09
             dechex10=$09
         endif
             dechex10=((dechex10<<4)&$F0)
         IF  dechex1 >= $0A then
             dechex1=$09
         endif
             dechex1=dechex1&$0F
             arsene=dechex10 | dechex1
         return
dectohextopla:          
             dechex1= rsene&$0F
             dechex10= ((rsene>>4)&$0F)
         IF  dechex1 >= $0A then
             dechex1=0
             dechex10=dechex10+1
         endif
             dechex1=dechex1&$0F
         If  dechex10 >= $0A   then
             dechex1=0
             dechex10=0
         endif
             dechex10=((dechex10<<4)&$F0)
             arsene=dechex10 | dechex1
         return
******************************************
BİRLİKTEN KUVVET DOĞAR: