Programiranje računalnika na osnovi mikroprocesorja MC6802

Poročilo laboratorijskih vaj pri predmetu Arhitektura računalniških sistemov


Vsebina

  1. Opis naloge
  2. Delovanje prvega programa
  3. Delovanje drugega programa
    3.1 Delovanje programa na oddajniku
    3.2 Delovanje programa na sprejemniku
  4. Izpiska programov

1. Opis naloge

V prvem semestru smo sestavili računalnik na osnovi mikroprocesorja Motorola MC6802, v drugem pa napisali programe zanj. Sam sem napisal dva programa za testiranje pomnilnika, preizkus delovanja LED-diod preko perifernega vmesniškega adapterja ter prenos podatkov med dvema računalnikoma. Programe (napisane v zbirnem jeziku) smo pred uporabo prevedli v strojni jezik ter zapisali v EPROM, ki smo ga nato priključili na računalnik.

2. Delovanje prvega programa

Program (na priloženem izpisku nosi ime PROGRAM1.ASM) najprej nastavi začetni naslov po resetu ter začetni naslov sklada (uporabljamo ga šele po testu pomnilnika), inicializira vmesniški adapter PIA MC6821, tako da so PA0 - PA7 vhodne linije (na PA0 in PA1 sta priključceni stikali S1 in S2) ter PB0 - PB7 izhodne linije (na njih so LED-diode). Delovanje je navadno, prekinitve maskirane. Sledi seveda nastavitev na periferni vmesnik.

Drugi del programa je test pomnilnika. Na vse naslove v pomnilniku zapiše (in preveri zapisano) vrednost $FF ter jo nato spet pobriše. Če pride pri tem do napake (razlike med pisano in brano vrednostjo), jo program sporoči z utripajočim signalom na lučkah, ki ga tvorita prva in osma LED-dioda. Med utripom je uporabljena seveda zakasnitev (približno 350 ms) za razločen izgled. Ob napaki se tukaj program zaključi v neskončni zanki.

Če je pomnilnik uspešno prestal test, sledi tretji del programa, to je test vmesnika PIA. V tem delu program že uporablja klice podprogramov (z uporabo sklada v pomnilniku), da je zato lahko krajši kot sicer. Prikaz štirih različnih vzorcev lučk se izpelje na podlagi trenutnega stanja stikal S1 in S2. Ob premiku stikala se spremeni tudi vzorec lučk. Trije vzorci uporabljajo logične ukaze za premik oziroma zamenjavo bitov, en vzorec pa je narejen z uporabo takojšnjega naslavljanja. Ves čas se uporabljata podprograma za preverjanje stanja na stikalih ter zakasnitvena zanka. Tretji del programa teče v neskončni zanki.

3. Delovanje drugega programa

Program (PROGRAM2.ASM) zapišemo v dva EPROM-a, za vsak računalnik svojega. Povežemo ju kot je prikazano na shemi:

[Povezava dveh sistemov (24 kb)]

Uporabimo štiri linije (PA4 - PA7) za prenos podatkov ter dve kontrolni (CA1 - CA2) za sporazumevanje med obema sistemoma. Sistema nastavimo enega v oddajnik (master, stikali 11) in drugega v sprejemnik (slave, stikali 00). Program sam med tekom preverja stanje stikal, tako da ve, ali je v oddajnem ali sprejemnem načinu.

3.1 Delovanje programa na oddajniku

Prva je nastavitev prekinitvenih vektorjev, rezervacija prostora v pomnilniku za spremenljivki STEVEC in PRENOS ter nastavitev začetnega naslova sklada. Sledi skupni del inicializacije perifernega vmesniškega adapterja: PA0 - PA7 so vhodi, PB0 - PB7 so izhodi (na njih so LED-diode), maskiranje prekinitev, izbira zadnje fronte za aktivni prehod CA1. V ločenem delu inicializacije pustimo samo še PA0 in PA1 vhoda (za stikali S1 in S2), ostale PA2 - PA7 pa na izhode (PA4 - PA7 je povezava s sprejemnikom). Določimo navadno delovanje.

