```
;Inizializza il puntatore dello stack su 0FFFH (32767)
LXI SP, 0FFFH
;Definizione delle costanti per il controllo del motore passo-passo:
MOV A,#10;Definire il valore di ritardo per il controllo del motore passo-passo (arbitrario)
MOV B,A;Copia il valore del ritardo nel registro B
MOV A,0;Definisce la direzione iniziale (0 per orario, 1 per antiorario)
MOV C,A;Copia la direzione nel registro C
;Configurare la porta I/O 8255:
MVI A,0FFH;Imposta tutte le linee della porta come uscita (utilizzando la parola di controllo PPI)
MOV M,A;Scrivi nel registro di controllo (P1M)
;Definire l'indirizzo della porta I/O:
MOV A,#10H;Indirizzo base per 8255 PPI (8255-5)
MOV M,A;Memorizza l'indirizzo di base nella posizione di memoria
;Loop principale per il controllo del motore passo-passo:
LOOP:;Etichetta per rappresentare l'inizio del loop principale
;Passo 1:ruotare il motore in senso orario (direzione =0)
MVI A,0;Imposta la direzione oraria
MOV C,A;Copia la direzione nel registro C
;Genera sequenza di segnali di controllo per la rotazione del motore
MVI A,#0B;Parola di controllo per impostare le linee P1.1, P1.2, P1.3 della porta B come uscite
MOV M,A;Scrive nel registro di controllo della porta B
MVI A,#9BH;Parola di controllo per ruotare il motore in senso orario (P1.1=1, P1.2=0, P1.3=1)
MOV M,A;Scrive nel registro dati della porta B
;Ritardo per rallentare la rotazione del motore:
DELAY:;Subroutine di ritardo per controllare la velocità di rotazione del motore
DCR B;Decrementa il valore del ritardo nel registro B
JZ ENDD;Se il valore del ritardo raggiunge lo zero, il ritardo è completo
MOV A,B;Copia il valore del ritardo dal registro B al registro A
JMP DELAY;Torna al ciclo DELAY fino al completamento del ritardo
ENDD:;Fine della subroutine di ritardo
;Passo 2:ruotare il motore in senso antiorario (direzione =1)
MVI A,1;Imposta la direzione antioraria
MOV C,A;Copia la direzione nel registro C
;Genera sequenza di segnali di controllo per la rotazione del motore
MVI A,#0B;Parola di controllo per impostare le linee P1.1, P1.2, P1.3 della porta B come uscite
MOV M,A;Scrive nel registro di controllo della porta B
MVI A,#6EH;Parola di controllo per ruotare il motore in senso antiorario (P1.1=0, P1.2=1, P1.3=1)
MOV M,A;Scrive nel registro dati della porta B
;Ritardo per rallentare la rotazione del motore:
DELAY:;Subroutine di ritardo
DCR B
JZ FINE
MOV A, B
RITARDO JMP
FINE:
;Ripetere il ciclo principale per ruotare continuamente il motore
CICLO JMP
```
Questo programma utilizza l'8255 PPI per controllare la direzione di rotazione e la velocità del motore passo-passo. Impostando e cancellando i bit appropriati nel registro dati della porta B dell'8255, il programma genera i segnali di controllo necessari per la rotazione in senso orario o antiorario. La subroutine di ritardo garantisce il controllo della velocità di rotazione del motore.
Programmazione © www.354353.com