Ich habe noch was gefunden, aber die Taktzahlabfrage immer noch nicht. Aber das sollte auch gehen da ich schon gelesen habe das damit auch Frequenzzähler gebaut werden
Code:'------------------- AN 4 ----------------------------- ' Copyright 1998-2002 MCS Electronics ' CLOCK.BAS 'This AN shows how to use the PCF8583 I2C clock device 'The PCF8583 is a PHILIPS device. Look at the datasheet for more details 'I have used the STK200 to test the program with a 8515 '------------------------------------------------------ $crystal = 3686400 $baud = 19200 On Int0 Onls 'Interrupt 0 verweist auf die Sub Onls Config Int0 = Falling 'Interrupt 0 reagiert auf fallende Flanke Enable Int0 'Interrupt 0 aktivieren Enable Interrupts 'generell alle Interrupts aktivieren Config Portb = Output Portb = 63 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portb.0 , Db7 = Portd.7 , E = Portd.5 , Rs = Portd.4 Config Lcd = 40 * 2 Declare Sub Settime(byval S1 As Byte , Byval M1 As Byte , Byval H1 As Byte , Byval D1 As Byte , Byval Month1 As Byte) Declare Sub Gettime() Declare Sub Setalert(byval S1 As Byte , Byval M1 As Byte , Byval H1 As Byte , Byval D1 As Byte , Byval Month1 As Byte) 'Declare variables Dim Tm(5) As Byte At &H60 Dim I As Byte , Temp As Byte , Cnt As Byte Cnt = 31 'These are pointers to tm() for simple handling. Dim S As Byte At &H60 Overlay Dim M As Byte At &H61 Overlay Dim H As Byte At &H62 Overlay Dim D As Byte At &H63 Overlay Dim Month As Byte At &H64 Overlay 'configure the used port pin for I2C Config I2cdelay = 5 ' default slow mode Config Sda = Portc.4 Config Scl = Portc.5 Cls Lcd "PCF8583 Clock Sample" Call Settime(0 , 30 , 12 , 1 , 8) 'set time Call Setalert(0 , Cnt , 12 , 1 , 8) Wait 2 Do Call Gettime Cls Lcd Hex(d) ; "." ; Hex(month) ; ". - " ; Hex(h) ; ":" ; Hex(m) ; ":" ; Hex(s) ; " Err:" ; Err Lowerline Lcd "alarmminute: " ; Str(cnt) Wait 1 Loop End Sub Gettime() 'there are 2 ways to get the time. With low level I2C calls or with a high level call 'first the high level call Tm(1) = 2 ' point to second register I2creceive &HA0 , Tm(1) , 1 , 5 ' write the second address and get 5 bytes back 'i2creceive will first write 1 byte from tm(1) which is 2, and then will read 5 bytes and store it onto tm(1)-tm(5) 'and optional with low level calls ' For I = 1 To 5 ' Temp = I + 1 ' I2cstart ' I2cwbyte &HA0 'write addres of PCF8583 ' I2cwbyte Temp 'select register ' I2cstart 'repeated start ' I2cwbyte &HA1 'write address for reading info ' I2crbyte Tm(i) , Nack 'read data ' Next ' I2cstop End Sub Sub Settime(s1 As Byte , M1 As Byte , H1 As Byte , D1 As Byte , Month1 As Byte) 'values are stored as BCD values so convert the values first Tm(1) = Makebcd(s1) 'seconds Tm(2) = Makebcd(m1) 'minutes Tm(3) = Makebcd(h1) 'hours Tm(4) = Makebcd(d1) 'days Tm(5) = Makebcd(month1) 'months I2cstart 'generate start I2cwbyte &HA0 'write address I2cwbyte 0 'jmp to control/status register I2cwbyte &B00000100 'control/status register I2cwbyte &B00000000 'setting 100th seconds I2cwbyte Tm(1) 'setting seconds I2cwbyte Tm(2) 'setting minutes to 45 I2cwbyte Tm(3) 'setting hours to 14 I2cwbyte Tm(4) 'setting days I2cwbyte Tm(5) 'setting month I2cwbyte &B00000000 'timer ... to 0 I2cstop End Sub Sub Setalert(s1 As Byte , M1 As Byte , H1 As Byte , D1 As Byte , Month1 As Byte) Tm(1) = Makebcd(s1) 'seconds Tm(2) = Makebcd(m1) 'minutes Tm(3) = Makebcd(h1) 'hours Tm(4) = Makebcd(d1) 'days Tm(5) = Makebcd(month1) 'months 'hier alarm-regiser I2cstart I2cwbyte &HA0 'write address I2cwbyte 8 'jmp to control/status register I2cwbyte &B10110000 'alarm control register I2cwbyte &B00000000 '100tel I2cwbyte Tm(1) 'sec I2cwbyte Tm(2) 'min I2cwbyte Tm(3) 'hours I2cwbyte Tm(4) 'date I2cwbyte Tm(5) 'month I2cwbyte &B00000000 'alarm timer I2cstop End Sub Onls: Portb.1 = 0 Waitms 100 Portb.1 = 1 Waitms 100 Incr Cnt I2cstart 'generate start I2cwbyte &HA0 'write address I2cwbyte 0 'jmp to control/status register I2cwbyte &B00000100 'control/status register I2cstop Call Setalert(0 , Cnt , 12 , 1 , 8) Return







Zitieren

Lesezeichen