AUTOMAZIONE CON SISTEMA A MICROCONTROLLORE "EVITA OSTACOLI"

Home GENERALITA' SOLUZIONE PROG. ESECUTIVO DOCUMENTAZIONE REALIZZAZIONE COLLAUDO MANUALE D'USO CREDITI FOTO FINALE FILMATO DEL PROG

Pali Alessio

Classe:  Quinta

Sezione: Elettronica e Telecomunicazioni

A.S.: 2006/2007 

ITIS Marconi Domodossola

 

 

Il programma in ASSEMBLY bisogna comporlo in tre parti, la prima riguarda la scrittura delle etichette, principalmente per identificare una riga, la seconda è quella riguardante le istruzione, e la terza riguarda i commenti, sempre preceduti da un punto e virgola “;”.
Prima di procedere alla stesura del programma bisogna dare delle direttive, come:

1) Scelta del tipo di microprocessore (preceduta dall’istruzione “LIST”;

2) Scelta della base numerica (preceduta dall’istruzione “RADIX”);

3) Scelta dell’header file (preceduta dall’istruzione “INCLUDE”);

4) Scelta della configurazione di lavoro (preceduta dall’istruzione “__CONFIG”);

5) Scelta delle variabili (come ad esempio: X RES 1. Significa che abbiamo inserito un registro di nome “X”, che occupa nella memoria uno spazio pari a 1 Byte);

Programmi:

-"evita gli ostacoli";

-"evita gli ostacoli"+"inseguitore di luce".

 

Torna ad inizio pagina


Ecco il programma che esegue “evita gli ostacoli”:

;**********************************************************************************************************
;
; Creatore:                             Classe: Quinta                             Programma: ROBOT
;
; -Pali Alessio                          Sezione: O                                   Funzione del programma: Fare in modo che il Robot comandato da ;                                                                                                  questo programma eviti gli ostacoli che gli ostruiscono la via.

; Data: 30/05/2007
;
;**********************************************************************************************************
;ROBOT
LIST P=16F876A ;SCELTA MICROCONTROLLORE
RADIX DEC ;SCELTA BASE NUMERICA
INCLUDE <P16F876A.INC> ;HEADER FILE
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC

ORG 20H
X RES 1 ;DICHIARAZIONE VARIABILE ‘X’
Y RES 1 ;DICHIARAZIONE VARIABILE ‘Y’

ORG 00H
BSF STATUS,RP0 ;ENTRIAMO NEL BANCO #1 PER CONFIGURARE IN E OUT
MOVLW 0XFF ;CREIAMO IL DATO ‘1111’ NEL REGISTRO ‘W’
MOVWF TRISA ;CARICO NEL REGISTRO TRISA IL DATO PRIMA CARICATO IN ‘W’
CLRF TRISB ;IMPOSTIAMO TUTTA LA LINEA COME USCITA PER I MOTORI
MOVLW B'01001110' ;CREIAMO IL DATO ‘01001110’ NEL REGISTRO ‘W’
MOVWF ADCON1 ;CONFIGURO PORTA COME IN DIGITALE
BCF STATUS,RP0 ;TORNIAMO NEL BANCO #0
BCF ADCON0,2 ;DISATTIVIAMO IL CONVERTITORE
CLRF PORTA ;AZZERIAMO TUTTA L’USCITA PER EVITARE ERRORIALL’ACCENSIONE
INIZIO
BCF ADCON0,2 ;DISATTIVIAMO IL CONVERTITORE
BCF PORTC,1
BSF PORTC,2
BTFSS PORTA,3 ;TESTIAMO IL SENSORE DX E SE E' ATTIVO SALTIAMO
;UNA RIGA
GOTO SENLEFT ;VADO A TESTARE IL SENSORE DI SINISTRA
CICLO2
CALL INDIETRO ;IL ROBOT VA INDIETRO
CALL DELAY ;RITARDO
CALL DELAY ;RITARDO
BTFSC PORTA,3 ;RITESTA IL SENSORE DX PER EVITARE ERRORI DI
;POSIZIONE
GOTO CICLO2 ;SE SI VERIFICA,SIGNIFICA CHE IL ROBOT SENTE
;L'OSTACOLO E VA AL CICLO 2 ED INDIETREGGIA
CALL SINISTRA ;IL ROBOT GIRA A SINISTRA
CALL DELAY ;ENTRIAMO NEL CICLO DI TEMPORIZZAZIONE
CALL DELAY ;RITARDO
CALL AVANTI ;IL ROBOT VAAVANTI
GOTO START ;TORNIAMO ALL'INIZIO DEL PROGRAMMA
SENLEFT
BTFSS PORTA,2 ;TESTIAMO IL SENSORE SX E SE E' ATTIVO SALTIAMO
;UNA RIGA
GOTO START ;TORNIAMO A TESTARE IL SENSORE DX
CICLO3
CALL INDIETRO ;IL ROBOT VA INDIETRO
CALL DELAY ;RITARDO
CALL DELAY ;RITARDO
BTFSC PORTA,2 ;TESTA IL SENSORE SX PER EVITARE ERRORI DI
;POSIZIONE
GOTO CICLO3 ;SE SI VERIFICA, SIGNIFICA CHE IL ROBOT SENTE
;L'OSTACOLO ED INDIETREGGIA
CALL DESTRA ;IL ROBOT GIRA A DESTRA
CALL DELAY ;ENTRIAMO NEL CICLO DI TEMPORIZZAZIONE
CALL DELAY ;RITARDO
CALL AVANTI ;IL ROBOT VAAVANTI
GOTO INIZIO ;TORNIAMO ALL'INIZIO DEL PROGRAMMA

