Kashub's Code Barn - "asm"

podświetlone jako asm (dodał(a) Dante @ 2011-09-30 15:29:10)

Twoja wyszukiwarka
Podświetl ten kod w:
Ostatnio dodane:
Losowe wpisy:
    ;       Kutasiewicz Karol
 
    $NOMOD51                            ; disable predefined standard 8051 SFR symbols
    $NOLIST
    $INCLUDE        (8051.MCU)                              ; include 8051 SFR symbol definitions
    $LIST
    ; 1 cykl - 1.085 us
 
    t0_dana  equ      65535-921               ; dana dla licznika T0 (przerwanie co 1ms)
    ; t0_dana              equ    65535-5000      ; dana dla licznika T0 (przerwanie co xxx)
    csds            equ 0FF30h         ; bufor wyboru wskaznika
    csdb            equ 0FF38h         ; bufor danych wskaznika   
    stala_licznika  equ       4                       
 
    t0flaga  bit      0                    ; musimy zdef jaki to jest adres
    txflaga  bit      1                    ;ustawiamy adresy
 
    t0licznik              equ    40        ;bajtowi t0licznik przypisano adres 40
    wyswlicznik     equ  41                                        ; numer obslugiwanego licznik do wyswietlacza
    bufor0    equ       42                    ; do 48 beda zarezerwowane jako miejsce dla danycch
 
                            ljmp    start
                            org     11            ; nastepna linia kodu bedzie miala adres 11
    ; następujące po dyrektywie instrukcje są lokowane w pamięci programu od adresu wskazanego przez tę dyrektywę
 
                            orl     tl0, #t0_dana mod 256; ustaw licznik T0
                            mov     th0, #t0_dana / 256
                            setb    t0flaga
                            setb    x0
                            setb    x1
                            reti
 
    ; petla obslugujaca mruganie diody z wykorzystaniem timera t0
    start:              ; przygotowanie srodowiska
                            mov     wyswlicznik, #0            ; ustawiamy
                            mov     t0licznik, #stala_licznika ; ustawiamy wartosc stala_licznika do bajtu pod adresem 40               
                            mov     tmod, #1               ; ust. ukl czas-licznikowego t0 16-minutowy licznik mod pracy na 1 (16-bitow)
                            setb    et0
                            setb    ea
                            setb    tr0
 
                            mov     bufor0, #255
                            mov     bufor0+1, #255
                            mov     bufor0+2, #255              ; ????????????????
                            mov     bufor0+3, #255              ; dane do  wyswieltacza 4
                            mov     bufor0+4, #255
                            mov     bufor0+5, #255
    petla:              ; glowna programu
                                                                    ;jezeli nie bit to t0flaga
                            jnb     t0flaga, dalej              ; skocz jezeli bit jest ustawiony na 0, to idz do dalej testowanie środowiska
                            clr     t0flaga                  ; t0flaga = 0
                            lcall   t0obsluga      ; wywolaj t0obsluga
                                                                    ; zlecenie stale kilka bajtow np nawet 6
                                                                    ; robic taki numer
    dalej:              ; testujemy kolejny element srodowsiak
                            jnb     txflaga, dalej10          ;jesli bit txflaga=0 to skocz do dalej10
                            clr     txflaga                  ; txflaga = 0
                            cpl     p1.7    ; zamien bit 7 rejestru pod adresem p1 (dioda)
                            lcall   wyswietlacz                ; wywolaj wyswietlacz
    dalej10:                                                        ; pojawilo sie dodatkowe zdarzenie
                            lcall   zlecenie         ; jesli >9 to napisac mu kolejny bajt
                            ljmp    petla                            ; koniec petli
    t0obsluga:
                            dec     t0licznik            ;zmn licznik (-1)
                            mov     a, t0licznik  ; pob zawartosc licznika
                            jz      xxx            ; if(a!=0)
                            ret                         ; return
 
    xxx:
                            mov     t0licznik, #stala_licznika   ; tu jest stala, tyle razy przechodzi zanim test mrugnie
                            setb    txflaga             ;txflaga=1     
                            ret                         ; return
    ; procedura do obslugi wyswietlaczy 7-segmentowych
    wyswietlacz:
                            setb    p1.6                                ; wylacz wyswietlacz
 
                            mov     a, wyswlicznik            ;a=wyswlicznik
                            mov     dptr, #tablica
                            movc    a, @a+dptr
                            mov     dptr, #csds
                            movx    @dptr, a
 
                            mov     a, #bufor0
                            add     a, wyswlicznik
                            mov     r0, a
                            mov     a, @r0                     ; pobranie z pam. RAM
                            mov     dptr, #csdb
                            movx    @dptr, a
 
                            inc     wyswlicznik      ; wyswlicznik++
                            mov     a, wyswlicznik              ; a = wyswlicznik
                            cjne    a, #6, wysw10              ; jesli a=6
                            mov     wyswlicznik, #0            ; zeruj wyswlicznik
    wysw10:  
                            clr     p1.6    ; wlacz wyswietlacz
                            ret                         ; return
    ; tablica przechowuje dane do bufora wyboru wyswietlacza i zawiera informacje o wszystkich 6 wyswietlaczach
 
    zlecenie:                                                 ; petla
                            inc     x0            
                            mov     a, x0
                            cjne    a, #10, koniec            ; jezeli sa rozne to idz do koniec
                            mov     x0, #0                     ; zerowanie
                            inc     x1            ; nastepny licznik
                            mov     a, x1
                            cjne    a, #10, koniec            ; jezeli sa rozne to idz do koniec   
                            mov     x1, #0                     ; zerowanie
 
    koniec:
                            ret
 
 
    tablica:               
    ; db pozwala umiescic w pamieci programu bajt lub ich grupe
                            db      00000001b             ;1 wyswietlacz
                            db      00000010b             ;2 wyswietlacz
                            db      00000100b             ;3 wyswietlacz
                            db      00001000b             ;4 wyswietlacz
                            db      00010000b             ;5 wyswietlacz
                            db      00100000b             ;6 wyswietlacz
    tablica_wzorcow:
                            ;       hgfedcba
                            db      00111111b               ; 0
                            db      00000110b               ; 1
                            db      01011011b               ; 2
                            db      01001111b               ; 3
                            db      01100110b               ; 4
                            db      01101101b               ; 5
                            db      01111101b               ; 6
                            db      00000111b               ; 7
                            db      01111111b               ; 8
                            db      01101111b               ; 9
 
    end
 
| Katalog Sklepów internetowych | | Skróć link | | Blog o książkach | | Blogi za darmo | | Kody programów | | Skracacz adresów | | Darmowe Ebooki | | Opisy na Facebooka |