ELEMANIA
PIC16F690 - Struttura base di un programma
Istruzioni e direttive

In generale un programma scritto in assembly si compone di una serie di:

Facciamo subito un semplice esempio per chiarire il concetto considerando il seguente breve programma:

          ; Semplice programma di esempio

         INCLUDE <P16F690.INC>

         __CONFIG _CP_OFF & _CPD_OFF & _BOR_OFF & _PWRTE_ON & _WDT_OFF &                   _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _FCMEN_OFF & _IESO_OFF

         ORG 0 ; indirizzo iniziale in memoria EPROM        
        
         BCF 03,5 ; Seleziona il banco 2
         BSF 03,6 ; Seleziona il banco 2
         CLRF 1E ; azzera il registro di indirizzo 1E

         GOTO $
       
         END
 

Per facilitare la comprensione le istruzioni sono state indicate in colore nero, le direttive in rosso e i commenti in blu.

Le istruzioni (come per esempio BCF, BSF, CLRF e GOTO) vengono caricate nella memoria di programma del PIC ed eseguite dal microcontrollore stesso. In pratica sono i comandi forniti al microprocessore.

Le direttive invece (come INCLUDE, __CONFIG, ORG e END) non sono eseguite dal microprocessore. Si tratta invece di comandi diretti all'assemblatore, cioè al programma che si occupa della traduzione da linguaggio assembly a codice macchina. In sostanza le direttive non sono caricate nella memoria del PIC, non producono codice eseguibile e non occupano memoria sul microcontrollore.

Volendo fare un paragone con una ricetta di cucina, le istruzioni sono i comandi che bisogna eseguire per cucinare una certa pietanza (ad esempio: bollire le patate); le direttive sono invece informazioni di contesto, come per es. "elenco degli ingredienti", le quali non corrispondono a un'azione da eseguire.

Struttura base di un programma assembly per il PIC

La struttura fondamentale di un semplice programma in assembly per il PIC è quella delineata nel precedente esempio. Naturalmente ci sono diverse eccezioni e, più avanti, parlando di interrupt dovremmo complicare un po' il nostro schema di riferimento, ma per ora possiamo dire che di solito un programma si compone delle parti seguenti:

  1. un commento iniziale
  2. una direttiva INCLUDE
  3. una direttiva __CONFIG
  4. una direttiva ORG
  5. una sequenza di istruzioni
  6. un'istruzione GOTO
  7. una direttiva END

Esaminiamo qui più brevemente le varie parti di cui si compone un programma.

1. Commento iniziale

Il commento iniziale serve per descrivere brevemente il programma, fornire informazioni sull'autore, sulla data di scrittura, sulle successive versioni etc. Sebbene tale commento non sia a rigori assolutamente necessario per il funzionamento di un programma (i commenti infatti vengono ignorati dall'assembler), è importante abituarsi da subito a commentare e a documentare adeguatamente i propri programmi.

Volendo si può far riferimento al modello di file assembly predefinito (detto file template - quello relativo al PIC16F690 si chiama 16F690TEMP.ASMpuò essere scaricato qui) fornito da Microchip, che, fra le altre cose fornisce il seguente modello di commento iniziale:

;**********************************************************************
; This file is a basic code template for assembly code generation *
; on the PIC16F690. This file contains the basic code *
; building blocks to build upon. *
; *
; Refer to the MPASM User's Guide for additional information on *
; features of the assembler (Document DS33014). *
; *
; Refer to the respective PIC data sheet for additional *
; information on the instruction set. *
; *
;**********************************************************************
; *
; Filename: xxx.asm *
; Date: *
; File Version: *
; *
; Author: *
; Company: *
; *
; *
;**********************************************************************
; *
; Files Required: P16F690.INC *
; *
;**********************************************************************
; *
; Notes: *
; *
;**********************************************************************

 

2. Direttiva INCLUDE

La direttiva include serve per poter usare le costanti predefinite al posto degli indirizzi numerici dei registri e il suo utilizzo sarà spiegato più nel dettaglio nella prossima lezione.

 

3. Direttiva __CONFIG

Serve per settare correttamente i bit della Configuration Word.

 

4. Direttiva ORG

La direttiva di compilazione ORG (origine) serve per per indicare all'assemblatore l'indirizzo fisico nella memoria EEPROM dove dovranno essere caricate le istruzioni successive. Generalmente un programma inizia sempre con ORG 0 per indicare che la prima istruzione dovrà essere caricata in memoria all'indirizzo zero.

 

5. Sequenza di istruzioni

La sequenza di istruzioni costituisce il programma vero e proprio e sarà ovviamente diversa da un programma all'altro.

 

6. Istruzione GOTO

Alla fine del nostro programma troviamo l'istruzione di salto incondizionato

GOTO $

Il simbolo $ viene interpretato dall'assembler come l'indirizzo dell'istruzione corrente. In pratica questa istruzione genera un ciclo infinito in cui l'istruzione salta su se stessa. Ciò serve perché il PIC non possiede un'istruzione di HALT come altri microprocessori e dunque al termine del programma l'esecuzione continua alle locazioni di memoria successive (anche se queste ultime non contengono istruzioni valide).

In altri programmi si preferisce spesso ripetere l'intera esecuzione del programma dall'inizio (ciò è utile particolarmente quando si deve realizzare un ciclo di controllo, che deve essere eseguito ripetutamente all'infinito).

 

7. Direttiva END

La direttiva END segnala all'assemblatore la fine del programma.

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it