A programot PIC Simulator IDE nevű programmal írtam és teszteltem. Ez az első önálló PIC programom. 0-tól 9-ig elszámol, majd újrakezdi. Valójában az indirekt címzés gyakorlására írtam a programot. Amihez a szükséges információkat a Tudomány és Technika weboldaláról szereztem.
Lássuk a forráskódot a megjegyzésekkel:
#include "P16F877.INC"
bsf STATUS,RP0 ;lapozas 1. regiszterbankba
clrf trisb ;B port minden lába kimenet
bcf status,RP0 ;ugrás vissza 0. regiszterbankba
__ equ b'10000000' ;A 7szegmenses kijelzon ertekek
_0 equ b'10111111' ;definialasa urestol 9-ig
_1 equ b'10000110'
_2 equ b'11011011'
_3 equ b'11001111'
_4 equ b'11100110'
_5 equ b'11101101'
_6 equ b'11111101'
_7 equ b'10000111'
_8 equ b'11111111'
_9 equ b'11101111'
movlw _0 ;egymas utani regiszterekbe
movwf 020h ;kerulnek az ertekek
movlw _1
movwf 021h
movlw _2
movwf 022h
movlw _3
movwf 023h
movlw _4
movwf 024h
movlw _5
movwf 025h
movlw _6
movwf 026h
movlw _7
movwf 027h
movlw _8
movwf 028h
movlw _9
movwf 029h
movlw __
movwf 02Ah
start
movlw 020h ;indirekt cimzeshez kezdocim
movwf FSR ;beallitasa FSR-be
counter ;szamlalas kezdodik
movfw INDF ;INDF az FSR-ben levo cimre mutat
movwf portb ;amin levo erteket kimenetre kuldom
call timer ;kesleltetes meghivasa
xorlw _9 ;9-es eseten a Z status (zero) 1-re beallitasa
btfsc status,Z ;Ha Z=0, akkor hagyja ki a kovetkezo sort
goto start ;Ha Z=1 akkor
incf FSR,F ;noveli az aktualis cimet 1-el
goto counter ;folytatja a szamlalo ciklust a kov szammal
timer ;keslelteto "eljaras"
movwf 030h ;munkaregiszter allapotanak mentese 030h-ba
movlw 05h ;A kesleltetes hossza (utasitasszam)
movwf 031h ;31h regiszterben taroljuk a hosszt
timer_s ;dekrementalo utasitasok 31h reg-en
decfsz 031h,1 ;amig nem lesz a tartalma nulla
goto timer_s ;ha 031h-ban nem nulla van, tovabb dekremental
movfw 030h ;munkaregiszter allapotanak visszaallitasa
return ;visszateres
end ;program vege