pic ana programı etkilemeyecek saat

Başlatan yunus417, 09 Ocak 2019, 11:21:41

yunus417

kolay gelsin arkadaşlar .pic16g887 ve 20*4 lcd ekranı kullanıyorum.  eğer portc.0=1  ise cihaz farklı programa dallanacak ve tekrar ana menüye dönecek. ana menüde sürekli sensör denetimi yapacak ve değişiklik olursa farklı alanlara yönelecek. menüye döndüğünde ise saat normal olarak devam etmesi gerekecek. ben gosub return ve tmr0 ile yapmaya çalıştım ama ya ana program aksadı ya da saat ana menüde olmayınca saymadı. bu konuyu nasıl geçebilirim. kolay gelsin.

ete

Bu şekilde soru sorarsan sittin sene cevap alamazsın. Cevap verecek kişi neye göre versin?. Kendini cevap verecek kişi yerine bir koyuver istersen. Mesela benim yerime. Yardımcı olmak isterim ancak nasıl olayım ortada bir kod yok şema yok yeniden bir sürü kod mu yazayım? yazsam bile neye göre yazacağım. Orada belirttiğin PORTC.0=1 olunca farklı yere dallanacak kelimesi üzerinden bir şey yapılması mümkün değil.
Asıl sorunuda net olarak belirtmemişsin. Ortada bir sorun olduğu belli peki hangileri sorun. Birini yapınca diğeri olmuyor kelimesi sorun açıklamayada yetmiyor.
Bu soruya cevap olarak yazabileceğim sadece şunlar olabilir ;
Bu tür programlarda benzer sorun yaşıyor ise dallandığın yerde uzun müddet kalacak ise sensör kontrolüne orada da devam edeceksin. Saat işinide harici RTC entegrelerine bırakacaksın zaman zaman gidip o entegreden saat okuyacaksın. RTC olarak tavsiyem DS1307.

Ete

yunus417

üstad benim programla işim yok aslında onun için bilgi vermedim. saatimin ana programı etkilemeden ekranda diger bilgilerle ( ısı ve sensörden gelen cisim var mı yokmu bilgisi.) yer almasını istiyorum. farklı konularda ds1302 yi değil ds1307 yi önerdiğini de okudum. yanıtında da var zaten benim için burası önemliydi. bunun için pic basicte hangi registeri kullanmam gerekiyor. rs1307 yi nasıl bir osilatörle bağlamam lazım. picin hangi pinlerine bağlamam gerekiyor veya farkı var mı . teşekkürler ... 

ete

DS1307 I2C ile haberleşir. Data sheetine bakıp hangi registerleri var register adresleri hangisi görebilirsin.
yazdığım bir programdan ilgili satırları buraya koyuyorum. Böylece nasıl saat okunduğunu bilginin BCD den nasıl çekilip alındığını görebilirsin.
ZAMANOKU:
        I2CRead SDA,SCL,$D0,$00,[SN,DAK,SAAT]',HAFGUN,GUN,AY,YIL,TEMP]
        temp=saat
        SAAT=(temp>>4) & $03
        saat=saat*10+(temp & $0F)
        dak=((dak>>4) & $0F)*10+(dak & $0F)
        sn=((sn>>4) & $0F)*10+(sn & $0F)
        RETURN

zaman_yaz: 'saat ayarı verilmesi
        Z=0:sn=0':GUN=1:AY=%00000110:YIL=%00010010
        SAAT=(SAAT DIG 1)<<4+SAAT DIG 0
        DAK =(DAK DIG 1)<<4+DAK DIG 0
        GUN =(gun DIG 1)<<4+GUN DIG 0
        AY  =(AY DIG 1)<<4+AY DIG 0
        YIL =(YIL DIG 1)<<4+YIL DIG 0
        I2CWrite SDA,SCL,$D0,$00,[SN,DAK,SAAT,HAFGUN,GUN,AY,YIL,TEMP]
        PAUSE 10
        WHILE SEC=0:WEND
        son=28       
        GOTO BASLA

Özel bir pin vs verilmesi gerekmez. Data ce CLK bacaklarına 10K pullup direnci bağlanmalıdır.
DS1307 nin OSC bacaklarına 32768 Hz lik (32,768 Khz) kristal bağlanacak.
Ete


yunus417

Ete hocam verdiğin bilgiler doğrultusunda ds1307 yi pice bağladım. Yazmış olduğun kodu proton derleyici derlemedi. Pic basic olarak ben kodları araştırıyorum. Şuan tek sorunum ds1307 yi portc4 ve portc. 3 ten tanımlamak. Datashet e baktığımda register ile ilgili bilgi bulamadım.

ete

Protonda ildiğim kadarı ile ;
I2CREAD komutu yerine BUSIN KOntrol, Adres, [Değişken,Değişken.....] şeklinde komut kullanılıyor.
Bu komut da eksik olan Data ce CLK parametreleri için programın başında Declare komutunu kullanman gerekiyor.
DECLARE SDA_PIN  PORT.PIN    (Mesela DECLARE SDA_PIN PORTC.4)
DECLARE SCL_PIN PORT.PIN     (Mesla DECLARE SCL_PIN PORTC.3)

I2CWRITE komutu yerine de  BUSOUT Kontrol , Adres ,[Değişken .....] şeklinde kullanılıyor.
SDA ve SCL tanımlamaları bu komut içinde geçerli oluyor otomatikman.

Data sheet de özel bir register arama bence Sayfa-4 de  DS1307 Adress Map var ona bak hangi bilgi hangi sırada tutuluyor onu gör (zaten verdiğim kod parçasından da belli oluyor) ve yine 5.Sayfada, DS1307 Time Keeper Registers diye açıklanmış bir tabloda da bütün hepsini detaylı göstermiş adamlar. Sen nasıl bulamadın onuda anlamadım.
Yalnızca Saniye registerini açıklayayım.
8 bitlik bu registerin 7. biti CH (Clock Halt) yani saati durdurma bitidir. Fabrikadan bu bit 1 olarak çıkar. 1 olduğu müdddetçe saat çalışmaz saymaz yani. İlk yapılacak iş bu bitin 0 yapılmasıdır. Bunu ayar verirken otomatik yaparsın.
%x xxx xxxx şeklinde üç guruba ayırabiliriz bu bilgiyi. En soldaki CH biti.  sonraki 3 bit Saniye bilgisi onlar hanesini gösterir, sonraki 4 bit ise birler hanesi bilgisini gösterir.
%x 010 0111 şeklindeki (%00100111) bir saniye bilgisinin gerçek değeri %010=desimal 2  ve %0111=desimal 7 olduğundan SN=27 şeklinde çevrilir.
Saat bilgisini DS1307 ya bir kere yazıp ayar vermek gerekiyor.  Bu yazma işide benzer şekilde yapılır.
Saniyenin onlar hanesini alırsın 4 bit sola kaydırırsın buna birler hanesini eklersin böylece sn bilgisi BCD (binary Kodlanmış Desimal) bilgi formatına dönmüş olur.
Diğer registerlerde benzer şekilde  yapılır. Saat registeri aynı zamanda 12/24 saat format bilgisinide tutar. 6 bit=0 ise 12 saat 1 ise 24 saat üzerinden çalışır saatin. Saat bilgisinde yalnızca 0-1-2 desimal bilgileri kullanılacağı için onun yalnızca 2 biti vardır (onlar hanesi için) birler hanesi yine 4 bitdir.
Çevirme işlemlerini kolaylıkla yapabilecek kodu ekledim aynı kod Protonda da çalışacaktır (sanırım) değilse prensibini anlattım kendin yazarsın gerekeni.
Umarım anlaşılmıştır.
Ete


yunus417

ete hocam giriş için i2cin komutu kullanılıyor. i2cin yazınca sda ve scl için ipuçları çıkıyor. gösterildiği gibi yapmama ragmen derlemiyor. nerde hata yapıyorum acaba.

Declare     SDA_Pin  PORTC.4
Declare     SCL_Pin PORTC.3


ana:


GoSub read_time
Print At 1,1,Dec2 hr1, ":" , Dec2 mins1,":",Dec2 sec1
Print At 1,1,Dec2 date1,".", Dec2 mon1, ":" ,Dec2 yr1   
If hour=0 Then GoTo uphour
If minut=0 Then GoTo upminut           
DelayMS 20
GoTo ana



read_time:
I2CIn  SDA _ PORTC.3, SCL PORTC.4,(sec,mins,hr,day,date,mon,yr) ( bu komutu bir türlü derleyemedi program.)



ete

