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
Fuzzbass
Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com
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
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
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
Endhadv
Just find out what you like and let it kill you
De volgende zaken zitten fout:
i=0Je 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 iweg.
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
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
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