⚙️ Silnik (Motor) – włącz/wyłącz (Asembler 8051)

Opóźnienia i sterowanie peryferiami

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:

Co zrobimy praktycznie?
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”.

Co zrobimy praktycznie?
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:

W tej lekcji sterujemy wyjściami P3.0 i P3.1. Jeśli u Ciebie mapowanie jest inne – zmieniasz tylko definicje bitów na początku programu.
Schemat połączeń EdSim51 – Motor i porty
EdSim51 – schemat połączeń (Motor / porty P0–P3)
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?

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ę:

Wniosek: dziś ćwiczymy ON/OFF z opóźnieniami programowymi. W kolejnych lekcjach zrobimy to na timerach (PWM) i dołożymy odczyt Motor Sensor.

8. Dobre praktyki w asemblerze (od razu uczymy się porządku)

9. Zadania dla ucznia

  1. Zmień kombinację sterowania i/lub definicje bitów (MOTOR0/MOTOR1) z P1.7 na inny (np. P1.0) i sprawdź, czy działa.
  2. Zrób rytm: krótki ON (DELAY_SHORT) i długi OFF (DELAY_LONG).
  3. 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).
  4. (Dla chętnych) Dodaj LED (np. P1.0) i zsynchronizuj ją z silnikiem (LED świeci, gdy silnik jest w trybie ON).