Sda ve scl isimlerini eklentisiz SDA ve SCL olarak yazıp tekrar dene
Ete

Hattuşa

işinize yararmı bilmem ama protonda DS1302 saat entegresi ile ilgili kod, yanılmıyorsam DS1307 ile aşağı yukarı aynı olması lazım. programı tüm veriyorum, işine yarar kısımları kullanabilirsin. kodlar MAXIM ustaya ait olması lazım. takılırsan gene yaz.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [ESAT METİN ERDOĞAN]                              *
'*  Notice  : Copyright (c) 2011 [İZİNSİZ KULLANMAK HARAMDIR]   *
'*          : All Rights Reserved                               *
'*  Date    : 08.09.2011                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device = 16F877A
Config CP_ALL, DEBUG_OFF, WRT_OFF, CPD_ON, LVP_OFF, BODEN_OFF, PWRTE_ON, WDT_OFF, XT_OSC
Xtal = 4
Include "MODEDEFS.BAS"
'***********************ADC TANIMLAMALARI************************
TRISA=0
TRISB=%11111001
TRISC=0
TRISE=0
OPTION_REG.6=0'RB.0 PİNİ DÜŞEN KENARDA KESME
OPTION_REG.7=0'DAHİLİ PULL UP DİRENÇLERİ DEVREDE
ADCON1 = 7
ADCON0=0
ADCON1=%00000111
INTCON=%11010000'KESMELERE İZİN VER
T1CON=%00111101
PIE1.0=1'
On Interrupt GoTo KESME
Dim PP7HH As Byte System
Dim PP7HHH As Byte System
'***************************DEĞİŞKENLER**************************
Dim XPOS As Byte,YPOS As Byte,HAM As Word,ISI As Word,KSRT As Word,SA_YNL As Byte
Dim SA As Byte,DK As Byte,SN As Byte,MESGUL As Byte,ISRT As Byte,HIZ As Byte
Dim TMR0_SAY As Word,KM_YNL As Byte,ESK_HIZ As Byte,YN_HIZ As Byte,GUN As Byte
Dim AY As Byte,YIL As Byte,MEM As Byte,SAYI As Byte,DAY As Byte,BIRLER As Byte
Dim ONLAR As Byte,DS_SAY As Byte,EKRN_YNL As Byte,OK As Byte,A_DAY As Byte
Dim A_SN As Byte,A_DK As Byte,A_SA As Byte,A_GUN As Byte,A_AY As Byte,A_YIL As Word
'DIM F As Dword,KAN AS WORD
'****************************************************************

'****************************************************************
Symbol SDA = PORTC.3
Symbol SCL = PORTC.0
Symbol RST=PORTE.0
Symbol CLK=PORTE.2
Symbol DTA=PORTE.1
Symbol DQ=PORTA.1
Symbol YUKARI=PORTB.5
Symbol ONAY=PORTB.4
Symbol ASAGI=PORTB.3
Symbol EKRAN_LED=PORTC.7
'******************LCD TANIMLAMALARI*****************************
LCD_DTPort = PORTD                 'GLCD DTA PORTLARI PORTD'YE BAĞLI
LCD_RSPin = PORTC.6                'GLCD RS PİNİ PORTB.5 BAĞLI
LCD_ENPin = PORTC.4                'GLCD ENABLE PİNİ PORTC.4 BAĞLI
LCD_RWPin = PORTC.5                'GLCD RW PİNİ PORTB.6 BAĞLI
LCD_CS1Pin = PORTB.1               'GLCD CS1 PİNİ PORTB.3 BAĞLI
LCD_CS2Pin = PORTB.2               'GLCD CS2 PİNİ PORTB.4 BAĞLI
LCD_Type =  GRAPHIC                'GLCD TİPİ GRAFİK KS0108 128*64 POWERTIP
Internal_Font = 1                 
Font_Addr = 0
GLCD_EXTERNAL_PRINT = PPRINT