;**********************************************************************************************************
;Procedura di ritardo
;**********************************************************************************************************

DELAY
MOVLW 0XFF ;CREIAMO IL DATO 256 NELL'ACCUMULATORE W
MOVWF X ;CARICHIAMO IL DATO DI W IN 'X'
MOVLW 0XFF ;CREIAMO IL DATO 256 NELL'ACCUMULATORE W
MOVWF Y ;CARICHIAMO IL DATO DI W IN 'Y'
ESTER
DECFSZ X,1 ;DECREMENTIAMO DI 1 IL REGISTRO 'X'
GOTO INTER
GOTO FINE
INTER
DECFSZ Y,1 ;DECREMENTIAMO DI 1 IL REGISTRO 'Y'
GOTO INTER
GOTO ESTER
FINE
RETURN ;FINE DELLA SUBROUTINE

;**********************************************************************************************************
;Il Robot va a marcia avanti
;**********************************************************************************************************
AVANTI
BCF PORTB,0 ;MOTORE SX AVANTI
BSF PORTB,1 ;MOTORE SX AVANTI
BCF PORTB,2 ;MOTORE DX AVANTI
BSF PORTB,3 ;MOTORE DX AVANTI
BCF PORTB,4 ;LED SX ON
BCF PORTB,5 ;LED DX ON
RETURN

;**********************************************************************************************************
;Il Robot gira a destra
;**********************************************************************************************************

DESTRA
BCF PORTB,0 ;MOTORE SX AVANTI
BSF PORTB,1 ;MOTORE SX AVANTI
BCF PORTB,2 ;MOTORE DX FERMO
BCF PORTB,3 ;MOTORE DX FERMO
BSF PORTB,4 ;LED SX OFF
BCF PORTB,5 ;LED DX ON
RETURN

;**********************************************************************************************************
;Il Robot gira a sinistra
;**********************************************************************************************************
SINISTRA
BCF PORTB,0 ;MOTORE SX FERMO
BCF PORTB,1 ;MOTORE SX FERMO
BCF PORTB,2 ;MOTORE DX AVANTI
BSF PORTB,3 ;MOTORE DX AVANTI
BCF PORTB,4 ;LED SX ON
BSF PORTB,5 ;LED DX OFF
RETURN

;**********************************************************************************************************
;Il Robot va indietro
;**********************************************************************************************************
INDIETRO
BSF PORTB,0 ;MOTORE SX AVANTI
BCF PORTB,1 ;MOTORE SX AVANTI
BSF PORTB,2 ;MOTORE DX FERMO
BCF PORTB,3 ;MOTORE DX FERMO
BSF PORTB,4 ;LED SX OFF
BSF PORTB,5 ;LED DX OFF
RETURN

END

 

Torna ad inizio pagina

 

Ecco il programma che esegue “evita gli ostacoli” più “inseguitore di luce”:

;**********************************************************************************************************
; Progetto Robot: evita gli ostacoli ed insegue una fonte di luce.
;
; _Creatori: Classe 5^O                             Anno scolastico: 2006/07
;
; -Antonietti simone
; -Boschetti Davide
; -Pali Alessio                                             Data: 30/05/07
;
;**********************************************************************************************************
LIST P=PIC16F876A ;SCELTA MICROCHIP
RADIX DEC ;SCELTA BASE NUMERICA
INCLUDE <P16F876A.INC> ;HEADER FILE
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
ORG 20H

X RES 1 ;DICHIARAZIONE VARIABILE X
Y RES 1 ;DICHIARAZIONE VARIABILE Y
PROG RES 1 ;DICHIARAZIONE VARIABILE PROG
FR_DX RES 1 ;DICHIARAZIONE VARIABILE FOTORES DX
DECI RES 1 ;DICHIARAZIONE VARIABILE CONTATORE DEC

ORG 00H ;INDIRIZZO D'INIZIO
BCF STATUS,6 ;BANCO 1
BSF STATUS,5 ;BANCO 1
MOVLW 0FFH ;CARICO IN W FFH PER IMPOSTARE IL TRISA
MOVWF TRISA ;TRISA CONFIGURATO COME INGRESSO
MOVLW 00H ;CARICO IN W 00H PER IMPOSTARE IL TRISB
MOVWF TRISB ;TRISB CONFIGURATO COME USCITA
MOVLW 001H ;CARICO IN W 01H PER IMPOSTARE IL TRISC
MOVWF TRISC ;TRISC CONFIG COME INGRESSO (0) E USCITA (1;2)
BCF STATUS,5 ;BANCO 0

CLRF PORTC
CLRF PROG
CLRF PORTB ;PORTB TUTTO SPENTO


;**********************************************************************************************************
;Scelta del programma da eseguire
;**********************************************************************************************************

INIZIO
START
BTFSC PORTC,0 ;TEST PER LA SCELTA DEL PROGRAMMA
GOTO SCELTA1 ;VADO A TESTARE IL BIT 0 DEL REGISTRO 'PROG'
SCELTA2
BTFSS PORTC,0
GOTO SCELTA2
COMF PROG ;COMPLEMENTO IL REGISTRO 'PROG'
BTFSS PROG,0 ;TESTO IL BIT 0 DEL REGISTRO 'PROG'
GOTO ULTR ;VA AL PROGRAMMA DEGLI ULTRASUONI
GOTO FRT ;VA AL PROGRAMMA DELLE FOTORESISTENZE
SCELTA1
BTFSS PROG,0
GOTO ULTR ;VA AL PROGRAMMA DEGLI ULTRASUONI
GOTO FRT ;VA AL PROGRAMMA DELLE FOTORESISTENZE


;**********************************************************************************************************
;Programma ROBOT con Ultrasuoni
;**********************************************************************************************************


ULTR
BCF STATUS,6 ;BANCO 1
BSF STATUS,5 ;BANCO 1
MOVLW B'00000111' ;CARICO IN W IL NUMERO BINARIO '00000111'
;PER IMPOSTARE IL ADCON1
MOVWF ADCON1 ;ADCON1 CONFIG GIUSTIFICAZIONE(SX) E IN ANALOGOCI
BCF STATUS,5 ;BANCO 0


