nonkel_dw
nonkel dw
ik ben aan het proberen om met basic wat te ontvangen.
In ASM werkt dit, dus heb ik men code omgezet in basic alleen krijg ik een deel fouten waar ik maar geen oplossing voor vindt.
Symbol ErrLed = PORTA,1
Symbol DataLed = PORTA,2
Symbol BreakLed = PORTA,3
Symbol ProgramLed = PORTA,4
'geheugen van DMX
Symbol Framing = DMX_data,0
Symbol Break = DMX_data,1
Symbol Startcode = DMX_data,2
Symbol Klaar = DMX_data,3
' defineren geheugen plaats
dim Kanaal as byte
dim teller as byte
dim Gedaan as byte
dim reg1 as byte
dim reg2 as byte
dim reg3 as byte
dim reg4 as byte
dim DMX_data as byte
' poort defineren
sub procedure interrupt
ProgramLed = 1
if RCSTA.OERR = 1 then goto overrun
else if RCSTA.FERR = 1 then goto frame
else
reg1 = RCREG ' zet data weg....
if Framing = 1 then goto break
else if break = 0 then goto erro
Dataled = 1
if Klaar = 1 then goto ex_int
else
teller = teller - 1
If teller = 0 then reg2 = RCREG
else goto ex_int
end if
ex_int:
end sub.
main:
' laag maken poorten
PORTA = 0
PORTB = 0
PORTC = 0
PORTD = 0
PORTE = 0
' in en uitgangen instellen
TRISA = 0
TRISB = 0
TRISC = 0
TRISC.7 = 1 ' uart ingang
' instellen uart
SPBRG = 04
TXSTA.BRGH = 1
TXSTA.SYNC = 0
PIE1.RCIE = 1
RCSTA.RX9 = 1
RCSTA.CREN = 1
RCSTA.SPEN = 1
RCREG = 0 'maak regisere leeg
' zet interupts op
INTCON.PEIE = 1
INTCON.GIE = 1
' stel het kanaal in van de dmx
Kanaal = 1
teller = Kanaal
Gedaan = 0
'De while lus
While true
PORTA = Reg2
wend
overrun:
Framing = 0
Gedaan = 0
Break = 0
Klaar = 0
Errled = 1
RCSTA.CREN = 1
RCSTA.CREN = 0
RCREG = 0
RCREG = 0
RCREG = 0
RCSTA.CREN = 1
RCSTA.CREN = 0
goto ex_int
frame:
Framing = 1
RCREG = 0
teller = Kanaal
Klaar = 0
Gedaan = 0
goto ex_int
break:
Framing = 0
If reg1 > 0 then goto erro
else
Breakled = 1
Break = 1
Klaar = 0
end if
goto ex_int
erro:
Framing = 0
Gedaan = 0
Errled = 1
Break = 0
Breakled = 0
Klaar = 0
goto ex_int
end.
[/code=picbasic]
25:6 E-4 Syntax error: Expected '=' but ','
123:1 E-3 Identifier 'end' was not declared
123:4 E-4 Syntax error: Expected 'end' but '.' found
124:1 E-4 Syntax error: Expected 'sub' but '' found
124:1 E-4 Syntax error: Expected 'end' but '' found
124:1 E-4 Syntax error: Expected '.' but '' found
Weet hier iemand raad mee?
Ik heb zelf nog niet zoveel ervaring met basic, en heb al enkele voorbeeld codes doorgenomen maar ik kan op deze fouten geen oplossing vinden...Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Moeilijk te zeggen als we niet weten wat er op de betreffende regel staat...
Er ontbreken wel zowiezo 2 END IF's in de interrupt proc.
nonkel_dw
nonkel dw
op deze regel geeft hij de eerst fout:
ProgramLed = 1
Waar moet ik dan net men endif's zetten?
aangezien dit een lange if is ...
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
nonkel_dw
nonkel dw
dit heb ik aangepast
maar er blijft een error op
de regel:
ProgramLed = 1
ik snap niet wat hier de fout is...
nonkel_dw
nonkel dw
EdwinNadorp
Koop hier uw kristallen bol - in 2008 ga ik m'n projecten afmaken, echt waar ....... nouja in 2009 dan ..... ehh 2010 ....
Wat probeer je in godsnaam met die goto's?
Voer alles uit in je main via een repperterende loop en zet alleen in je interrupt routine de nodige flaggetjes voor in je main routine.
*edit
Ik heb nog verder naar je code gekeken maar ik kom niet uit de spagettie.
maar je if-then-else statemends af, en schrijf ze op een nette manier
if voorwaarde=1 then
doe je actie
else
doe een andere actie
end if
als je een bit van een byte wil adresseren moet je een punt gebruiken.
dus PORTA.1 in plaats van PORTA,1
Ik denk dat je je goto 'functies' vanuit de asm heb overgenomen, probeer deze als je ze als code wilt hergebruiken te scrijven als functies. Maaky het een stuk leesbaarder.
Tenslotte, microe heeft veel werk gedaan in de voorbeelden, bekijk ze, compileer ze. Probeer ze uit, ze zijn echt leerzaam.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Waar moet ik dan net men endif's zetten?
Als je de code normaal formatteert met indentation, (i.p.v. een lange brij) dan zie je automatisch waar een end if mist...
nonkel_dw
nonkel dw
Het probleem zit zich dus ergens in de config's
Device 18F452
'@CONFIG_REQ
'@__CONFIG CONFIG1H, OSCS_OFF_1 & HS_OSC_1
'@__CONFIG CONFIG1L, BOR_ON_2 & BORV_20_2 & PWRT_ON_2
'@__CONFIG CONFIG2H, WDT_OFF_2 & WDTPS_128_2
'@__CONFIG CONFIG3H, CCP2MX_OFF_3
'@__CONFIG CONFIG4L, STVR_OFF_4 & LVP_OFF_4 & DEBUG_OFF_4
CONFIG_START
OSC = HS
OSCS = On
PWRT = On
BOR = On
BORV = 42
WDT = OFF
LVP = OFF
Debug = OFF
CONFIG_END
'Config HS_OSC , WDT_OFF , PWRTE_OFF , CP_OFF , DEBUG_OFF
XTAL = 20
ALL_DIGITAL TRUE ;Alle ingangen digitaal
Opnieuw: ;Label met zelf te verzinnen naam
Toggle PORTD.1 ;Aan moet uit, uit moet aan
DelayMS 1000 ;500 milliseconden = 0,5 seconde
GoTo Opnieuw ;Spring naar 'Opnieuw' en ga zo steeds door
End ;Einde programma
[/code=picbasic]
Ik hen aan het proberen dit stukje code aan de praat te krijgen.
Op het eerst zicht geen enkel probleem, toch doet die het niet, led gaat aan maar niet meer terug uit.
Men opstelling:
- 10k weerstand van +5v naar MCLR
- 20mhz kristal
- led op portd.1EdwinNadorp
Koop hier uw kristallen bol - in 2008 ga ik m'n projecten afmaken, echt waar ....... nouja in 2009 dan ..... ehh 2010 ....
Die goto had je makkelijk in een while kunnen stoppen.
Alles in die while een beetje inspringen, zie je meteen de loop.
Tevens hoor je te eindigen met een end. <- let op de punt
Is dit wel mikrobasic?
Code in de sp is wel in mikrobasic. Ik denk dat het stukje hierboven een test code van picbasic.nl is om te kijken of de schakeling wel werkt.
Wat was je weerstand waarde eerst? Alles vanaf 220R zou toch moeten werken.