V glavnem delu programa oddajnik prikaže na lučkah vzorec osmih bitov, ki jih želi poslati sprejemniku, shrani vzorec v pomnilniku ter pošlje zgornjo polovico bitov. Pri tem še omogoči prekinitve na vratih A (PIA) in na procesorju (CPE), in pošlje zadnjo fronto na CA2. Potem skoči v čakalno zanko in čaka na prekinitev s sprejemnika.

Ko pride do prekinitve, se začne prekinitveni servisni program. Oddajnik prebere shranjeni vzorec in ga premakne v levo, da ima dostop do spodnje polovice bitov. Potem pošlje še spodnjo polovico bitov in aktivira zadnjo fronto na CA2. Prekinitev ne omogoči več, saj je zaključil z delom.

3.2 Delovanje programa na sprejemniku

Začetni del programa je enak kot na oddajniku (nastavitev prekinitvenih vektorjev, spremenljivk v pomnilniku in začetnega naslova sklada). Sledi skupni del inicializacije perifernega vmesniškega adapterja: PA0 - PA7 so vhodi (PA0 in PA1 sta stikali S1 in S2, PA4 - PA7 pa je povezava z oddajnikom), PB0 - PB7 so izhodi (na njih so LED-diode), maskiranje prekinitev, izbira zadnje fronte za aktivni prehod CA1. V ločenem delu inicializacije nastavimo usklajevalno delovanje, omogočimo prekinitve na vratih A (PIA), postavimo spremenljivko STEVEC na nič in omogočimo prekinitve še na procesorju. Sprejemnik skoči potem v čakalno zanko in čaka na prekinitev z oddajnika.