DelayMS 500
PORTA=0
RST=0:CLK=0  'RESET VE CLOCK PİNLERİ SIFIRLADIK saat saymaya baslıyor   
GoSub DS_1302_OKU
GoSub DS_OKU
'GoTo KM_OLC
GoSub SIL
'KAN = 9000
'GOSUB PLL
'GOTO RADYO
'***************************************************************
'////////////////////BÜYÜK SAAT GÖSTER//////////////////////////
'***************************************************************
SAAT_GOSTER:
        EKRAN_LED=1
        If SN=0 Then GoSub SIL
        Print Font BUY_HRF_UST24
        Print At 0,0,Dec SA Dig 1
        Print At 0,30,Dec SA Dig 0
        Print At 0,68, Dec DK Dig 1
        Print At 0,98, Dec DK Dig 0
        Print Font BUY_HRF_ALT24
        Print At 24,0,Dec SA Dig 1
        Print At 24,30,Dec SA Dig 0
        Print At 24,68, Dec DK Dig 1
        Print At 24,98, Dec DK Dig 0
'-------------------SANİYE GÖSTERGELERİ-------------------------
        Print Font PROTON_FONT
        For XPOS = 60 To 65 : LCDWrite 1, XPOS, [0]:Next XPOS
        Print At 8,60,Dec1 SN Dig 1
        For XPOS = 60 To 65 : LCDWrite 4, XPOS, [0]:Next XPOS
        Print At 32,60,Dec1 SN Dig 0
'--------------------TARİH VE GÜN GÖSTER-------------------------
        Select DAY
        Case 1:Print At 48,0,"PAZAR"
        Case 2:Print At 48,0,"PAZARTESi"
        Case 3:Print At 48,0,"SALI"
        Case 4:Print At 48,0,"cARsAMBA"
        Case 5:Print At 48,0,"PERsEMBE"
        Case 6:Print At 48,0,"CUMA"
        Case 7:Print At 48,0,"CUMARTESi"
        EndSelect
        Print At 56,0,Dec2 GUN,".",Dec2 AY,".20",Dec2 YIL
       
        Print At 56,93,"#12:30"'ALARM/ÇAN İŞARETİ 56,65,76
'-----------------------SICAKLIK GÖSTER--------------------------
        If SN=0 Then GoSub DS_OKU:For XPOS=94 To 127 : LCDWrite 6,XPOS,[0]:Next XPOS
        If ISRT=0 Then Print At 48,94,"+" : Else: Print At 48,94,"-"
        Print At 48,100, Dec2 ISI,",",Dec1 KSRT,"^"
'----------------------------PİL GÖSTER--------------------------
        'Line 1,116,56,126,56'PİL ÜST ÇİZGİSİ
        'Line 1,116,63,126,63'PİL ALT ÇİZGİSİ
        'Line 1,115,56,115,63'PİL + KUTUP BİTİŞİĞİ ÇİZGİSİ
        'Line 1,127,56,127,63'PİL - KUTUP ÇİZGİSİ
        'Line 1,114,58,114,61'PİL + KUTUP ÇİZGİSİ
        'PRINT AT 48,60,"102.5"'48,60 RADYO FREKANS GÖSTER
        SA_YNL=0
'----------------------------------------------------------------
SA_OYLN:
If ONAY=0 Then GoTo AYAR
'If ASAGI=0 Then DelayMS 200:GoTo KM_OLC
If SA_YNL=0 Then GoTo SA_OYLN
GoSub DS_1302_OKU
GoTo SAAT_GOSTER
'****************************************************************
'****************************************************************
AYAR:
        A_SA=SA:A_DK=DK:A_GUN=GUN:A_DAY=DAY:A_AY=AY:A_YIL=YIL
        GoSub TUS_BEKLET:GoSub SIL
