IF/ELSE in assembler

Alle vragen m.b.t digitale schakelingen m.b.v. losse i.c's
en oplossingen m.b.v. PIC processoren.
Plaats reactie
nicebadboy
Berichten: 13
Lid geworden op: di 3 feb 2009, 20:19
Locatie: Belgie, Mechelen. .

IF/ELSE in assembler

Bericht door nicebadboy »

Hey,
Ik probeer assembler onder de knie te krijgen, maar zit toch met vragen. In de datasheets (pic16f88) en de handleiding van MPasm schrijven ze dat je de IF/ELSE commando (in assembler) kan gebruiken, maar dit lukt niet bij mij. Kunnen jullie mij helpen?
De bedoeling is als op RA0 een 'I' komt, dat RB2 en RB3 geset worden.
Ook wou ik "if PORTA,0==1" schrijven, maar dat aanvaardt hij niet. Probleem met de komma???
Hier is het progje:
START
banksel TRISB ;bank1
movlw b'00000000' ;allemaal uitgang
movwf TRISB
movwf ANSEL ;allemaal digitaal
movlw b'11111111'
movwf TRISA ;allemaal ingang
banksel PORTA
clrf PORTB ;alle uitgangen 0
PROG
bsf PORTB,0 ;set RB0 high
bsf PORTB,1 ;set RB1 high
if PORTA==b'00000001' ;ingang RA0 high?
bsf PORTB,2 ;set RB2 high bsf PORTB,3 ;set RB3 high
endif
GOTO PROG
END

groeten,

Peter
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

Kan je dat stukje van die handleiding hier even laten zien? Ik geloof er namelijk niks van dat dit zo kan in asm.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
nicebadboy
Berichten: 13
Lid geworden op: di 3 feb 2009, 20:19
Locatie: Belgie, Mechelen. .

Bericht door nicebadboy »

Op volgende link vind je de handleiding van MPasm:http://ww1.microchip.com/downloads/en/D ... 33014J.pdf
Op pagina 45 gaat het over 'Directives'. Er zijn verschillende soorten... en bij 'Conditional Assembly Directives' vind je de IF/ELSE commando.
Maar waarschijnlijk zal ik wel iets verkeerd gelezen of begrepen hebben. Maar ik krijg geen error als ik het programma simuleer, het werkt alleen niet. Wat is de reden daarvoor?

Groeten

Peter
smd_lover
Moderator
Moderator
Berichten: 1955
Lid geworden op: di 24 mar 2009, 12:23
Locatie: prov Groningen.. .. .. .. .. .. .. .

Bericht door smd_lover »

Directives zijn geen normale instructies maar opdrachten voor het assemblerprogramma.
Met de if/then directive kun je de assember bijvoorbeeld maar een bepaald gedeelte van de asm-instructies laten omzetten naar hexcode.

In Assembly wordt het if/then gebeuren gedaan met de instructie btfss.... of btfsc....

bijvoorbeeld testen of een getal nul is:

Code: Selecteer alles

movf getal,w         ; haal getal op
btfss STATUS,Z     ; is de zero-vlag in het status-register geset?
goto nietnul           ; nee
 .........               ; ja , getal = 0
Hoop dat het zo duidelijk is.
Plaats reactie