Ik programmeer pics met proton picbasic. Ik heb wel eens gelezen dat het ene commando meer tijd nodig heeft dan het andere. Zo heb ik wel eens gelezen dat het niet verstandig zou zijn om het 'case' commando te gebruiken, maar dat dat vaak sneller gaat met 'if...then'.

Mijn vraag: heeft/weet iemand overzicht van de (belangrijkste) commando's van picbasic, waarbij vermeldt staat hoe lang de pic doet over het verwerken van deze commando's? Of is er een andere manier om de verwerkingstijd van commando's te achterhalen?

Ik heb gezocht op internet en op deze site, maar niets kunnen vinden.

Alvast bedankt,

Jeroen

Op 5 oktober 2009 17:35:46 schreef Jeronimo_34:
Of is er een andere manier om de verwerkingstijd van commando's te achterhalen?

Met de Assembler plug-in (standaard aanwezig) kan je zie naar welke instructies de commando's omgezet worden, icm de datasheet is de verwerkingstijd uit te rekenen.

Je zou ook nog de .asm in MPLab kunnen laden en gebruik maken van de stopwatch in de interne debugger. Wel even je kloksnelheid correct instellen!

Bedankt voor jullie reacties.
Ik kom er nog niet helemaal uit. In de datasheet zie ik bij deze pic (16f628a) dat instructies in 200ns @20MHz worden uitgevoerd. Betekent dit dat per ASM-instructie 200ns nodig is, ongeacht de instructie?

Met de stopwatch in MPLAB kom ik er ook niet echt uit, want die gaat telkens uit van 2048 instruction cycles, terwijl mijn programma geen 2048 instructies heeft. Is het mogelijk om de stopwatch een bepaald deel van het programma te laten volgen? Met de 'breakpoints' lukt me dat niet.

Alvast bedankt

Op 5 oktober 2009 20:29:15 schreef Jeronimo_34:
Bedankt voor jullie reacties.
Ik kom er nog niet helemaal uit. In de datasheet zie ik bij deze pic (16f628a) dat instructies in 200ns @20MHz worden uitgevoerd. Betekent dit dat per ASM-instructie 200ns nodig is, ongeacht de instructie?

dit geldt voor de meeste instructies, maar er zijn uitzonderingen, zie datasheet voor een tabel.

Even een programma met een label en een goto
en dan Poort hoog maken en daarna poort laag maken.

Kristal 20 MHz (XTAL 20)

Kom je op een frequentie van 1 MHz.
En dus 800 ns.

Dus dan klopt het dat een instructie 200 ns is, want het programma is 4 instructies lang.

De Laag-Hoog-Laag periode is 200ns.

Weet niet of dit je wat helpt...

Edit: Hoog-laag periode...

Het is me nu een stuk duidelijker. Het valt me op dat het aanzienlijk kan schelen in de lengte van de asm, wanneer je iets op een andere manier programmeert.

Nu moet ik er gewoon zelf mee gaan experimenteren.

Bedankt allemaal!

Voorkom floats, die routines nemen heel veel ruimte en tijd in beslag, en meestal kan je ze omzeilen.

Dat is, in algemene termen, exact het verschil tussen een 2e generatie (assembler) en een 3e generatie (basic, C, Pascal, ...) programmeertaal. Het programmeren gaat sneller, maar dit gaat vrijwel altijd ten koste van de efficientie.