AYARR:
        Print At OK,0,">"
        Print At  0,6,"SAAT__:",Dec A_SA
        Print At  8,6,"DAKiKA:",Dec A_DK
        Print At 16,6,"GuN___:",Dec A_GUN
        Print At 24,6,"HGN___:",Dec A_DAY
        Print At 32,6,"AY____:",Dec A_AY
        Print At 40,6,"YIL___:","20",Dec A_YIL
       
        If OK=0 Then
        If YUKARI=0 Then A_SA=A_SA+1:GoSub SIL
        If ASAGI=0 Then A_SA=A_SA-1:GoSub SIL
        If ONAY=0 Then OK=OK+8:GoSub TUS_BEKLET:GoSub SIL
        EndIf
       
        If OK=8 Then
        If YUKARI=0 Then A_DK=A_DK+1:GoSub SIL
        If ASAGI=0 Then A_DK=A_DK-1:GoSub SIL
        If ONAY=0 Then OK=OK+8:GoSub TUS_BEKLET:GoSub SIL
        EndIf
       
        If OK=16 Then
        If YUKARI=0 Then A_GUN=A_GUN+1:GoSub SIL
        If ASAGI=0 Then A_GUN=A_GUN-1:GoSub SIL
        If ONAY=0 Then OK=OK+8:GoSub TUS_BEKLET:GoSub SIL
        EndIf
       
        If OK=24 Then
        If YUKARI=0 Then A_DAY=A_DAY+1:GoSub SIL
        If ASAGI=0 Then A_DAY=A_DAY-1:GoSub SIL
        If ONAY=0 Then OK=OK+8:GoSub TUS_BEKLET:GoSub SIL
        EndIf
       
        If OK=32 Then
        If YUKARI=0 Then A_AY=A_AY+1:GoSub SIL
        If ASAGI=0 Then A_AY=A_AY-1:GoSub SIL
        If ONAY=0 Then OK=OK+8:GoSub TUS_BEKLET:GoSub SIL
        EndIf
       
        If OK=40 Then
        If YUKARI=0 Then A_YIL=A_YIL+1:GoSub SIL
        If ASAGI=0 Then A_YIL=A_YIL-1:GoSub SIL
                If ONAY=0 Then
                OK=0
                SA=A_SA:DK=A_DK:SN=0:GUN=A_GUN:DAY=A_DAY:AY=A_AY:YIL=A_YIL
                GoSub DS_1302_YAZ
                GoSub TUS_BEKLET
                GoSub DS_1302_OKU
                GoTo SAAT_GOSTER
                EndIf
       
        EndIf
       
        If A_SA>23 Then A_SA=0
        If A_DK>59 Then A_DK=0
        If A_GUN>31 Then A_GUN=1
        If A_DAY>7 Then A_DAY=1
        If A_AY>12 Then A_AY=1
        If A_YIL>99 Then A_YIL=13
       
        DelayMS 250
               
        GoTo AYARR
'****************************************************************
'//////////////////////////RADYO DİNLE///////////////////////////
'****************************************************************
'RADYO:
        'Print Font PROTON_FONT
        'PRINT AT 0,0,Dec KAN/100,".",DEC KAN DIG 1       
       
        'IF YUKARI=0 THEN KAN=KAN+10:DELAYMS 250:GOSUB PLL
        'IF ASAGI=0 THEN KAN=KAN-10:DelayMS 250:GoSub PLL
       
        'GOTO RADYO
'****************************************************************
'PLL:
        'PORTA.3=1
        'PORTA.4=1
        'F = KAN * 10000 + 225000
        'F = F * 4 / 32768
        'I2COut SDA,SCL,192,[F.HIGHBYTE,F.LOWBYTE,16,16,0]
        'GoSub SIL 
        'RETURN
'****************************************************************
'///////////////////HIZ VE MESAFE ÖLÇÜM//////////////////////////
'****************************************************************
'KM_OLC:
        'HIZ=120
        'While ASAGI=0:Wend
        'Cls
        'Print Font BUY_HRF_UST24
        'If HIZ>99 Then' 3 HANELİ
        'Print At 0,19,Dec HIZ Dig 2
        'Print At 0,49,Dec HIZ Dig 1
        'Print At 0,79,Dec HIZ Dig 0
        'GoTo ALT_SATIR_1
        'EndIf
        'If HIZ>9 Then' 2 HANELİ
        'Print At 0,34,Dec HIZ Dig 1
        'Print At 0,64,Dec HIZ Dig 0
        'EndIf
        'If HIZ<10 Then Print At 0,49,Dec HIZ Dig 0'TEK HANELİ

'ALT_SATIR_1:       
        'Print Font BUY_HRF_ALT24
        'If HIZ>99 Then' 3 HANELİ
        'Print At 24,19,Dec HIZ Dig 2
        'Print At 24,49,Dec HIZ Dig 1
        'Print At 24,79,Dec HIZ Dig 0
        'GoTo ALT_SATIR_2
        'EndIf
        'If HIZ>9 Then' 2 HANELİ
        'Print At 24,34,Dec HIZ Dig 1
        'Print At 24,64,Dec HIZ Dig 0
        'EndIf
        'If HIZ<10 Then Print At 24,49,Dec HIZ Dig 0'TEK HANELİ
