Politechnika Lubelska
Sprawozdanie
Z laboratorium Podstaw techniki mikroprocesorowej
Tytuł ćwiczenia: Linie wejść i wyjść mikrokontrolera porty.
Porty mikrokontrolera.
Imię i nazwisko:
Nr ćwiczenia:C1
Grupa: Mechatronika
Rok akademicki 2014/15
Celem ćwiczenia jest zapoznanie się ze sposobami sterowania portami mikrokontrolera 8051.
Kod programu przed asemblacją:
LJMP START
ORG 100H
START:
CLR P1.7 ;zeruj linię 7 w porcie P1
;czyli zapal diodę TEST
STOP: ;nie wykonuj innych działań
LJMP STOP ;- pozostań w pętli STOP
Kod programu po asemblacji:
10 0000: 02 01 00 LJMP START
11 0100: ORG 100H
12 0100: START:
13
14 0100: C2 97 CLR P1.7 ;zeruj linię 7 w porcie P1
15 ;czyli zapal diodę TEST
16
17 0102: STOP: ;nie wykonuj innych działań
18 0102: 02 01 02 LJMP STOP ;- pozostań w pętli STOP
1) Zostały dodane kody rozkazów, numery wierszy, błędy zostały oznaczone wykrzyknikami, oraz rozkazy zamienione na system szesnastkowy.
2)
W tym trybie korzystamy z programatora bez użycia komputera co jest bardzo nie wygodne.
Kod programu:
LED EQU P1.7 ;Dioda TEST podłączona do P1.7
LJMP START
ORG 100H
START:
LOOP: ;Pętla mrugania diody TEST
CLR LED ;zeruj linię -zapal diodę
MOV A,#10 ;czekaj czas 10*100ms=1s
LCALL DELAY_100MS ;podprogram z EPROMu
SETB LED ;ustaw linię -zgaś diodę
MOV A,#10 ;czekaj czas 10*100ms=1s
LCALL DELAY_100MS
LJMP LOOP ;powtórz
1) Każdy rozkaz wykonywany jest po kolei.
2) Dzięki Funkcji EQU programista może szybciej się zorientować w programie co jest dla niego dużym ułatwieniem.
3)
4) DELAY_100MS służy do obliczenia opóźnienia wzorem A*100ms. Najniższą wartością akumulatora jest 00000000B (0D), najwyższą natomiast jest 11111111B (255D). Wynika z tego, że zakres opóźnień wynosi 0-25,5s.
Kod programu:
LED EQU P1.7 ;Dioda TEST podłączona do P1.7
BUZZER EQU P1.5 ;Brzęczyk podłączony do P1.5
;Stan 0 włącza brzęczyk
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
1) Funkcja CPL – negacja, zmienia wartość bitu na przeciwny, 0 na 1, a 1 na 0.
2)
3)
LED EQU P1.7
BUZZER EQU P1.5
LJMP START
ORG 100H
START:
CLR LED
LOOP:
CPL LED
MOV A,#10
LCALL DELAY_100MS
CPL BUZZER
MOV A,#10
LCALL DELAY_100MS
LJMP LOOP
4)
Kod programu:
LED_ON EQU 01111111B
LJMP START
ORG 100H
START:
MOV P1,#LED_ON ;wpisz 0 na bit7 portu P1
;wpisz 1-ki na bity 0..6
;czyli zapal diodę TEST
LJMP $ ;pozostań w pętli
1) Następuje zmiana wartości P1 (zmieniony 7 bit) co skutkuje zaświeceniem diody TEST.
Wartość rejestru P1 zmienia się z FFH na 7FH co oznacza, że został zmieniony 7 bit, czyli zapalenie diody TEST.
Kod programu A:
LED_ON EQU 01111111B
LJMP START
ORG 100H
START:
ANL P1,#LED_ON ;zeruj linię 7 portu P1
;czyli zapal diodę TEST
LJMP $ ;pozostań w pętli
Kod programu B:
LED_ON EQU 01111111B
LED_OFF EQU 10000000B
LJMP START
ORG 100H
START:
LOOP: ;pętla mrugania diody
ANL P1,#LED_ON ;zeruj linię 7 portu P1
;czyli zapal diodę TEST
ORL P1,#LED_OFF ;ustaw linię 7 portu P1
;czyli zgaś diodę TEST
LJMP LOOP ;powtórz
Kod programu C:
LED_MASK EQU 10000000B ;maska do zmiany
;stanu linii 7
LJMP START
ORG 100H
START:
LOOP: ;Pętla mrugania diody
XRL P1,#LED_MASK ;neguj linię (0->1,1->0)
;zapal/zgaś diodę TEST
MOV A,#10 ;czekaj czas 10*100ms=1s
LCALL DELAY_100MS ;podprogram z EPROMu
LJMP LOOP ;powtórz
1) Sposób użyty w programie C jest najbardziej optymalny ze względu na ilość użytych rozkazów oraz koniecznych stałych globalnych. Efekt działania programów B i C jest taki sam, lecz program B wymaga użycia dwóch stałych globalnych i dwóch rozkazów w pętli, natomiast program C wymaga tylko jednej stałej globalnej (tzw. maski) i tylko jednego rozkazu w pętli.
Zarówno w przypadku programu B jak i C zmianie podlega tylko bit 7 portu P1, reszta bitów należących do tego portu pozostaje taka sama, bez względu na ich stan.
2) A: Wartość rejestru P1 zmienia się z FFH na 7FH
B: Wartość rejestru P1 po wykonaniu rozkazu " ANL P1,#LED_ON" zmienia się z FFH na 7FH, natomiast po wykonaniu rozkazu "ORL P1,#LED_OFF" zmienia się do poprzedniej wartości, po czym od nowa rozpoczynana jest pętla.
C: Wartość rejestru P1 po pierwszym wykonaniu pętli zmienia się z FFH na 7FH, natomiast po drugim na odwrót i tak cały czas.
1)
LED EQU P1.7 ;Dioda TEST podłączona do P1.7
BUZZER EQU P1.5 ;Brzęczyk podłączony do P1.5
;Stan 0 włącza brzęczyk
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
2)
LED EQU P1.7 ;Dioda TEST podłączona do P1.7
BUZZER EQU P1.5 ;Brzęczyk podłączony do P1.5
;Stan 0 włącza brzęczyk
LJMP START
ORG 100H
START:
CPL LED
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
3)
MOV A,#xx00x1x1B
XRL A,#00100100B