-Na wyposażeniu Pracowni Elektronicznej znajdują się m.in. systemy mikroprocesorowe do nauki programowania. Producentem tych urządzeń jest firma MicroMade

 

 

Tu znajdziesz więcej informacji dotyczących Dydaktycznego Systemu Mikroprocesorowego DSM-51.

 

Poniżej przedstawiono przykładowy program stworzony w ramach lekcji Pracowni Mikroprocesorowej. Ma on na celu wykorzystanie wyświetlacza LED bez korzystania z wewnętrznych procedur systemu DSM-51.

 

Niektóre warunki, jakie musi spełnić procedura obsługi wyświetlacza wielocyfrowego LED:

- sterowanie sekwencyjne (w danym momencie świeci tylko jedna z cyfr),

- częstotliwość odświeżania wyświetlacza powinna wynosić kilkadziesiąt Hz, aby nie występowało zjawisko migotania,

- czas świecenia kolejnych cyfr musi być identyczny, aby ich jasność była jednakowa,

- w momencie zmiany numeru świecącej cyfry, najpierw należy wygasić poprzednią, co uchroni nas przed pojawianiem się tzw. „duchów” (słabo świecących segmentów, które powinny być wygaszone)

Program obsługuje wyświetlacz rzeczywisty, zatem należy uwzględnić w nim fakt, że po włączeniu zasilania lub sprzętowym resecie, rejestry robocze (tzw. uniwersalne) mają nieokreśloną wartość.

 

Powstający program musi uwzględniać połączenia sprzętowe. Przy jego tworzeniu uwzględniono następujące fakty:

- wybór aktywnej cyfry „leży” w pamięci zewnętrznej pod adresem 0FF30h

- wybór zaświecanych segmentów pod adresem 0FF38h

 

Teraz można przystąpić do pisania programu.

Przypomnę tylko, że po średniku znajdują się komentarze wyjaśniające funkcjonowanie poszczególnych fragmentów programu.


;**************************************************

;*            DSM-51 - Wyświetlacz sekwencyjny 7-segmentowy           *

;**************************************************

 

znaki     EQU      200h

cyfra     EQU      0FF30h

segm    EQU      0FF38h

 

;------------------------------------------------

            LJMP start                     ; ominięcie wektora przerwań

 

;============= PRZERWANIE PERODYCZNE ============

            ORG 0Bh

period:MOV TH0,#0DCh             ; ustawienie periodu 1,25ms

;------------------------------------------------

            MOV DPTR,#segm

            CLR A

            MOVX @DPTR,A            ; wygaszenie poprzedniej cyfry

;------------------------------------------------

            MOV 6,R7

            MOV A,#80h

digit:     RL A

            DJNZ R6,digit                 ; generowanie numeru cyfry

            MOV DPTR,#cyfra

            MOVX @DPTR,A

;------------------------------------------------

            MOV A,R7

            ADD A,#9

            MOV R0,A                     ; wczytanie znaku do wyświetlenia

            MOV A,@R0

;------------------------------------------------

            MOV DPTR,#znaki

            MOVC A,@A+DPTR

            MOV DPTR,#segm

            MOVX @DPTR,A            ; zaświecenie segmentów cyfry

;------------------------------------------------

; w tym miejscu można dopisać dodatkowe procedury

; np. animacji napisu czy zegara czasu rzeczywistego

;------------------------------------------------

            DJNZ R7,out

            MOV R7,#6                   ; przygotowanie numeru kolejnej cyfry

out:      RETI

;===========================

 

            ORG 100h

start:    CLR A

            MOV R0,#0FFh

resRAM:MOV @R0,A                 ; zerowanie rejestrów roboczych

            DJNZ R0,resRAM

;------------------------------------------------

            MOV TMOD,#0              ; wybór trybu nr 0 licznika T0

            MOV IE,#82h                ; otwarcie przerwania od timera T0

            MOV SP,#77h               ; przesunięcie wskaźnika stosu w głąb „RAMu

            MOV R7,#6                   ; numer pierwszej cyfry do wyświetlenia

            CLR P1.6                       ; włączenie wyświetlacza LED

            SETB TR0                     ; start timera T0

;------------------------------------------------

            MOV 0Fh,#0Dh

            MOV 0Eh,#5

            MOV 0Dh,#17h              ; wpisanie tekstu do wyświetlenia

            MOV 0Ch,#1EH              ; tutaj: „dSn-51”

            MOV 0Bh,#5

            MOV 0Ah,#1

;------------------------------------------------

sleep:   ORL PCON,#1                ; wymuszenie trybu IDLE

            SJMP sleep

 

;================ TABLICA ZNAKÓW ================

            ORG 200h

            DB 3Fh, 06h, 5Bh, 4Fh, 66h, 6Dh, 7Dh, 07h         ; 0,1,2,3,4,5,6,7 \

            DB 7Fh, 6Fh, 77h, 7Ch, 39h, 5Eh, 79h, 71h         ; 8,9,A,b,C,d,E,F  | bez

            DB 00h, 51h, 3Dh, 74h, 76h, 1Eh, 38h, 54h         ;  ,c,G,h,H,J,L,n   | kropek

            DB 5Ch, 73h, 50h, 78h, 1Ch, 3Eh, 40h, 08h         ; o,P,r,t,u,U,-,_  /

 

            DB 0BFh,086h,0DBh,0CFh,0E6h,0EDh,0FDh,087h  ; 0,1,2,3,4,5,6,7 \

            DB 0FFh,0EFh,0F7h,0FCh,0B9h,0DEh,0F9h,0F1h  ; 8,9,A,b,C,d,E,F  | z

            DB 080h,0D1h,0BDh,0F4h,0F6h,09Eh,0B8h,0D4h  ;  ,c,G,h,H,J,L,n   | kropkami

            DB 0DCh,0F3h,0D0h,0F8h,09Ch,0BEh,0C0h,088h ; o,P,q,r,t,U,-,_  /

 

Konstruując podobny układ i dokonując ewentualnych modyfikacji niezbędnych ze względów sprzętowych, będzie można wykorzystać omawiany program we własnym urządzeniu.

 

Autor Bogdan Wykręt