BCF ADCON0,2 ;DISATTIVIAMO IL CONVERTITORE
BCF PORTC,1
BSF PORTC,2
BTFSS PORTA,3 ;TESTIAMO IL SENSORE DX E SE E' ATTIVO SALTIAMO
;UNA RIGA
GOTO SENLEFT ;VADO A TESTARE IL SENSORE DI SINISTRA
CICLO2
CALL INDIETRO1 ;IL ROBOT VA INDIETRO
CALL DELAY ;RITARDO
CALL DELAY ;RITARDO
BTFSC PORTA,3 ;RITESTA IL SENSORE DX PER EVITARE ERRORI DI
;POSIZIONE
GOTO CICLO2 ;SE SI VERIFICA,SIGNIFICA CHE IL ROBOT SENTE
;L'OSTACOLO E VA AL CICLO 2 ED INDIETREGGIA
CALL SINISTRA1 ;IL ROBOT GIRA A SINISTRA
CALL DELAY ;ENTRIAMO NEL CICLO DI TEMPORIZZAZIONE
CALL DELAY1 ;RITARDO
CALL AVANTI1 ;IL ROBOT VAAVANTI
GOTO START ;TORNIAMO ALL'INIZIO DEL PROGRAMMA
SENLEFT
BTFSS PORTA,2 ;TESTIAMO IL SENSORE SX E SE E' ATTIVO SALTIAMO
;UNA RIGA
GOTO START ;TORNIAMO A TESTARE IL SENSORE DX
CICLO3
CALL INDIETRO1 ;IL ROBOT VA INDIETRO
CALL DELAY ;RITARDO
CALL DELAY ;RITARDO
BTFSC PORTA,2 ;TESTA IL SENSORE SX PER EVITARE ERRORI DI
;POSIZIONE
GOTO CICLO3 ;SE SI VERIFICA, SIGNIFICA CHE IL ROBOT SENTE
;L'OSTACOLO ED INDIETREGGIA
CALL DESTRA1 ;IL ROBOT GIRA A DESTRA
CALL DELAY ;ENTRIAMO NEL CICLO DI TEMPORIZZAZIONE
CALL DELAY1 ;RITARDO
CALL AVANTI1 ;IL ROBOT VAAVANTI
GOTO START ;TORNIAMO ALL'INIZIO DEL PROGRAMMA

;**********************************************************************************************************
;Programma ROBOT con Fotoresistenze
;**********************************************************************************************************

FRT
BCF STATUS,6 ;BANCO 1
BSF STATUS,5 ;BANCO 1
MOVLW 04H ;CARICO IN W 04H PER IMPOSTARE IL ADCON1
MOVWF ADCON1 ;ADCON1 CONFIG GIUSTIFICAZIONE(SX) E IN ANALOGOCI
BCF STATUS,5 ;BANCO 0


BSF PORTC,1
BCF PORTC,2
CLRF ADCON0 ;RESETTO ADCON0 PER INIZIO CONFIGURAZIONE
BSF ADCON0,3 ;IN ANALOGICO 1 QUINDI FR_DX
CALL ACQUISISCI
MOVWF FR_DX ;SALVO IL DATO DELLA FR DX

CLRF ADCON0 ;RESETTO ADCON0 PER INIZIO CONFIGURAZIONE
CALL ACQUISISCI
SUBWF FR_DX,W ;CONFRONTO LE FR DX E SX

BTFSC STATUS,Z ;SE SONO UGUALI AVANTI CIURMA
CALL AVANTI2
BTFSC STATUS,C ;CONTROLLO CARRY PER ANDARE O A SX O A DX
CALL DESTRA2 ;GIRARE A DESTRA
BSF STATUS,C ;CARICARE IL CARRY PER PROSSIMA ACQUISIZIONE
CALL SINISTRA2 ;GIRARE A SINISTRA


ACQUISISCI
BSF ADCON0,7 ;SELEZIONO FRC (CK INTERNO)
BSF ADCON0,6 ;SELEZIONO FRC (CK INTERNO)
BSF ADCON0,0 ;AD_ON ACCENSIONE ADC
CALL DELAY1 ;ATTESA ACCENSIONE
BSF ADCON0,2 ;ADC GO (CONVERSIONE START)
CICLOF
BTFSC ADCON0,2 ;TEST SUL GO/DONE' (ASPETTO FINE CONVERSIONE)
GOTO CICLOF
MOVF ADRESH,W ;SPOSTO IL DATO IN W
RETURN

;**********************************************************************************************************
;Procedura di ritardo(1)
;**********************************************************************************************************

DELAY
MOVLW 0XFF ;CREIAMO IL DATO 256 NELL'ACCUMULATORE W
MOVWF X ;CARICHIAMO IL DATO DI W IN 'X'
MOVLW 0XFF ;CREIAMO IL DATO 256 NELL'ACCUMULATORE W
MOVWF Y ;CARICHIAMO IL DATO DI W IN 'Y'
ESTER
DECFSZ X,1 ;DECREMENTIAMO DI 1 IL REGISTRO 'X'
GOTO INTER
GOTO FINE
INTER
DECFSZ Y,1 ;DECREMENTIAMO DI 1 IL REGISTRO 'Y'
GOTO INTER
GOTO ESTER
FINE
RETURN ;FINE DELLA SUBROUTINE

;**********************************************************************************************************
;Procedura di ritardo(2)
;**********************************************************************************************************

DELAY1
MOVLW 0FFH ;CARICO IN W FFH PER INSERIRLO IN DEC
MOVWF DECI ;SPOSTO IN DEC IL DATO PRESENTE IN W
DECRE
DECFSZ DECI,1 ;DECREMENTO DEC FINO A 00H
GOTO DECRE ;ATTESA FINE DECREMENTO
RETURN ;TORNO ALLA CHIAMATA



;**********************************************************************************************************
;Il Robot va a marcia avanti
;**********************************************************************************************************
AVANTI2
BCF PORTB,0 ;MOTORE SX AVANTI
BSF PORTB,1 ;MOTORE SX AVANTI
BCF PORTB,2 ;MOTORE DX AVANTI
BSF PORTB,3 ;MOTORE DX AVANTI
BCF PORTB,4 ;LED SX ON
BCF PORTB,5 ;LED DX ON
GOTO INIZIO ;RICOMINCIA IL CICLO ACQUISIZIONE
AVANTI1
BCF PORTB,0 ;MOTORE SX AVANTI
BSF PORTB,1 ;MOTORE SX AVANTI
BCF PORTB,2 ;MOTORE DX AVANTI
BSF PORTB,3 ;MOTORE DX AVANTI
BCF PORTB,4 ;LED SX ON
BCF PORTB,5 ;LED DX ON
RETURN

;**********************************************************************************************************
;Il Robot gira a destra
;**********************************************************************************************************
DESTRA2
BCF PORTB,0 ;MOTORE SX AVANTI
BSF PORTB,1 ;MOTORE SX AVANTI
BCF PORTB,2 ;MOTORE DX FERMO
BCF PORTB,3 ;MOTORE DX FERMO
BSF PORTB,4 ;LED SX OFF
BCF PORTB,5 ;LED DX ON
GOTO INIZIO ;RICOMINCIA IL CICLO ACQUISIZIONE
DESTRA1
BCF PORTB,0 ;MOTORE SX AVANTI
BSF PORTB,1 ;MOTORE SX AVANTI
BCF PORTB,2 ;MOTORE DX FERMO
BCF PORTB,3 ;MOTORE DX FERMO
BSF PORTB,4 ;LED SX OFF
BCF PORTB,5 ;LED DX ON
RETURN

;**********************************************************************************************************
;Il Robot gira a sinistra
;**********************************************************************************************************
SINISTRA2
BCF PORTB,0 ;MOTORE SX FERMO
BCF PORTB,1 ;MOTORE SX FERMO
BCF PORTB,2 ;MOTORE DX AVANTI
BSF PORTB,3 ;MOTORE DX AVANTI
BCF PORTB,4 ;LED SX ON
BSF PORTB,5 ;LED DX OFF
GOTO INIZIO ;RICOMINCIA IL CICLO ACQUISIZIONE
SINISTRA1
BCF PORTB,0 ;MOTORE SX FERMO
BCF PORTB,1 ;MOTORE SX FERMO
BCF PORTB,2 ;MOTORE DX AVANTI
BSF PORTB,3 ;MOTORE DX AVANTI
BCF PORTB,4 ;LED SX ON
BSF PORTB,5 ;LED DX OFF
RETURN

;**********************************************************************************************************
;Il Robot va indietro
;**********************************************************************************************************

INDIETRO1
BSF PORTB,0 ;MOTORE SX AVANTI
BCF PORTB,1 ;MOTORE SX AVANTI
BSF PORTB,2 ;MOTORE DX FERMO
BCF PORTB,3 ;MOTORE DX FERMO
BSF PORTB,4 ;LED SX OFF
BSF PORTB,5 ;LED DX OFF
RETURN

END

Torna ad inizio pagina

 pagina

HOME : GENERALITA' : SOLUZIONE : PROGETTO : DOCUMENTAZIONE : REALIZZAZIONE : COLLAUDO : MANUALE D'USO : CREDITI : FOTO FINALE PROG. : FILMATO DEL PROG.