Számláló 16F877-es mikrovezérlőre 7 szegmenses LED kijelzővel

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:

        list p=16F877           ;processzor megadasa
        #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

PIC simulator IDE tesztelés közben

Kategóriák: 
Megosztás/Mentés