'--------------------TARİH VE DİĞER BİLGİLER---------------------
'ALT_SATIR_2:
        'GoSub DS_1302_OKU       
        'Print Font PROTON_FONT
        'For XPOS=0 To 48 : LCDWrite 6,XPOS,[0]:Next XPOS
        'Print At 48,0,Dec2 SA,":",Dec2 DK,":",Dec2 SN
        'Print At 56,0,Dec2 GUN,".",Dec2 AY,".20",Dec2 YIL
        'SA_YNL=0       
       
'KM_EKN_YNL:
        'IF SN=0 THEN GOTO KM_OLC' EKRANI YENİLE
        'If SA_YNL=0 Then GoTo ALT_SATIR_2
        'If YUKARI=0 Then DelayMS 200:Cls:GoTo SAAT_GOSTER
        'If SA_YNL=0 Then GoTo KM_EKN_YNL
        'GoTo ALT_SATIR_2
        'GoTo KM_OLC
'****************************************************************
'////////////////////SICAKLIK SENSÖRÜNÜ OKU//////////////////////
'****************************************************************
DS_OKU:
        DS_SAY=0
        OWrite   DQ, 1, [$CC, $44]
        DelayMS 750
OYALAN:
        ORead    DQ, 4, [MESGUL]
        If      MESGUL = 0 Then OYALAN
        OWrite   DQ, 1, [$CC, $BE]
        ORead    DQ, 2, [HAM.LowByte, HAM.HighByte]
        HESAPLA:
        ISRT=HAM.11'   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
        If ISRT=1 Then GoTo NEGATIF
        ISI=HAM/16
        KSRT=ISI*16
        KSRT=((HAM-KSRT)*10)/16
        Return
NEGATIF:
        ISI=(65537-HAM)/16
        KSRT=ISI*16
        KSRT=((65537-HAM-KSRT)*10)/16
        Return
'****************************************************************
'BTN_BKLT:
        'While YUKARI=0 Or ONAY=0 Or ASAGI=0:DelayMS 100:Wend       
        'Return
'****************************************************************
'////////////////////////DS1302 OKU-YAZ//////////////////////////
'****************************************************************                           
DS_1302_OKU:
        RST=1
        SHOut DTA,CLK,0,[$BF]
        SHIn DTA,CLK,1,[SN,DK,SA,GUN,AY,DAY,YIL,MEM]  'OKU
        RST=0
        MEM=SN:GoSub CEVIR:SN=SAYI 
        MEM=DK:GoSub CEVIR:DK=SAYI
        MEM=SA:GoSub CEVIR:SA=SAYI
        MEM=GUN:GoSub CEVIR:GUN=SAYI
        MEM=AY:GoSub CEVIR:AY=SAYI
        MEM=YIL:GoSub CEVIR:YIL=SAYI
        MEM=DAY:GoSub CEVIR:DAY=SAYI
       
        Return
'----------------------------------------------------------------
DS_1302_YAZ:
        MEM=SN:GoSub TERSCEVIR:SN=SAYI
        MEM=DK:GoSub TERSCEVIR:DK=SAYI
        MEM=SA:GoSub TERSCEVIR:SA=SAYI
        MEM=GUN:GoSub TERSCEVIR:GUN=SAYI
        MEM=AY:GoSub TERSCEVIR:AY=SAYI
        MEM=YIL:GoSub TERSCEVIR:YIL=SAYI
       
        RST=1
        SHOut DTA,CLK,0,[$8E,0]    'YAZMAK İÇİN HAZIRLA
        RST=0:DelayMS 1
        RST=1         
        SHOut DTA,CLK,0,[$BE, SN, DK, SA,GUN,AY,DAY,YIL,0]  'YAZ, DAY:RTC DE HAFTANIN GÜNÜ
        RST=0                 
        DelayMS 10
CEVIR:
         ONLAR=MEM & %01110000
         ONLAR=ONLAR>>4
         BIRLER=MEM & %00001111
         SAYI=ONLAR*10+BIRLER
         Return 

TERSCEVIR:               
         ONLAR=MEM Dig 1
         ONLAR=ONLAR<<4
         BIRLER=MEM Dig 0
         SAYI=ONLAR+BIRLER
         Return
'****************************************************************
TUS_BEKLET:
        While ONAY=0:DelayMS 100:Wend
        Return