Ko pride prvič do prekinitve, sprejemnik najprej odčita prispele štiri bite in ugotovi (preko spremenljivke STEVEC, da je to prva polovica bitov. Shrani jo v spremenljivki PRENOS in poveča števec STEVEC za ena. Po prekinitvi se vrne v čakalno zanko. Ob branju prispelih bitov se zaradi usklajevalnega načina delovanja avtomatično pošlje signal po CA2, kar sproži na oddajniku prekinitev.

Ko pride drugič do prekinitve, sprejemnik zopet odčita prispele štiri bite in ugotovi (v spremenljivki STEVEC), da je to že druga polovica bitov. Zamakne jo v desno in doda še prvo polovico iz spremenljivke PRENOS. Celotni prispeli vzorec sedaj prikaže na lučkah. Pravilnost prenosa lahko preverimo s primerjavo vzorcev lučk na obeh računalnikih.

4. Izpiska programov

Izpisek prvega opisanega programa:

AVOCET SYSTEMS 6801/6301 ASSEMBLER -  VERSION 2.20M  SERIAL #00413

SOURCE FILE NAME: PROGRAM1.ASM


                *
                **********************************************************
                *                                                        *
                * Prvi testni program                                    *
                *                                                        *
                * Program za vaje pri predmetu                           *
                * Arhitektura racunalniskih sistemov II                  *
                *                                                        *
                * Mikroprocesorski sistem:                               *
                *                                                        *
                *     *  MC6802 CPU+RAM  0000-007F                       *
                *     *    2764 EPROM    C000-DFFF                       *
                *     *  MC6821 PIA      8000-8003                       *
                *                                                        *
                * Avtor : Vladimir Bensa                                 *
                * Datum : 28.3.1995.                                     *
                * Opis programa : Program najprej inicializira vmesnik   *
                *                 PIA, potem pa testira pomnilnik RAM    *
                *                 (za pisanje in za branje) ter vmesnik  *
                *                 PIA (4 razlicni vzorci luck).          *
                *                                                        *
                **********************************************************
                *
 007F           STCKAD  EQU     $007F     ;  zacetni naslov sklada v RAM-u
                *
                * Prekinitveni vektorji (najvisjih 8 naslovov v EPROM-u)
                *
 DFFE                   ORG     $DFFE
 DFFE C000              FDB     HWRES     ;  reset
                *
                * V/I naslovi
                *
 8000           PIAADR  EQU     $8000     ;  zacetni naslov vmesnika PIA
 8000           DRA     EQU     PIAADR    ;  podatkovni register A
 8001           CRA     EQU     PIAADR+1  ;  kontrolni register A
 8002           DRB     EQU     PIAADR+2  ;  podatkovni register B
 8003           CRB     EQU     PIAADR+3  ;  kontrolni register B
                *
                **********************************************************
                * Program v EPROM-u                                      *
                **********************************************************
                *
 C000                   ORG     $C000     ;  zacetni naslov programa (EPROM)
                *
                **********************************************************
                * Inicializacija sistema po resetu                       *
                **********************************************************
                *
 C000 8E007F    HWRES   LDS     #STCKAD   ;  zacetni naslov sklada
                *
                **********************************************************
                * Podprogram za inicializacijo vmesnika PIA              *
                **********************************************************
                *
 C003 7F8001            CLR     CRA       ;  dostop do smernega registra A
 C006 7F8000            CLR     DRA       ;  PA so vhodi
 C009 7F8003            CLR     CRB       ;  dostop do smernega registra B
 C00C 86FF              LDAA    #$FF      ;  PB so izhodi
 C00E B78002            STAA    DRB
 C011 8634              LDAA    #%00110100
 C013 B78001            STAA    CRA       ;  dostop do krmilnih registrov
 C016 B78003            STAA    CRB       ;  (nastavitev na periferni vmesnik)
                *
                **********************************************************
                * Podprogram za test pomnilnika RAM                      *
                **********************************************************
                *
 C019 CE0000            LDX     #$0000
 C01C 86FF      RAMTST  LDAA    #$FF
 C01E A700              STAA    0,X       ;  pise $FF
 C020 A100              CMPA    0,X       ;  preveri
 C022 260E              BNE     NAPAKA
 C024 6F00              CLR     0,X       ;  brise
 C026 6D00              TST     0,X       ;  preveri
 C028 2608              BNE     NAPAKA
 C02A 08                INX
 C02B 8C007F            CPX     #$007F    ;  konec pomnilnika RAM
 C02E 2FEC              BLE     RAMTST
 C030 2018              BRA     PIATST    ;  konca z RAM-om, gre na PIA-o
                *
                * V primeru napake pri testiranju pomnilnika RAM
                * signalizira s prvo in zadnjo lucko (10000001) !
                *
 C032 7F8002    NAPAKA  CLR     DRB       ;  izklop luck
 C035 CEC350            LDX     #50000
 C038 01        ZANKA   NOP               ;  zakasnitev 350 ms
 C039 09                DEX
 C03A 26FC              BNE     ZANKA
 C03C 8681              LDAA    #%10000001
 C03E B78002            STAA    DRB       ;  vklop luck
 C041 CEC350            LDX     #50000
 C044 01        ZANKA1  NOP               ;  zakasnitev 350 ms
 C045 09                DEX
 C046 26FC              BNE     ZANKA1
 C048 20E8              BRA     NAPAKA
                *
                **********************************************************
                * Glavni program = test vmesnika PIA                     *
                *                                                        *
                * Rezultat :  S1  S2   LED diode (v gibanju)             *
                *                                                        *
                *              0   0   10101010   izmenicno              *
                *              1   0   10000000   v desno                *
                *              0   1   00000001   v levo                 *
                *              1   1   10000001   levo-desno             *
                *                                                        *
                **********************************************************
                *
 C04A BDC058    PIATST  JSR     CITAJ     ;  glede na stanje stikal skoci
 C04D 270F              BEQ     LUC00     ;  na ustrezen podprogram
 C04F 44                LSRA
 C050 271C              BEQ     LUC01
 C052 2430              BCC     LUC10
 C054 2544              BCS     LUC11
 C056 20F2              BRA     PIATST
                *
 C058 B68000    CITAJ   LDAA    DRA       ;  odcita stanje stikal S1 in S2
 C05B 8403              ANDA    #%00000011
 C05D 39                RTS
                *
 C05E C6AA      LUC00   LDAB    #%10101010
 C060 F78002    NIC     STAB    DRB       ;  prizge lucke
 C063 BDC0DF            JSR     PAVZA
 C066 53                COMB
 C067 BDC058            JSR     CITAJ     ;  preveri spremembo na stikalih
 C06A 27F4              BEQ     NIC
 C06C 20DC              BRA     PIATST
                *
 C06E C601      LUC01   LDAB    #%00000001
 C070 C100      ENA     CMPB    #0
 C072 27FA              BEQ     LUC01
 C074 F78002            STAB    DRB       ;  prizge lucko
 C077 BDC0DF            JSR     PAVZA
 C07A 58                ASLB              ;  premakne lucko v levo
 C07B BDC058            JSR     CITAJ     ;  preveri spremembo na stikalih
 C07E 8101              CMPA    #1
 C080 27EE              BEQ     ENA
 C082 20C6              BRA     PIATST
                *
 C084 C680      LUC10   LDAB    #%10000000
 C086 C100      DVA     CMPB    #0
 C088 27FA              BEQ     LUC10
 C08A F78002            STAB    DRB       ;  prizge lucko
 C08D BDC0DF            JSR     PAVZA
 C090 54                LSRB              ;  premakne lucko v desno
 C091 BDC058            JSR     CITAJ     ;  preveri spremembo na stikalih
 C094 8102              CMPA    #2
 C096 27EE              BEQ     DVA
 C098 20B0              BRA     PIATST
                *
 C09A C681      LUC11   LDAB    #%10000001
 C09C BDC0D5            JSR     TRI
 C09F 8103              CMPA    #3
 C0A1 26A7              BNE     PIATST
 C0A3 C642              LDAB    #%01000010
 C0A5 BDC0D5            JSR     TRI
 C0A8 8103              CMPA    #3
 C0AA 269E              BNE     PIATST
 C0AC C624              LDAB    #%00100100
 C0AE BDC0D5            JSR     TRI
 C0B1 8103              CMPA    #3
 C0B3 2695              BNE     PIATST
 C0B5 C618              LDAB    #%00011000
 C0B7 BDC0D5            JSR     TRI
 C0BA 8103              CMPA    #3
 C0BC 268C              BNE     PIATST
 C0BE C624              LDAB    #%00100100
 C0C0 BDC0D5            JSR     TRI
 C0C3 8103              CMPA    #3
 C0C5 2683              BNE     PIATST
 C0C7 C642              LDAB    #%01000010
 C0C9 BDC0D5            JSR     TRI
 C0CC 8103              CMPA    #3
 C0CE 2602              BNE     PIAJMP
 C0D0 20C8              BRA     LUC11
                *
 C0D2 7EC04A    PIAJMP  JMP     PIATST    ; neposredno naslavljanje
                *
 C0D5 F78002    TRI     STAB    DRB       ;  prizge lucki
 C0D8 BDC0DF            JSR     PAVZA
 C0DB BDC058            JSR     CITAJ     ;  preveri spremembo na stikalih
 C0DE 39                RTS
                *
 C0DF CEC350    PAVZA   LDX     #50000    ;  zakasnitev 350 ms
 C0E2 01        ZANKA2  NOP
 C0E3 09                DEX
 C0E4 26FC              BNE     ZANKA2
 C0E6 39                RTS
                *
 0000                   END


---- SYMBOL TABLE ----

CITAJ    C058           LUC00    C05E           PIAJMP   C0D2
CRA      8001           LUC01    C06E           PIATST   C04A
CRB      8003           LUC10    C084           RAMTST   C01C
DRA      8000           LUC11    C09A           STCKAD   007F
DRB      8002           NAPAKA   C032           TRI      C0D5
DVA      C086           NIC      C060           ZANKA    C038
ENA      C070           PAVZA    C0DF           ZANKA1   C044
HWRES    C000           PIAADR   8000           ZANKA2   C0E2

***** NO ERRORS DETECTED *****

in drugega:

AVOCET SYSTEMS 6801/6301 ASSEMBLER -  VERSION 2.20M  SERIAL #00413

SOURCE FILE NAME: PROGRAM2.ASM


                *
                **********************************************************
                *                                                        *
                * Drugi testni program : komunikacija                    *
                *                                                        *
                * Program za vaje pri predmetu                           *
                * Arhitektura racunalniskih sistemov II.                 *
                *                                                        *
                * Mikroprocesorski sistem:                               *
                *                                                        *
                *     *  MC6802 CPU+RAM  0000-007F                       *
                *     *    2764 EPROM    C000-DFFF                       *
                *     *  MC6821 PIA      8000-8003                       *
                *                                                        *
                * Avtor : Vladimir Bensa                                 *
                * Datum : 10.5.1995.                                     *
                * Opis programa : Program prenese 8 bitov z enega        *
                *                 sistema na drugega. Oddajni sistem     *
                *                 (master) ima stikali v polozaju 11,    *
                *                 sprejemnik (slave) pa v polozaju 00.   *
                *                 Prenos je viden na luckah.             *
                *                                                        *
                **********************************************************
                *
 007F           STCKAD  EQU     $007F     ;  zacetni naslov sklada v RAM-u
                *
                * Prekinitveni vektorji (najvisjih 8 naslovov v EPROM-u)
                *
 DFF8                   ORG     $DFF8
 DFF8 C050              FDB     IRQSP     ;  maskirana prekinitev
 DFFE                   ORG     $DFFE
 DFFE C000              FDB     HWRES     ;  reset
                *
                * Spremenljivki v RAM-u
                *
 0000                   ORG     $0
 0000           STEVEC  RMB     1         ;  stevec prekinitev (slave)
 0001           PRENOS  RMB     1         ;  shrani vzorec
                *
                * V/I naslovi
                *
 8000           PIAADR  EQU     $8000     ;  zacetni naslov vmesnika PIA
 8000           DRA     EQU     PIAADR    ;  podatkovni register A
 8001           CRA     EQU     PIAADR+1  ;  kontrolni register A
 8002           DRB     EQU     PIAADR+2  ;  podatkovni register B
 8003           CRB     EQU     PIAADR+3  ;  kontrolni register B
                *
                **********************************************************
                * Program v EPROM-u                                      *
                **********************************************************
                *
 C000                   ORG     $C000     ;  zacetni naslov programa (EPROM)
                *
                **********************************************************
                * Inicializacija sistema po resetu                       *
                **********************************************************
                *
 C000 8E007F    HWRES   LDS     #STCKAD   ;  zacetni naslov sklada
                *
                **********************************************************
                * Skupni del inicializacije vmesnika PIA                 *
                **********************************************************
                *
 C003 7F8001            CLR     CRA       ;  dostop do smernega registra A
 C006 7F8000            CLR     DRA       ;  PA so vhodi
 C009 7F8003            CLR     CRB       ;  dostop do smernega registra B
 C00C 86FF              LDAA    #$FF      ;  PB so izhodi
 C00E B78002            STAA    DRB
 C011 86FC              LDAA    #%11111100
 C013 B78003            STAA    CRB       ;  dostop do krmilnih registrov
 C016 B78001            STAA    CRA
                *
 C019 BDC08D    TEST    JSR     CITAJ     ;  preveri stanje stikal
 C01C 2713              BEQ     PIASLA
 C01E C103              CMPB    #3
 C020 2702              BEQ     PIAMAS
 C022 20F5              BRA     TEST
                *
                **********************************************************
                * Locena dela inicializacije vmesnika PIA                *
                **********************************************************
                *
 C024 7F8001    PIAMAS  CLR     CRA       ;  dostop do smernega registra A
 C027 86FC              LDAA    #%11111100
 C029 B78000            STAA    DRA       ;  stikali sta vhoda, ostalo izhodi
 C02C B78001            STAA    CRA       ;  navadno delovanje
 C02F 200B              BRA     MASTER
                *
 C031 86ED      PIASLA  LDAA    #%11101101  ;  usklajevalno delovanje
 C033 B78001            STAA    CRA       ;  omogoci prekinitve na PIA (slave)
 C036 7F0000            CLR     STEVEC    ;  ni se nic preneseno
 C039 0E                CLI               ;  omogoci prekinitve na CPE (slave)
 C03A 2010              BRA     CAKAJ     ;  caka na prekinitev
                *
                **********************************************************
                * Podprogram za oddajnik (master)                        *
                **********************************************************
                *
 C03C C6DB      MASTER  LDAB    #%11011011  ;  VZOREC POSILJKE
 C03E F78002            STAB    DRB       ;  prizge lucke
 C041 D701              STAB    PRENOS    ;  zapomni si vzorec
 C043 F78000            STAB    DRA       ;  poslje zgornjo polovico bitov
 C046 86F5              LDAA    #%11110101
 C048 B78001            STAA    CRA       ;  zadnja fronta na CA2 (IRQ)
 C04B 0E                CLI               ;  omogoci prekinitve na CPE (master)
                *
 C04C 01        CAKAJ   NOP
 C04D 01                NOP
 C04E 20FC              BRA     CAKAJ     ;  caka na prekinitev
                *
                **********************************************************
                * Prekinitveni servisni program                          *
                **********************************************************
                *
 C050 BDC08D    IRQSP   JSR     CITAJ     ;  preveri stikali
 C053 271A              BEQ     IRQSLA
 C055 C103              CMPB    #3
 C057 2702              BEQ     IRQMAS
 C059 20F5              BRA     IRQSP
                *
 C05B 86FC      IRQMAS  LDAA    #%11111100
 C05D B78001            STAA    CRA       ;  onemogoci prekinitve
 C060 D601              LDAB    PRENOS    ;  odcita vzorec za prenos
 C062 58                ASLB              ;  dostop do spodnje polovice bitov
 C063 58                ASLB
 C064 58                ASLB
 C065 58                ASLB
 C066 F78000            STAB    DRA       ;  poslje spodnjo polovico bitov
 C069 86F4              LDAA    #%11110100
 C06B B78001            STAA    CRA       ;  zadnja fronta na CA2 (IRQ)
 C06E 3B                RTI
                *
 C06F F68000    IRQSLA  LDAB    DRA       ;  odcita prispele 4 bite
 C072 C4F0              ANDB    #%11110000
 C074 7D0000            TST     STEVEC
 C077 2703              BEQ     START     ;  to je prva polovica bitov
 C079 2607              BNE     KONEC     ;  ze ima polovico bitov
 C07B 3B                RTI
                *
 C07C D701      START   STAB    PRENOS    ;  shrani prvo polovico bitov
 C07E 7C0000            INC     STEVEC
 C081 3B                RTI
                *
 C082 54        KONEC   LSRB              ;  premik polovice bitov
 C083 54                LSRB
 C084 54                LSRB
 C085 54                LSRB
 C086 9601              LDAA    PRENOS    ;  prva polovica bitov
 C088 1B                ABA               ;  sedaj ima vse bite
 C089 B78002            STAA    DRB       ;  prikaz na luckah
 C08C 3B                RTI
                *
 C08D F68000    CITAJ   LDAB    DRA       ;  odcita stanje stikal S1 in S2
 C090 C403              ANDB    #%00000011
 C092 39                RTS
                *
 0000                   END


---- SYMBOL TABLE ----

CAKAJ    C04C           IRQMAS   C05B           PIASLA   C031
CITAJ    C08D           IRQSLA   C06F           PRENOS   0001
CRA      8001           IRQSP    C050           START    C07C
CRB      8003           KONEC    C082           STCKAD   007F
DRA      8000           MASTER   C03C           STEVEC   0000
DRB      8002           PIAADR   8000           TEST     C019
HWRES    C000           PIAMAS   C024

***** NO ERRORS DETECTED *****

[Avtor] [Gimnazija] [FMF in FRI] /ARS 1/ [Slovenski jezik] [Internet] [Glasba] [Gore] [Hobby] [Vstopna stran] [Kazalo] [E-mail]

© Vladimir Bensa 1995. Zadnji popravek dne 25. avgusta 1998. Obiskov: