1. Cel lekcji
W tej lekcji przechodzimy o krok dalej od LED i zaczynamy sterować „prawdziwym peryferium”: silnikiem (Motor). Z punktu widzenia 8051 silnik to nadal sygnał cyfrowy na pinie portu, ale dochodzą dwie ważne umiejętności:
- opóźnienia – aby silnik pracował w określonym rytmie (sterowanie ON/OFF),
- procedury i organizacja kodu – żeby program był czytelny i łatwy do modyfikacji.
1) włączymy silnik i go wyłączymy,
2) zrobimy pracę impulsową (krótkie impulsy ON/OFF),
3) pokażemy, jak budować opóźnienia i dlaczego to działa.
2. Co sterujemy w EdSim51? Blok „Motor”
W EdSim51 mamy blok Motor (sterowanie silnikiem) oraz Motor Sensor (czujnik). To dobry przykład peryferium, bo uczysz się pracy z portami, opóźnieniami i procedurami – a efekt jest „mechaniczny”.
- Motor Control Bit 0 i Motor Control Bit 1 – dwie linie sterujące (w praktyce: kierunek/tryb pracy).
- Motor Sensor – wejście do obserwacji/odczytu (zostawimy na kolejną lekcję).
- W realnych układach to odpowiada sterowaniu mostkiem H lub driverem silnika – dwa bity = prosta logika sterowania.
1) włączymy silnik i go wyłączymy,
2) zrobimy pracę impulsową (ON/OFF w rytmie),
3) pokażemy, jak opóźnienia wpływają na zachowanie peryferium.
3. Gdzie jest „Motor” w EdSim51 i do jakich pinów jest podłączony?
Z mapowania portów EdSim51 wynika, że sterowanie silnikiem jest wyprowadzone na port P3:
- Motor Control Bit 0 → P3.0
- Motor Control Bit 1 → P3.1
- Motor Sensor → P3.5 (wejście – opcjonalnie na później)
Na schemacie widać linie sterujące „Motor Control Bit 0/1” (P3.0/P3.1) oraz czujnik „Motor Sensor” (P3.5).
4. Minimalny program: motor ON i stop
Zaczynamy od absolutnego minimum: ustawiamy pin sterujący na 1 (lub 0 – zależnie od logiki) i wchodzimy w pętlę. Dla przejrzystości zdefiniujemy nazwy bitów sterujących jako symbole (MOTOR0/MOTOR1).
; =========================================
; Lekcja 4 – Program 2: Praca impulsowa silnika (ON/OFF)
; =========================================
ORG 0000h
MOTOR0 EQU 0B0h ; P3.0 – Motor Control Bit 0
MOTOR1 EQU 0B1h ; P3.1 – Motor Control Bit 1
MAIN:
; ON: ustaw tryb pracy (np. „przód”)
SETB MOTOR0
CLR MOTOR1
ACALL DELAY_LONG
; OFF: zatrzymanie (oba bity = 0)
CLR MOTOR0
CLR MOTOR1
ACALL DELAY_LONG
SJMP MAIN
; --- opóźnienie (zmieniaj wartości, aby dobrać rytm) ---
DELAY_LONG:
MOV R6, #50
L1: MOV R7, #200
L2: DJNZ R7, L2
DJNZ R6, L1
RET
END
6.1. Co warto obserwować w symulatorze?
- Rejestr portu (np. P1) – powinien zmieniać się odpowiedni bit.
- Rejestry R6 i R7 – powinny „odliczać” do zera w procedurze opóźnienia.
- W EdSim51 powinieneś widzieć zmianę stanu bloków „Motor/bridge driver” oraz odpowiadające im bity portu P3.
7. Mała teoria: co daje sterowanie impulsowe (ON/OFF)?
Przy silnikach DC bardzo często stosuje się sterowanie impulsowe (w docelowych projektach jako PWM). Tu robimy wersję „startową” – długie odcinki ON i OFF – żeby zrozumieć zasadę:
- gdy sygnał jest ON, silnik dostaje zasilanie i rusza,
- gdy sygnał jest OFF, silnik zwalnia lub zatrzymuje się,
- zmieniając proporcję czasu ON do OFF, wpływasz na „średnią moc” (w realnym układzie: prędkość).
8. Dobre praktyki w asemblerze (od razu uczymy się porządku)
- Symbol dla pinu (np. MOTOR0 EQU 0B0h) – potem zmieniasz pin w jednym miejscu.
- Procedury (DELAY_LONG) – nie powielasz kodu.
- Opis (komentarze) – w asemblerze komentarz to połowa sukcesu.
9. Zadania dla ucznia
- Zmień kombinację sterowania i/lub definicje bitów (MOTOR0/MOTOR1) z P1.7 na inny (np. P1.0) i sprawdź, czy działa.
- Zrób rytm: krótki ON (DELAY_SHORT) i długi OFF (DELAY_LONG).
- Zaprojektuj sekwencję pracy impulsowej: trzy krótkie cykle ON/OFF, trzy długie cykle ON/OFF, trzy krótkie cykle ON/OFF (dobierz opóźnienia).
- (Dla chętnych) Dodaj LED (np. P1.0) i zsynchronizuj ją z silnikiem (LED świeci, gdy silnik jest w trybie ON).