'****************************************************************
SIL:
        Cls
        Return
'/////////////////////////KESME//////////////////////////////////
'****************************************************************
Disable
KESME:
        'INTCON.7=0'KESMELERİ KAPAT
'----------------------TIMER1 KESMESİ----------------------------
        If PIR1.0=1 Then'TIMER1 KESME BAYRAĞI KURULMUŞSA
        EKRN_YNL=EKRN_YNL+1
        TMR1H=%00001011' 1/8 TİMER ÖN YÜKLEME 3037, 0.5 SANİYEDE BİR KESME
        TMR1L=%11011101' 1/16 OLSAYDI 1 SANİYE OLACAKTI
        PIR1.0=0'TIMER1 taşma bayrağını sıfırla
        EndIf
       
        If EKRN_YNL>1 Then EKRN_YNL=0:SA_YNL=1 
'----------------------DİĞER KESMELER----------------------------       
        'INTCON.7=1'KESMELERİ AÇ
        'INTCON.1=0'RB.0 KESMESİ
         
        Resume'KESME BİTTİ, PROGRAM KALDIĞI YERDEN DEVAM
'****************************************************************
'////////////////////////FONTLAR/////////////////////////////////
'****************************************************************
End
'Include "FONT.INC"
Include "PRTN_FONT.fnt"
Include "BUY_HRF_UST.fnt"
Include "BUY_HRF_ALT.fnt"


yunus417

pro-Tr hocam bir çok hata verdi. düzelttikçe yeni hatalar aldım bende onun yerine bir arkadaştan kod buldum gerekli ayarlamaları yaptım. ama ekranda saat kısmında 55/55/55  tarih kısmında 55/55/55 değerlerini görüyorum.




Device = 16F887
@CONFIG_REQ
@__CONFIG _CONFIG1, HS_OSC & WDT_OFF & MCLRE_ON & PWRTE_ON & DEBUG_OFF & LVP_OFF & FCMEN_OFF & IESO_OFF & BOR_SBODEN & CPD_OFF & CP_OFF

Xtal = 20
All_Digital = True      ' Set PORTA and PORTE to all digital
Declare PortB_Pullups = On

TRISA = %111111     ' PORTA giriş olarak tanımla
TRISB = %11111111    ' PORTB giriş olarak tanımla
TRISC = %00000000 ' PORTC nin tüm bitlerini çıkış olarak ayarla
TRISD = %00000000 ' PORTD nin tüm bitlerini çıkış olarak ayarla
TRISE = %111     ' PORTE nin tüm bitlerini giriş olarak ayarla

Declare LCD_DTPin = PORTD.4
Declare LCD_RSPin = PORTD.2
Declare LCD_ENPin = PORTD.3
Declare LCD_Interface = 4 ' 4-bit Interface
Declare LCD_Lines = 2         
Declare LCD_Type = 0

ADCON1 =%00000111        ' PORTA ve PORTE digital girişler aktif.
OPTION_REG = %00000000        ' PORTB PULLUP AKTİF

Symbol rst PORTC.0
Symbol dta PORTC.4
Symbol clk PORTC.3

Dim year As Byte
Dim day As Byte
Dim month As Byte
Dim date As Byte
Dim hour As Byte
Dim mint As Byte
Dim sec As Byte
Dim control As Byte
'--------------------------
TRISA=%00000000
DelayMS 100
Print Cls,"RTC Display"
DelayMS 25
'--------------------------
Low rst 'reset rtc
Low clk
'-----------------------
year=05
day=3
month=8
date=15
hour=4
mint=0
sec=0
'----------------------
'set rtc with data
Set rst
SHOut dta,clk,LsbFirst,[$8e,0]
Clear rst
Set rst
SHOut dta,clk,LsbFirst,[$be,sec,mint,hour,date,month,day,year,0]
Clear rst
'-------------------------
loop:
GoSub get_time
Print Cls,Dec2 date,"/",Dec2 month,"/",Dec2 year
Print At 2,1,Hex2 hour,"/",Hex2 mint,"/",Hex2 sec
DelayMS 300
GoTo loop
'-------------------------
get_time:
Set rst 'ready for transforme
SHOut dta,clk,LsbFirst,[$bf]
SHIn dta,clk,LsbPre,[sec,mint,hour,date,month,day,year,control]
Clear rst
Return

Powered by EzPortal