Vitkovsky zpravodaj

. . .zapoj se a publikuj

Lekce 4 Skoky v programu


Programování se neobejde bez směrování programu správným směrem. Skoky v programu můžou být podmíněné, nebo přímé. Pokud je potřeba někam si odskočit a následně se vrátit zpět, použijeme příkaz call (kam skočit) a k navrácení return, nebo retlw(proměnná). Příkaz return se vrátí zpět na místo, odkud si odskočil a pokračuje na dalším řádku.  Přikaz retlw provede to samé, jenom si zpět přinese nějakou hodnotu v registru W.

Pokud však chceme pouze skočit v programu a už se nevracet , postačí příkaz goto(kam skočit).

příklady použití:

include <p16f628a.inc>

__CONFIG _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT

Temp equ 025H ; definice proměnné

org 0     ; start programu zde

NastVstupVystup ; Návěstí

bsf STATUS,RP0  ;BSF – bit set function – nastavení bitu na adrese STATUS ,(viz SFR a manual čipu) – přepne na banku 1

movlw b’00000001′ ; RB0 bude vstup RB1..RB7 budou výstupy (0=výstup,1=vstup, pro pochopení v bin), uloží se do registru W
movwf TRISB ; Hodnotu z W registru uložíme do TRISB,

bcf STATUS,RP0 ;vrátíme se zpět na banku 0

znovu ; návěstí skoku

btfss PORTB,0 ; je li,pin 0 nastaven, potom skoč (přeskočí jeden příkaz)

goto vystup_zap

goto vystup_vyp

call pauza ; toto je příklad skoku do podprogramu, v tomto případě nebude nikdy vykonán(program tu nikdy neskočí)

vystup_zap ; návěstí skoku

bsf PORTB,1

goto znovu

vystup_vyp ; návěstí skoku

bcf PORTB,1

goto znovu

brzda; návěstí

decfsz Temp,F
goto brzda

return

end

btfss (bit test function skip set) otestuj bit, skoč, jestli je nastaven

Při testování externího portu, nebo pinu dojde k jeho inicializaci, pokud jej uzemníme (přes vhodný odpor – stav Low) .

Rád bych v tomto díle ještě rád upozornil na poslední způsob skoku. Představte si případ, že v registru w máme hodnotu 8 a chceme ji například vyjádřit binárně (rozsvítit segment led displeje) pro to nám nejlépe vyhovuje tento způsob volání podprogramu :

Program bude vypadat asi takto vložíme do W 8, příkazem call spustíme následující podprogram LEDTable

; ————————————————————————
; Konverze BCD -> na segmenty
; ————————————————————————
LEDTable

addwf PC,F ; W + PC -> PC ; PC (program counter) ukazatel na řádek programu  se sečte s W příkazem addwf
retlw b’00111111′ ; ..FEDCBA = ‚0‘ tím se program posune o tolik pozic, kolik je hodnota W
retlw b’00000110′ ; …..CB. = ‚1‘     v našem případě na pozici 8
retlw b’01011011′ ; .G.ED.BA = ‚2‘
retlw b’01001111′ ; .G..DCBA = ‚3‘
retlw b’01100110′ ; .GF..CB. = ‚4‘
retlw b’01101101′ ; .GF.DC.A = ‚5‘
retlw b’01111101′ ; .GFEDC.A = ‚6‘
retlw b’00000111′ ; …..CBA = ‚7‘
retlw b’01111111′ ; .GFEDCBA = ‚8‘ příkazem retlw se vrátíme s naplněným registrem W správnou hodnotou
retlw b’01100111′ ; .GF..CBA = ‚9‘
retlw b’10000000′ ; H……. = ‚.‘

To je pro dnešek vše, příště se budeme zabývat početními operacemi.

10.2.2010 - Posted by | Programování procesorů PIC

Sorry, the comment form is closed at this time.

%d bloggers like this: