Ik heb onderstaande programma geschreven en er een functie ingebouwd zodat ik op een eigen plek in de EEprom doormiddel van volgende commando EWRITE Kanaal, [knipper] Dit werkt perfect als ik bijvoorbeeld op EEprom adres 3 iets wegschrijf leest hij dit netjes uit. Maar als ik nu iets in bijv EEprom adres 4 opsla veranderd hij het adres in EEprom 3 ? stond er eerst 500 in nr. 3 en sla ik in nr. 4 de waarde 200 op dan komt er op het beeld ipv 500 51400 te staan ? terwijl ik in EEprom nr. 3 500 heb opgeslagen waar zit hier de fout ?
DEVICE 16F628A ;We gebruiken een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
SYMBOL S1 = PORTB.0 ;Poort B.0 heeft nu de naam S1
SYMBOL S2 = PORTB.1 ;Poort B.1 heeft nu de naam S2
SYMBOL S3 = PORTA.7 ;Poort B.1 heeft nu de naam S3
SYMBOL S4 = PORTA.6 ;Poort B.1 heeft nu de naam S4
; 76543210 <<<Een hulpregeltje
TRISA = %11000000 ;PORTA.6 en PORTA.7 zijn nu ingangen
TRISB = %00000011 ;PORTB.1 en PORTB.2 zijn nu ingangen
DIM Kanaal AS DWORD
DIM Knipper AS DWORD
DIM Knipper1 AS DWORD
DIM Test AS DWORD
PORTB_PULLUPS = ON
CLEAR
Knipper = 50 ;Opstartwaarde
Kanaal = 1 ;Opstartwaarde
Menu:
cls
while 1=1
Knipper1 = Knipper * 2
PRINT AT 1, 4, "Kanaal: ", DEC Kanaal ,
PRINT AT 2, 2, "Speed: ", DEC Knipper1/1000,".", Dec1 Knipper1/100 , " sec"
IF S1 = 0 THEN Kanaal = kanaal + 1
delayms 20
WHILE S1 = 0 : WEND
delayms 20
IF S2 = 0 THEN Knipper = Knipper + 50
delayms 20
WHILE S2 = 0 : WEND
delayms 20
IF S3 = 0 THEN EWRITE Kanaal, [knipper]
delayms 20
WHILE S3 = 0 : WEND
delayms 20
IF S4 = 0 THEN goto Start
WEND
delayms 300
goto menu
Start:
test = EREAD 3
cls
PRINT AT 1, 1, "lol " , dec test , " lol"
delayms 5000
goto Menu
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
500 past niet in een byte, want het is groter dan 256. Het getal 500 staat dan dus ook in het volgende byte (plaats 4). Zet je dan in plaats 4 een ander getal, dan krijg je dit soort resultaten.
het eeprom gaat trouwens maar een beperkt (nouja... 1 mljn) aantal schrijfcycles mee, het flash helaas ook.
Zoefje
Druk- en typfouten voorbehouden.
Dat komt omdat je te maken hebt met variabelen die dubbel woorden zijn, zodat de een de ander overschrijft.
[Bericht gewijzigd door Zoefje op (18%)]
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
het zijn zelfs DWORDs inderdaad. note_to_self: beter post doorlezen voor te reageren die nemen elk 4 plaatsen in het EEPROM in. als je ervoor zorgt dat ze die ruimte hebben zonder dat ze elkaar overschrijven dan moet het werken.
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
als je een Dword op plaats 1 zet, dan zit 'ie ook op 2,3 en 4. Omdat het 4 bytes zijn. Dus mag de volgende pas weer op plaats 5. En die daarna pas op 9, enzovoorts
bedankt zal weer eens verder sluitelen