Ohne mir jetzt Gedanken über Sinn oder Unsinn des Codes gemacht zu haben, so kompiliert das und entspricht funktional dem vorgegeben Code.
Die absolute Adressvergabe wird nirgends anders als im Overlay genutzt und da lässt man besser den Compiler die Variablen organisieren.
Code:$regfile = "ATtiny26.dat" 'Wir benutzen einen Tiny26 $crystal = 1000000 '1 MHz, Damit auch die Software davon weiss $hwstack = 32 $swstack = 24 $framesize = 24 $noramclear Const Eeprom_adress_w = &HA0 'Basisadresse des verwendeten EEPROMs 24C64A = &HA0 / 24C256 = &HA0 Const Eeprom_adress_r = Eeprom_adress_w + 1 'Nicht aendern! Dim Eeprom_size As Word ' Dim Last_icadr As Word ' Dim Measured_bytes As Byte ' Dim Bversion As Byte ' Dim Icadr As Word Dim Icadrlo As Byte At Icadr Overlay Dim Icadrhi As Byte At Icadr + 1 Overlay Dim Collected As Word 'Anzahl gespeicherter Datensätze im akt. Block Dim Collectedlo As Word At Collected Overlay ' Dim Collectedhi As Word At Collected + 1 Overlay ' Dim Wtemp0 As Word Dim Wtemp0lo As Byte At Wtemp0 Overlay ' Dim Wtemp0hi As Byte At Wtemp0 + 1 Overlay ' Dim Wtemp1 As Word '16Bit temporär Dim Btemp0 As Byte ' Dim Btemp1 As Byte ' Dim Stemp As String * 16 'String temporär 'Config & Init ---------------------------------------------- Ddra = &B00000000 'Ddra Input Porta = &B11111111 'pull-up Ddrb = &B01100000 'Ddrb.0 Input SDA (Mini-Datenlogger) 'DDrb.1 Input 'DDrb.2 Input SCL (Mini-Datenlogger) 'DDrb.3 Input Button 'DDrb.4 Input Seriell 'DDrb.5 Output Seriell 'DDrb.6 Output Reset (Mini-Datenlogger) 'DDrb.7 Input (Reset) Portb = &B01001000 'Portb.0 SDA (Mini-Datenlogger) 'Portb.1 'Portb.2 SCL (Mini-Datenlogger) 'Portb.3 pull-up für Button 'Portb.4 seriell 'Portb.5 seriell 'Portb.6 Reset (Mini-Datenlogger) 'Portb.7 Config Sda = Portb.0 'Ports fuer die I2C-Schnittstelle Config Scl = Portb.2 'I2cinit 'wird mit DDRB= und PORTB= miterledigt 'Reset Portb.0 (Sda) 'Reset Portb.2 (Scl) 'Reset Ddrb.0 (Sda) 'Reset DDrb.2 (Scl) Open "COMB.5:9600,8,N,1,INVERTED" For Output As #1 'Port für serielle Ausgabe 'Set Ddrb.5 'Reset Portb.5 'Program ---------------------------------------------------- _read_i2c: ' ' I2cstop ' Waitms 500 ' Icadr = 0 ' Gosub Read_eeprom ' Measured_bytes = Wtemp0lo ' Bversion = Wtemp0hi ' Gosub Read_eeprom ' Eeprom_size = Wtemp0 ' Print #1 , "no connect" If Bversion = 0 Then Goto _read_i2c If Bversion = 255 Then Goto _read_i2c If Measured_bytes = 0 Then Goto _read_i2c If Measured_bytes = 255 Then Goto _read_i2c If Eeprom_size = 0 Then Goto _read_i2c Shift Eeprom_size , Left , 8 ' Eeprom_size = Eeprom_size + 255 ' Print #1 , "MiniLogger;" Print #1 , ";" ; Bversion ; ";" ; Measured_bytes ; ";" ; Eeprom_size ; ";" Shift Measured_bytes , Right , 1 'lesen erfolgt word-weise Last_icadr = Eeprom_size - 4 ' Last_icadr = Last_icadr - Measured_bytes ' Gosub Read_eeprom ' Do 'Beginn Hauptschleife Gosub Read_eeprom ' Print #1 , ";" Print #1 , Wtemp0 ; ";" Collected = Wtemp0 ' For Wtemp1 = 1 To Collected 'Datensätze lesen If Icadr > Last_icadr Then Collected = 0 Exit For ' End If For Btemp1 = 1 To Measured_bytes Gosub Read_eeprom Print #1 , ";" ; Wtemp0hi ; ";" ; Wtemp0lo ; Next Btemp1 Print #1 , ";" Next Wtemp1 Loop Until Collected = 0 'Ende Hauptschleife Do ' Loop ' 'I2C-Routinen '----------------------------------- Read_eeprom: ' I2cstart 'generate start I2cwbyte Eeprom_adress_w 'slave adsress I2cwbyte Icadrhi 'address of EEPROM I2cwbyte Icadrlo 'address of EEPROM I2cstart 'repeated start I2cwbyte Eeprom_adress_r 'slave address (read) I2crbyte Wtemp0hi , Ack 'read byte I2crbyte Wtemp0lo , Nack 'read byte I2cstop 'generate stop Incr Icadr Incr Icadr Return







Zitieren

Lesezeichen