Onderstaande code controleert of de RTC leeg is , indien ja word deze ingesteld op de waarde die bij SETTIME staan, zo niet kun je dit doen door eerst een verwijzing te maken naar SETTIME.
Dim Minuten As Byte ; minuten (decimaal) Dim Seconden As Byte ; seconden (decimaal) Dim Uren As Byte ; uren (decimaal Dim Dag As Byte ; datum v/d maand (decimaal Dim Maand As Byte ; maand (decimaal) Dim JaarVier As Byte ; jaar zoals in PCF8583 (hoogste 2 bits in YearDays) Dim Jaar As Word ; jaar Dim Weekdag As Byte Dim WeekdagString[2] As Byte Dim MaandString[3] As Byte ;Het jaar wordt in de PCF8385 alleen bijgehouden in een vier ;jaars tijdvak (0 tot 3) waarbij 0 het schrikkeljaar is. ;De software waarin de PCF8385 opgenomen is moet zelf een ;variable bijhouden waaruit het uiteindelijke jaar berekend kan worden. ;In dit voorbeeld wordt daar JaarDev4 voor gebruikt. JaarDev4 ;moet met 1 verhoogd worden wanneer het jaar in de PCF8583 ;van 3 naar 0 verandert. Dim YearDays As Byte ;bit 0 tot 3 voor dag eenheden, bit 4 ;en 5 voor dag tientallen (0-3), bit 6 en 7 jaar (0-3). Dim WeekDayMonths As Byte ;bit 0 tot 3 voor maand eenheden, bit 4 voor maand ;tientallen (0-1), bit 5 tot 7 weekdagen (0-6). Dim secs As Byte ;bit 0 tot 3 voor seconden eenheden, bit 4 tot 6 ;voor seconden tientallen (0-5), bit 7 niet gebruikt. Dim mins As Byte ;bit 0 tot 3 voor minuten eenheden, bit 4 tot 6 ;voor minuten tientallen (0-5), bit 7 niet gebruikt. Dim hrs As Byte ;bit 0 t0t 3 voor uren eenheden, bit 4 en 5 ;voor uren tientallen (0-2), bit 6 0=AM 1=PM , bit 7 0=24 ;uur mode, 1=12 uur mode(AM/PM). Dim JaarDev4 As Byte ;hoogste 7 bits = jaar - 2000 gedeeld door 4 ;(wordt niet door PCF8583 geupdate), laagste bit is jaar3 flag Dim jaar3 As Byte ;flag om de jaar overgang van 3 naar 0 ;(schrikkeljaar)te kunnen detecteren voor update van JaarDev4 Dim dummy As Byte ;hulp variable. Symbol PCF8583r = $A0 ;Adres om PCF8583 uit te lezen (r = read) Symbol PCF8583w = $A1 ;Adres om naar PCF8583 te schrijven (w = write) Symbol PCF8574A_ADDR =$70 ;$70 is schrijf $71 is lezen Clear DelayMS 200 'stabilizza LCD Cls If hrs = 0 And YearDays = 1 And WeekDayMonths = 1 Then ;reset status van de PCF8583. (PCF8583 is leeg) GoSub setTime ;Stelt klok in End If GoSub getTime Loop: GoSub WerkingIC GoSub getTime Print At 1 , 1, Str WeekdagString, " ", Dec2 Dag," ",Str MaandString," ", Dec4 Jaar, " " Print At 2 , 1 , @Uren, ":", Dec2 Minuten, ":", Dec2 Seconden, " " Print At 3,5,Dec Weekdag DelayMS 100 GoTo Loop getTime: HBusIn PCF8583r, $02, [secs, mins, hrs,YearDays,WeekDayMonths] ;haal tijd op vanuit de PCF8583 HBusIn PCF8583r, $10, [ JaarDev4 , jaar3] ;haal jaar op (-2000 / 4) Seconden = ((secs >> 4) * 10) + (secs & 15) ;zie proton help "Math Operators" Minuten = ((mins >> 4) * 10) + (mins & 15) Uren = ((hrs >> 4) * 10) + (hrs & 15) Dag = (((YearDays >> 4 ) & 3 ) * 10) + (YearDays & 15) Maand = (((WeekDayMonths >> 4) & 1 ) * 10) + (WeekDayMonths & 15) JaarVier = (YearDays >> 6) Weekdag = (WeekDayMonths >> 5) Jaar = 2000 + JaarVier + (JaarDev4*4) If JaarVier = 3 Then ;Twee if statements om JaarDev4 eens in de 4 jaar te verhogen jaar3 = 1 ;Bij overgang naar schrikkeljaar HBusOut PCF8583w, $11, [ jaar3 ] End If If JaarVier = 0 And jaar3 = 1 Then ; omslag naar jaar 0 (schrikkeljaar) jaar3 = 0 JaarDev4 = JaarDev4 + 1 ; JaarDev ophogen met 1 HBusOut PCF8583w, $10, [ JaarDev4, jaar3 ] End If Select Case Weekdag Case 0 Str WeekdagString = "Zo" Case 1 Str WeekdagString = "Ma" Case 2 Str WeekdagString = "Di" Case 3 Str WeekdagString = "Wo" Case 4 Str WeekdagString = "Do" Case 5 Str WeekdagString = "Vr" Case 6 Str WeekdagString = "Za" Case 7 Str WeekdagString = "Zo" End Select Select Case Maand Case 1 Str MaandString = "Jan" Case 2 Str MaandString = "Feb" Case 3 Str MaandString = "Mar" Case 4 Str MaandString = "Apr" Case 5 Str MaandString = "Mei" Case 6 Str MaandString = "Jun" Case 7 Str MaandString = "Jul" Case 8 Str MaandString = "Aug" Case 9 Str MaandString = "Sep" Case 10 Str MaandString = "Okt" Case 11 Str MaandString = "Nov" Case 12 Str MaandString = "Dec" End Select Return setTime: ;Wordt in dit voorbeeld alleen gebruikt om lege PCF8583 te vullen Seconden = 00 ;Waarden voor "Do 28 Feb 2012 23:59:55" (testen schrikkeldag) Minuten = 10 Uren = 9 Dag = 23 Maand = 2 Jaar = 2014 Weekdag = 7 ; Zondag dummy=Seconden/10 ;dummy is tientallen van Seconden dummy=dummy*16 ;waarde doorschuiven naar de vier MSB secs=Seconden//10 ;secs is eenheden van Seconden secs=secs | dummy ;Bitwise OR combineert beide waarden in een byte dummy=Minuten/10 dummy=dummy*16 mins=Minuten//10 mins=mins | dummy dummy=Uren/10 dummy=dummy*16 hrs=Uren//10 hrs=hrs | dummy JaarVier = (Jaar - 2000) // 4 'rest van Jaar-2000 gedeelt door 4 YearDays = (JaarVier << 6) + ((Dag / 10) << 4) + (Dag // 10) JaarDev4 = ((Jaar - 2000) / 4) ;Integer van Jaar-2000 gedeeld door 4 WeekDayMonths = (Weekdag << 5) + ((Maand/10) << 4) + (Maand //10) HBusOut PCF8583w, $02, [ secs,mins,hrs, YearDays,WeekDayMonths ] HBusOut PCF8583w, $10, [ JaarDev4 ] Return
Ingestuurd door: pascalbianca