Politechnika Lubelska |
Laboratorium podstaw systemów mikroprocesorowych |
|||
w Lublinie |
Ćwiczenie nr 1,2 |
|||
Nazwisko: Garbacz Kuźma |
Imię: Tomasz Jacek |
Semestr V |
Grupa ED 5.3 |
Rok akademicki 1997/98 |
Temat ćwiczenia: Linie wejść i wyjść mikrokontrolera |
Data wykonania 17.10.97 |
Ocena: |
1. Cel ćwiczenia :
Zapoznanie się ze sposobami sterowania urządzeniami podłączonymi bezpośrednio do portów mikrokontrolera.
;************************************************
;LEKCJA 1 - LINIE WEJŚĆ/WYJŚĆ MIKROKONTROLERA
;PRZYKŁAD 4 - MRUGANIE DIODY - OPÓŹNIENIA CZASOWE
;************************************************
LED EQU P1.7 ;Dioda TEST podłączona do portu P1.7
LJMP START
ORG 100H
START:
LOOP: ;Nagłówek pętli mrugania diody TEST
CLR LED ;Zerowanie linii P1.7 powodujące zapalenie diody
MOV A,#10 ;Wprowadzenie do akumulatora wartości 10
LCALL DELAY_100MS ;Wywołanie podprogramu z EPROMu odpowiedzialnego za opóźnienie
SETB LED ;Ustawienie linii P1.7 powodujące gaśnięcie diody
MOV A,#10 ; Wprowadzenie do akumulatora wartości 10
LCALL DELAY_100MS ;Wywołanie podprogramu z EPROMu odpowiedzialnego za opóźnienie
LJMP LOOP ;Skok do początku programu
Program obrazuje nam, iż w systemie istnieje możliwość definiowania swoich zmiennych - LED (etykiecie tej przypisany jest bit #7 portu 1).
Zawarta w listingu instrukcja DELAY_100MS, będąca podprogramem zawartym w pamięci EPROM, pozwala na wprowadzenie opóźnienia w granicach (1 - 256)* 100ms.
;************************************************
;LEKCJA 1 - LINIE WEJŚĆ/WYJŚĆ MIKROKONTROLERA
;PRZYKŁAD 6 - STEROWANIE DIODY I BRZĘCZYKA
;************************************************
LED EQU P1.7 ;Dioda TEST podłączona do P1.7
BUZZER EQU P1.5 ;Brzęczyk podłączony do P1.5
LJMP START
ORG 100H
START:
LOOP: ;Pętla mrugania diody
;i sterowania brzęczyka
CPL LED ;zapal/zgaś diodę TEST
CPL BUZZER ;włącz/wyłącz brzęczyk
MOV A,#10 ;czekaj czas 10*100ms=1s
LCALL DELAY_100MS ;podprogram z EPROMu
LJMP LOOP ;powtórz
;************************************************
LED EQU P1.7 ;Dioda TEST podłączona do P1.7
BUZZER EQU P1.5 ;Brzęczyk podłączony do P1.5
LJMP START
ORG 100H
START:
LOOP: ;Pętla mrugania diody
;i sterowania brzęczyka
CPL LED
MOV A,#20 ; Wprowadzenie do akumulatora wartości 20
LCALL DELAY_100MS ; Wywołanie podprogramu z EPROMu odpowiedzialnego za opóźnienie
CPL LED ;Negacja P1.7
CPL BUZZER ; Negacja P1.5
MOV A,#10 ; Wprowadzenie do akumulatora wartości 10
LCALL DELAY_100MS ; Wywołanie podprogramu z EPROMu odpowiedzialnego zaopóźnienie
CPL BUZZER ; Negacja P1.5
LJMP LOOP ;Skok do początku programu
Użyta w programie instrukcja CPL służy do negacji określonego bitu.
Powyższy program powoduje świecenie diody na przemian z działaniem brzęczyka, przy czym czas działania diody jest dwukrotnie dłuższy od czasu brzęczyka.
;************************************************
;LEKCJA 2 - PORTY MIKROKONTROLERA
;PRZYKŁAD 3 - ZEROWANIE/USTAWIANIE LINII W PORCIE
;************************************************
;Dioda TEST podłączona do linii 7 w porcie P1
LED_ON EQU 01111111B
LED_OFF EQU 10000000B
LJMP START
ORG 100H
START:
LOOP: ; Nagłówek pętli mrugania diody TEST
ANL P1,#LED_ON ;Zerowanie linii 7 portu P1 (włączenie diody TEST)
ORL P1,#LED_OFF ;Ustawienie linii 7 portu P1(wyłączenie diody TEST)
LJMP LOOP ;Skok do początku programu
;************************************************
;LEKCJA 2 - PORTY MIKROKONTROLERA
;PRZYKŁAD 4 - ZMIANA STANU LINII W PORCIE
;************************************************
;Dioda TEST podłączona do linii 7 w porcie P1
LED_MASK EQU 10000000B ;Maska do zmiany
;stanu linii 7
LJMP START
ORG 100H
START:
LOOP: ;Nagłówek pętli mrugania diody
XRL P1,#LED_MASK ;Negacja linii 7 portu 1 (wączanie/wyłączenie diody TEST)
MOV A,#10 ;Wprowadzenie do akumulatora wartości 10
LCALL DELAY_100MS ; Wywołanie podprogramu z EPROMu (opóźnienie czasowe)
LJMP LOOP ;Skok do początku programu
W programach wykorzystano maski, które odpowiedzialne są za ustawienie odpowiednich bitów w porcie, jak również całego portu. Jedną z zalet takiego programowania jest możliwość dokonywania modyfikacji programu bez głębszej ingerencji w listing - wystarczy zmienić odpowiednie bity w masce.
;************************************************
;LEKCJA 1 - LINIE WEJŚĆ/WYJŚĆ MIKROKONTROLERA
;PRZYKŁAD 6 - STEROWANIE DIODY I BRZĘCZYKA
;************************************************
LED EQU P1.7
LED_BUZ EQU 10100000B ;Maska do zmiany stanu linii 5 i 7
LJMP START
ORG 100H
START:
CLR LED
LOOP: ;Pętla mrugania diody i sterowania brzęczyka
XRL P1,#LED_BUZ ; Negacja linii (0⇒1,1⇒0)
MOV A,#10 ;Czekaj czas 10*100ms=1s
LCALL DELAY_100MS ;Podprogram z EPROMu
XRL P1,#LED_BUZ
MOV A,#20
LCALL DELAY_100MS
LJMP LOOP ;Skok do początku pętli
Powyższy program powoduje świecenie diody na przemian z działaniem brzęczyka, gdzie czas działania diody jest dwukrotnie dłuższy od czasu brzęczyka, a zmiana stanów linii diody i brzęczyka jest dokonywana za pomocą maski LED_BUZ.
;************************************************
;LEKCJA 2 - PORTY MIKROKONTROLERA
;PRZYKťAD 4 - ZMIANA STANU LINII W PORCIE
;************************************************
ZM EQU 00100100B ; Maska do zmiany stanów linii 2 i 5
MASK EQU 11001111B ; Maska ustawiająca początkowy stan bitów portu
LJMP START
ORG 100H
START:
MOV P1,#MASK ;Ustawienie początkowego stanu portu P1
LCALL LCD_CLR ;Czyszczenie wyświetlacza LCD (podprogram z EPROMu)
MOV A,P1
LCALL WRITE_HEX ; Wyświetlenie zawartości akumulatora
XRL P1,#ZM ;Zmiana stanów linii
MOV A,#' '
LCALL WRITE_DATA ;Wyświetlenie znaku w postaci spacji
MOV A,P1
LCALL WRITE_HEX
LJMP $ ;Pozostanie w pętli
Powyższy program powoduje ustalenie początkowego stanu portu P1, a następnie zostaje zmieniony stan linii 2 i 5 tego portu oraz wyświetlenie zawartości akumulatora przed i po wykonaniu ciągu operacji.