Hi,

Onderstaand programma werkt niet,

De met EDATA opgeslagen waarden worden niet uitgelezen.

Device 16F877A
Config WDT_OFF, PWRTE_ON, LVP_OFF, HS_OSC,
XTAL 4
ALL_DIGITAL = true

Symbol wacht = 1000

Dim var1 As Byte
Dim i As Byte

; programmeer de eeprom
EData $01, $0C, $01, $0F, $FF

Clear

PORTC = %00000000
PORTB = %11111111
TRISC = %00000000
TRISB = %11111111

main:

i= 0

For i = i To 4
DelayMS wacht
var1 = ERead i
PORTC = var1
DelayMS wacht
Inc i
Next
Return

GoSub main

End

Wie kan mij helpen en zeggen wat hier fout aan is

Alvast beadnkt

Herbyz

Ik heb geen ervaring met de taal die je gebruikt, maar ik zou het zo doen:

main:

For i = 0 To 3
DelayMS wacht
var1 = ERead i
PORTC = var1
DelayMS wacht
Inc i
Next

Goto main

End

Probleem zit hem in de logica: de waardes worden perfect uitgelezen, maar je programma doet rare dingen.
Je programma start bij main, gaat door naar de for... loop en komt plotseling een return tegen.
Geen idee waar de processor dan verder gaat. Hij komt in elk geval niet bij de gosub uit.
Zet eventueel een goto statement vooraan:

Clear
...
  
  goto Eeuwig

main:

  For i = i To 4
    DelayMS wacht
    var1 = ERead i
    PORTC = var1
    DelayMS wacht
  Next
Return


Eeuwig:
    while 1 = 1
      GoSub main
    wend


End

De volgende zaken zitten fout:

i=0

Je doet hier helemaal niets mee want je gaat vervolgens een For-Next lus in waar je start met i=1. Dit is echter niet de oorzaak van de echte fout, die zit hier:


For i = i To 4
DelayMS wacht
var1 = ERead i
PORTC = var1
DelayMS wacht
Inc i
Next

Wat je namelijk doet is binnen de For-Next lus de controlevariabele (i) zelf ook nog eens ophogen.
Absoluut verboden en bovendien volstrekt overbodig. De For-Next constructie zorgt er keurig voor dat i van 1 tot en met 4 loopt.
Het resultaat is niet te voorspellen, want hangt af van hoe de compiler het heeft opgelost.
Duzzzzzzz: haal die

Inc i

weg.

Dan de volgende fout:
Bij het uitvoeren van de code begint de processor aan het begin (raar verhaal, maar het is nou eenmaal zo).
Dan komt-ie op een gegeven moment bij het label

main:

. Nix aan de hand. Maar even later komt-ie bij

return

. Maar hoezo een return, hij komt helemaal nergens vandaan.
Nog even een

Gosub main

, maar die heeft hier helemaal geen zin meer want de stackpointer is al vergejeweetweld. (maar anderen waren mij daar al bij voorgegaan terwijl ik zat te typelen)

Allen bedankt voor jullie commentaar,

Het programma werkt nu, ik heb ter controle even een display aangehangen.

Device 16F877A
Config WDT_OFF, PWRTE_ON, LVP_OFF, HS_OSC,
XTAL 4
ALL_DIGITAL = true

LCD_DTPIN = PORTB.4
LCD_RSPIN = PORTB.2
LCD_ENPIN = PORTB.3
LCD_INTERFACE = 4
LCD_LINES = 2
LCD_TYPE = 0
Cls
Symbol Switch = PORTB.0

Symbol Aan = 0
Symbol Uit = 1
Symbol Antidender = 50
Symbol wacht = 1000

Dim var1 As Byte
Dim i As Byte

; programmeer de eeprom
EData $01, $03, $07, $0A, $0D,

Clear

PORTC = %00000000
PORTB = %11111111
TRISC = %00000000
TRISB = %11111111

main:

i= 0

For i = 0 To 4
Print At 1,1, Dec i
DelayMS wacht
var1 = ERead i
Print At 2,1, HEX var1
PORTC = var1
DelayMS wacht
Next

Cls

GoTo main

End

Grz Herbyz

i = 0 staat er nog steeds overbodig te wezen.

Hoewel het dus werkt, zie ik geen DELAYMS voor het display bij opstarten.
Niet raar opkijken als het display het soms eens niet (goed) doet...
Neem cursus deel 4 en 6 (nog) eens door.

Beste Frits

Je hebt gelijk, ik heb i = 0 er al uit gehaald en ook de display functie is uit het programma gehaald.

Alles werkt zo als ik het bedoeld hebt.

Nog bedankt allen voor jullie inbreng en support.

Grz

Herbyz