[LABEL:] CODICE OP1[,OP2][COMMENTO]
               MNEM
               LD E,0H

PIO     EQU     0CH
           ORG    100H
           LD       E,0
ciclo:   IN       A,(PIO)         
           LD       B,A
           IN        A,(PIO)
           LD       C,A
           LD       A,E
           ADD    A,B
           SUB     C
           CP       8CH
           JRZ     (ciclo)
           LD       A,1
           OUT   (PIO),A
           HALT
           END

Il precedente programma è scritto in linguaggio Assembly per Z80. Il programma indicato sopra deve essere tradotto in codice Assembly per PIC

E          EQU        0XC
B          EQU        0XD
C          EQU        0XE
nAUTO EQU       0X8C
             ORG       0X000
             MOVLW 0X85
             MOVWF FSR
             MOVLW  0X01
             MOVLW  INDF
             MOVLW  0X86
             MOVWF  FSR
             MOVLW  0XFE
             MOVLW  INDF
             MACRO   JRZ K
                             BTFSC STATUS,Z
                             GOTO K
                             NOP
             ENDM
             
             MACRO   CP,K
                             SUBWF F,0
             ENDM
             MOVLW  0X000
             MOVWF  E
ciclo:    MOVWF   PORTA; W <-PORTA
             MOVF      B,0; B  <-W
             MOVWF   PORTA; W <-PORTA
             MOVF      C,0; C  <-W
             MOVF      E,1; W <-E
             ADDWF   B,1; W<-W+E
             SUBWF    C,1; W<-W-C
             CP            0X8C
             JRZ          (ciclo)
             MOVLW  0X01
             MOVWF  PORTB; RELE'
             HALT
             END

tutta la prima parte per fissare i pin di ingresso e di uscita, potrebbe essere definita una macro, che prende il nome di INIT( INITIALIZE ) e definire come direttiva i valori che fissano i pin di ingresso e di uscita. Ad esempio 
VAL_PORTA    EQU             0X01
VAL_PORTB    EQU             0XFE
                       MOVLW       VAL_PORTA
                       MOVLW       VAL_PORTB
“VAL” vale sia come valore che come “VALUE”
Caso di Algoritmo Molto COMPLESSO

Bisogna suddividere l'algoritmo COMPLESSO, in piccoli algoritmi più semplici ( creare sottoprogrammi ).
schema 1

Si vuole controllare automaticamente, lo spegnimento dell'impianto di illuminazione presente in una struttura pubblica (scuole, musei ecc.), dove l'accesso è unico. 
E' di fatto un automa e bisogna controllarlo con un contatore “UP-DOWN” di tipo non binario.

PIOE EQU PORTA
PIOU EQU PORTB
         ORG 0X100
         CALL prep_porte
         CALL ctrl_sens
         CALL elaborazione
         CALL var_uscita
         SLEEP

prep_porte MOVLW 0X8C
                   MOVWF 0X0F
                   BSF STATUS,RP0
                   MOVLW 0X01
                   MOVWF TRISA
                   MOVLW 0XFE
                   MOVWF TRISB
                   BCF STATUS,RP0
                   CLRW
                   MOVWF PIOU
                   CLRF 0X0E
                   RETURN
ctrl_sens     MOVF PIOE,1
                   MOVWF 0X0C
                   MOVF PIOE,1
                   MOVWF 0X0D
                   RETURN
elaborazione MOVF 0X0E,1
                      ADDWF 0X0C,1
                      SUBWF 0X0D,1
                      MOVWF 0X0E
SEGNALI

Un segnale analogico è un segnale che preso un qualsiasi intervallo di tempo, il segnale è sempre presente.
Si definisce segnale discreto quel segnale che preso un qualsiasi intervallo di tempo, assume un valore o è nullo.
Il segnale digitale, si trova in microprocessori ecc. e viene utilizzato nella trasmissione di dati.

INTERRUPT PIC
il pic ha 4 tipi di interrupt programmabili con in file register INTCON e EECON1
INT CON si trova a 0BH pag0
                                8BH pag1
EECON1 si trova nella EEPROM 88H
ha 4 tipi di interrupt
•	INTERRUPT ESTERNO sulla linea RBO/INT (1° PIN PORTB)
•	INTERRUPT SU OVERFLOW sulla linea del timer/counter TMR0
•	INTERRUPT IN FASE DI SCRITTURA DELLA EEPROM DATA
•	INTERRUPT SU CAMBIAMENTO delle linee RB7, RB6, RB5 e RB4

RBIF abilita l'interrupt sulle 4 linee RB7 RB6 RB5 RB4. Se fissato a 1, bisogna scrivere l'istruzione “BSF INTCON, RBIF”
INTF abilita l'interrupt sulla linea RB0/INT
TOIF abilita l'interrupt su OVERFLOW di TMR0
EEIF abilita l'interrupt su fine scrittura della EEPROM DATA

gli altri pin sono seguiti dalla “E” che sta per ENABLE (RBIE, INTE, TOIE, EEIE) e gli interrupt vengono abilitati solo quando questi ultimi sono uguali a 1 come i precedenti. Se GIE è uguale a 0 nessun interrupt potrà funzionare.

IMPORTANTE: Concetto di maschermento.
Deve essere utilizzato quando si usano solo alcune linee del PORT (Questa operazione andava fatta nel programma del parcheggio, perché utilizzavamo un solo pin), pertanto quelle linee non utilizzate vanno mascherate. Se le linee utilizzate sono ingressi, quelle non utilizzate vanno a 1 attraverso il TRISA e TRISB. Mentre se utilizzate come uscita (=0), quelle non utilizzate valgono 1.
Il mascheramento può essere utilizzato per gli interrupt, in particolare quelli seguiti dalla “E”.
per leggerlo si utilizza l'istruzione “BSF EECON1,0” e per scrivere “BSF EECON1,3”
Oltre a questi bisogna aggiungere un altro registro fittizio ma che si deve tenere conto nella programmazione come è stato fatto con il registro INDF nell'indirizzo indiretto.
EECON2 viene utilizzato durante la scrittura delle EEPROM DATA introducendo 2 codici in sequenza
•	0x55 (55H); 0101 0101
•	0xAA (0AAH); 1010 1010
riscrivere il codice del parcheggio, per il pic introducendo le interruzioni da parte delle fotocellule e anche per lo z80.

PROGRAMMAZIONE DEI PIC CON IL LINGUAGGIO AD ALTO LIVELLO

Oltre all'assembly un pic può essere programmato utilizzando linguaggi ad alto livello come il C o il Basic e in qualche modo anche in Turbo Pascal(nel caso del plc della Siemens). In particolare la Microchip usa il C per le famiglie 18xxxx, viceversa, la Mitsubishi e a Philips usano il Basic

printf(...);
outportb(indirizzoperif, VAR DATO);

LPT1: 378H 379H
LPT2: 278H 279H
378H e 278H sono le uscite e 379H e 279H sono gli ingressi.

QBASIC
Input: tastiera			data:inp(&379H)			dato<-perif ingresso
print: stampante			out &378H,data			perif usc.<-dato
nel caso del PIC bisogna sostituire con il PORT A o B l'indirizzo stesso.
                        
L'interrupt nel 16F84, è quindi la routine di interrupt, inizia nella cella di memoria 0004H della EEPROM di programma. Per tanto all'inizio del programma deve essere previsto un salto con l'istruzione “GO TO k” che salti quella parte di memoria che contiene la Routine Di Interrupt. Per l'interruzione bisogna far riferimento al file register OPTION
OPTION - indirizzo 81H
PS0 PS1 e PS2 determinano il valore che deve assumere il prescaler, e deve essere asegnato al time counter e al watchdog.
PS2	PS1	PS0	Val. Prescaler 
Timer/counter	Val. Prescaler
Watchdog	
0	0	0	1:2	1:1	
0	0	1	1:4	1:2	
0	1	0	1:8	1:4	
0	1	1	1:16	1:8	
1	0	0	1:32	1:16	
1	0	1	1:64	1:32	
1	1	0	1:128	1:64	
1	1	1	1:256	1:128	
Se il PSA è uguale a 0, viene assegnato al Timer/counter. Se il PSA è uguale a 1, viene assegnato al Watchdog
Nell'ipotesi che il prescaler sia stato assegnato al Timer/Counter,(PSA=0) un clock esterno, permette di scegliere, se il TOSE è uguale a 0 permette l'incremento sul fronte di salita del clock esterno, Viceversa, se il TOSE è uguale a 1, l'incremento avviene sul fronte di discesa del clock esterno.
Il TOCS se posto uguale a 0 al timer/counter, viene assegnato il clock interno, mentre se posto uguale a 1, viene assegnato il clock esterno sul pin RB4 (PORTB).
TOSE e TOCS sono collegati fra di loro, in particolare il tose entra in funzione sole se il TOCS è uguale 1
L'INTDG è utile solo se è stato abilitato l'interrupt (GIE=1) su segnale esterno del PIN RB0, per tanto se posto uguale a 0 genera l'interruzione sul fronte di discesa, se posto uguale a 1, sul fronte di salita
RBPU Le linee del PORTB presentano delle resistenze di PULL-UP pertanto se RBPU è uguale a 0, vengono abilitate queste resistenze quando i pin funzionano come ingressi! Se invece è uguale a uno, sono disabilitate.

MOVLW0x01,W<-1
MOVWF OPTION
File Register<-W

RICHIAMI SUI GRAFI

La temporizzazione avviene utilizzando la carica e scarica del condensatore, il quale deve essere presente nel circuito di temporizzazione.
La temporizzazione però può essere ottenuta con un sottoprogramma, utilizzando il clock del PIC o del microProcessore,Tenendo presente in oltre della durata del ciclo macchina per ogni istruzione
es.
fCK=4MHz
1ciclomacchina=4TCK
TCK=1/TCK= 4/4x10^6= 1microSec

il sottoprogramma di temporizzazione è molto più facile farlo perché le istruzioni durano solo un ciclo macchina, salvo l'istruzione di salto che ne ha 2.
Da ricordare che i file register sono di 8 bit e il numero di cicli massimo programmabile è da 0 a 255 pertanto se si vuole ottenere la temporizzazione di un secondo occorre creare di cicli NIDIFICATI (cioè uno nell'altro)., scrivere quindi il sottoprogramma richiesto.

		;Programma Timer
		GOTO		INIZIO; il salto “INIZIO” è necessario per configurare i pin 		di ingresso e uscita, abilitare gli interrupt, assegnazione del prescaler
		e altro 
		ORG		0X04
		GOTO		CONTA; queste 3 istruzioni vanno introdotte in presenza 									di interrupt
DELAY
		NOP
		GOTO		DELAY; Ritardo
INIZIO
		BSF		STATUS,RP0	
		MOVLW	0X07
		MOVWF	0X81; OPTION (00000111)
		CLRF		TRISA	; azzera il TRISA per utilizzare i pin come ingressi
		BCF		STATUS,RPO
		BSF		INTCON,GIE; abilita gli interrupt
		BSF		INTCON,0x05;(TOIE)		
		MOVLW	0X10; inizio routine d'interrupt 
		MOVWF	0X0C
		GOTO		DELAY
CONTA
		BCF		INTCON,2
		DECFSZ	0X00C,1
		RETFIE			;fine routine d'interrupt
		MOVLW	0X01
		MOVWF	0X0D
		MOVWF	0X0E
SIM
		NOP
SIM2
		NOP
		DECFSZ	0X0E,1
		GOTO		SIM2
		NOP
		DECFSZ	0X0D,1
		GOTO		SIM
		BTFSC	PORTA,0
		CLRF		PORTA
		MOVLW	0X01
		MOVWF	PORTA
		GOTO		DELAY

L'istruzione di GOTO all'inizio serve per saltare la cella di memoria 04H dove all'interno è presente la routine di interrupt.
In MOVWF viene utilizzato option dove al suo interno viene utilizzato il prescaler posto a 256 l timer/counter e il clock interno 
Il ciclo infinito viene innescato per poter mandare in overflow TMR0 e di conseguenza TOIF a 1 e per farlo saltare alla cella 0x04. In poche parole l'istruzione GOTO DELAY che porta al ciclo infinito ha la funzione dell'istruzione dello z80 “DJNZ”

INTCON
BSF	INTCON,GIE
BSF	INTCON,TOIE

DECFSZ f,d <->DJNZ e
foW<-f-1                      d=0, salva in f. d=1 salva in w
INCFSZ f,d
foW<-f+1
DECREMENTA il registro f e salta(skip) all'istruzione successiva se f=0

DECFSZ 	0D,1
GOTO 	SIM2
NOP

il micro controllore inizia sempre con pagina 0
nel codice del programma deve essere presente la routine di interrupt, che all'inizio deve disabilitare gli interrupt con: “BSF	INTCON,TOIF”

Rappresentare 5 volte il flow chart di un contatore up-down e rispettivo codice in assembly, sia utilizzando lo Z80 che utilizzando il PIC 16F84.

Rappresentare 5 volte il flow chart di un sottoprogramma e i rispettivi codici in assembly, sia con il PIC 16F84 che con lo Z80 

Scrivere 5 volte il codice di inizializzazione dei pin del PIC , utilizzando l'indirizzamento diretto ed indiretto.

5 volte Comandi fondamentali del tutorial dell'MPLab 

Contatore Up Down Z80:
LD		B,n
DEC		B
JP		NZ,LOOP
HALT

inizializzazione pin indirizzamento diretto
	MOVLW	0X01
	MOVWF	TRISA
	MOVLW	0X1D
	MOVWF	TRISB
BCF	STATUS,RP0

inizializzazione pin indirizzamento indiretto	
	MOVLW	0X85
	MOVWF	FSR
	MOVLW	0X01
	MOVWF	INDF

Comandi MPLab
•	Seleziona dispositivo: Configure\Select Device
•	Creare Progetto: Project\Project Wizard 
•	Impostare il linguaggio: C:Programmi\microchip\MPASM Suite\mpl26
•	Nome progetto: C:Project\Myproject.mcp
•	Costruire Progetto: Project\Build All
•	Debugger\Select tools
•	Debugger\Step into
•	Edit\Proprieties
•	Debugger\Run

PLC:PROGRAMMABLE LOGIC CONTROLLER
Il PLC è un microprocessore dove la sua architettura, sta tra quella di un microprocessore standard e un microcontrollore.
Il PLC ha una struttura tipo quella di un microcontrollore, nel senso che non ha una RAM di grandi dimensioni, ha una EEPROM programma, dove viene posto il programma che deve eseguire, ma per esempio non ha l' interfaccia I/O sullo stesso chip, ma sono poste all'esterno attraverso dei moduli, rendendo questo controllore a configurazioni variabili in base al numero di moduli da aggiungere o da eliminare.
Viceversa il PLC presenta una caratteristica dei microprocessori standard, che non hanno i microcontrollori, che il suo funzionamento viene gestito da un sistema operativo. Quest'ultimo, viene definito da ogni casa costruttrice.
E' chiaro che nella sua architettura, il PLC,  presenta ALU, Registri dati, Registri indirizzi, Accumulatore (ACC1, ACC2), Registro di stato.
Dei 2 accumulatori, solo l'ACC1 presenta le caratteristiche standard (microprocessore e microcontrollore) nell'altro invece, risiede l'altro dato dell'elaborazione da parte dell'ALU.
In realtà esiste un terzo accumulatore definito RCL (Rete combinatoria logica) orientato a un solo bit ma con funzionamento identico a quello di un accumulatore a più bit (RCL<-RCL+CELLA MEM) e serve per fare il confronto solo con variabili ad 1 bit per evitare di utilizzare gli altri 2 accumulatori.
Nella famiglia dei moduli, oltre alla presenza dei moduli dell'interfaccia I/O, è presente un modulo dell'alimentazione, questo permette quindi di aumentare la potenza o la corrente che può fornire un PLC.
Come tutti i microprocessori e i microcontrollori, anche i PLC può essere programmato utilizzando dei linguaggi di programmazione, ed è evidente che ogni casa costruttrice utilizza linguaggi propri. Ad esempio la Siemens (maggior produttrice in Europa con il 70% del mercato) utilizza i seguenti linguaggi:
•	Come linguaggio ad alto livello, il Turbo Pascal
•	in alternativa al precedente si possono usare 3 altri linguaggi:
1.	il KOP(pioli) che può essere scritto da un operaio specializzato cioè uno che non ha grosse conoscenze informatiche. L'elemento base di questo linguaggio è il contatto (da ricordare gli interruttori Normalmente Aperto e Normalmente Chiuso)

Il PLC della Siemens più importante ha la seguente dicitura S200 (CPU). Sono PLC a bassa potenza. La famiglia S300 (di media potenza) e infine la famiglia S400 ad alta potenza.

Architettura base On Board di un PLC
Si possono aggiungere moduli I/O fuori dal Chip
Il PLC è un Single Tasking cioè esegue ciclicamente sempre lo stesso programma, mentre quelli attuali sono Multi Tasking ed in genere non ha bisogno di display.
A differenza dei microprocessori per il PC quelli del PLC eseguono istruzioni MOLTO SEMPLICI, perché ha una RAM molto piccola, quest'ultima serve per i risultati parziali delle operazioni.
A differenza dei PIC, i PLC hanno dei piccoli sistemi operativi contenuti nella ROM che eseguono ciclicamente i seguenti passi:
1.	Legge lo stato degli ingressi (Sensori) e li memorizza nella memoria chiamata “IMMAGINE DEI PROCESSI DEGLI INGRESSI” e quindi il dato letto va sempre messo nella cella di memoria che è a stretto contatto con la CPU
2.	Elabora le singole istruzioni tenendo conto dei dati di ingresso memorizzati e memorizza i valori dei risultati ottenuti nell' IMMAGINE DEI PROCESSI DELLE USCITE
3.	Trasferisce i valori dell'uscita sui dispositivi di attuazione (attuatori ecc.)
4.	Ritorna al primo punto

Una volta che il programma è stato assemblato o compilato, viene inviato al PLC in codice macchina e collocato nella EEPROM come avviene nei PIC.
Pertanto, in base a quanto abbiamo affermato in precedenza possiamo affermare:
•	la variazione degli ingressi, il PLC le riconosce solo quando ha eseguito l'intero programma, quindi, per non avere problemi, la durata del programma, deve essere SEMPRE inferiore alla durata di lettura del sensore di ingresso.
•	In presenza di programmi molto complessi, bisogna suddividerlo in sottoprogrammi ciascuno con una durata sempre inferiore del sensore di ingresso
•	Per sensori aventi un tempo di durata diversi occorre scegliere come tempo di riferimento per il programma o per i sottoprogrammi.
La Siemens, per programmare i suoi PLC usa il programma SIMARIC-STEP7
 esistono 2 versioni, quella con uscita a relè ed alimentazioe in alternata a 230V detta anche AC-DC RELAIS mentre la seconda versione ha un uscita a 24V conosciuta a mosfet e alimentazione 24 V detta anche DC-DC-DC la memoria eeprom per il programma per una CPU 231 ha una capacità di 4 kb
la memoria dati da 2kb il tempo di esecuzione di un istruzione binaria di 0,37 uSec 
Interfaccia di comunicazione seriale RS485 
USCITA ON BOARD  4
INGRESSI ON BOARD 6
MERKER (celle utilizzate per risultati parziali durante l'esecuzione del programma)256
contatori 256
temporizzatori 256
Uscite impulsive 2 con frequenze di 20 khz 
contatori veloci 4 con frequenza di 30khz
interrupt hardware 2
livelli di tensione per gli ingressi basso (0-5v) alto (15-30v) per entrambi le versioni
livelli di uscita a mosfet basso 0,1V alto 20,4 V min
livelli di uscita a relè (parte continua o DC da 5 a 30V in alternata o AC da 5 a 250V 
corrente di una sola uscita a mosfet 0,75A e a relè 2A 
corrente per tutte le uscite 3A a relè 6A 
ovviamente le CPU presentano un maggior numero di uscite e ingressi ON BOARD un maggiore quantità di memoria programma e dati e utilizzando moduli aggiuntivi e avere degli ingressi e uscite di tipo analogico sia la ram che la eeprom mentre nella rom è presente il sistema operativo sono situate in parti diverse 
1.	aree per le immagini di ingressi (I) 
2.	aree per le immagini di processo degli ingressi (Q)
3.	aree per la memorizzazione delle variabili (V) in questa zona sono memorizzati i risultati intermedi di operazioni o altri dati relativi alla definizione del programma che si deve eseguire 
4.	area per la memorizzazione dei merker
5.	area per la memorizzazione dei valori correnti dei contatori ( C )
6.	 “             “             “          “	contatori veloci 
7.	“              “              “           	dei temporizzatori (T)
8.	area di memoria per il controllo dello svolgimento  del programma per i sottoprogrammi (S)
9.	aree di memoria per l'indirizzamento degli accumulatori (ACC)
10.	area di memorizzazione dei merker speciali o registri di stato (SM)
11.	area di memoria per ingressi analogici (AI)
12.	area di memoria per le uscite analogici (AQ)

ARCHITETTURA CPU PLC

In AWL esiste l'istruzione di load=> “L costante”     ACC1->ACC2
Transfer=> T costante
Transfer non modifica gli accumulatori salvo nelle istruzioni TAR1 e TAR2
TACK è lo scambio tra i 2 accumulatori 
RLC( Risultato logico combinatorio) è di fatto un accumulatore ad 1 e quindi interviene a tutte le operazioni in cui il contenuto è di un solo bit
Una catena di istruzioni logiche combinatorie in sequenza o in successione, viene detta stringa logica, per tanto:
OGNI ISTRUZIONE DI UNA STRINGA LOGICA INTERROGA LO STATO DI UN OPERANDO E LO COMBINA CON IL CONTENUTO DI RLC E IL RISULTATO VIENE SALVATO NUVAMENTE IN RLC
Questo modo di operare giustifica le operazioni logiche in AWL come
U I0.0 prende il byte 0 e il primo bit                      
U I0.1 prende il byte 1 e il secondo bit
= Q0.0
l'unica eccezione a questa modalità di funzionamento riguarda la prima istruzione, dove automaticamente si carica il contenuto dell' operando in RLC

Sintassi AWL
Operazione indirizzo nByte .      Nbit
      U            (I,Q,E,A)  IB,QB   IDW QDW

•	il bit /ER è chiamato bit di prima interrogazione e indica l'inizio di una stringa logica; opera in logica negativa 
	E' questo il bit che permette di riconoscere la prima istruzione di una 	stringa logica, pertanto se /ER=0 l'operando indirizzato in un istruzione 	logica combinatoria, viene memorizzato nel bit RLC dopo di che il valore 	/ER viene portato a 1
	Se /ER=1 un'operazione logica combinatoria combina il proprio operando 	con RLC e il risultato viene salvato in RLC.
	Alla fine di ogni stringa logica /ER deve essere portato a 0 dopo l'istruzione 	di assegnazione, oppure dopo l'istruzione di Jump correlata al risultato 	logico della stringa oppure , in un espressione di annidamento  per poter 	leggere una nuova stringa.
•	L'RLC può essere settato incondizionatamente a 1 o a 0 utilizzando le operazioni Set e CLR, inoltre in base al valore del RLC si possono eseguire operazioni di salto utilizzando istruzioni di salto condizionato (SPB=1 SPBN=0)
•	Il bit STA è detto bit di salto, in esso viene memorizzato il valore di un bit a cui viene fatto riferimento ad una determinata istruzione:
1.	Nelle istruzioni logico combinatorie che accedono alla memoria di scrittura il valore di STA è uguale al valore scritto 
2.	Nel caso in cui la scrittura non abbia luogo nello STA viene memorizzato il valore dell'operando a cui l'istruzione di riferisce. Questo bit non ha alcun significato nel caso di operazioni logiche combinatorie dove non si accede alle momorie.
•	Il bit OR ha solo significato nelle stringhe logiche in cui sono presenti operazioni di AND prima di un operazione OR, in questo caso il bit di OR indica se una funzione AND eseguita prima dell'OR ha fornito il valore 1 anticipando l'operazione successiva di OR 
•	Il bit OS è detto bit di overflow con memoria, questo bit viene messo a 1 insieme a OV quando si verifica un errore , successivamente OV viene resettato (portato a 0) quando si effettua una nuova operazione mentre OS resta a 1 anche dopo il verificarsi dell'errore 
in particolare il comando in AWL “SPS” (salta solo se OS=1) e i comandi di richiamo blocco e di fine fine blocco, resettano a 0 OS
•	Il bit OV è un bit di overflow riferito all'accumulatore e riporta l'errore quando è uguale a 1 durante un operazione matematica o un operazione per confronto fra numeri con la virgola
•	I bit A0 e A1 detti bit di visualizzazione e forniscono informazioni sull'esito di alcune operazioni, per esempio, in base al valore di questi 2 bit si può conoscere se il risultato di un'operazione matematica è stato minore, maggiore o uguale a 0 oppure si può risalire al valore del bit traslato in un operazione di shift (scorrimento a destra o a sinistra) dell'accumulatore
•	Il bit BIE (bit di risultato binario) rappresenta un merker (memoria ausiliaria a disposizione dell'utente) interno dove viene salvato un contenuto di RLC prima di un'operazione che ne può modificare il valore (ad esempio in un operazione nidificata) dopo l'operazione grazie al BIE si riporta il valore in RLC

COMANDO DI TEMPORIZZAZIONE IN AWL
U 	E 	2.0
FR 	T1 		//Abilita il temporizzatore T1.
U 	E 	2.1
L 	S5T#10s 	//Predispone una preimpostazione di 10 secondi 						nell'accumulatore 1.
SI 	T1 		//Avvia il temporizzatore T1 come impulso.
U 	E 	2.2
R 	T1 		//Resetta il temporizzatore T1.
U 	T1 		//Interroga lo stato di segnale del temporizzatore T1.
= 	A 	4.0
L 	T1		 //Carica il valore di tempo attuale del temporizzatore T1 sotto 				forma di cifra binaria.
T 	MW10

OPERAZIONI OBBLIGATORIE 
inizializzazione pin indirizzamento diretto
	MOVLW	0X01
	MOVWF	TRISA
	MOVLW	0X1D
	MOVWF	TRISB
BCF	STATUS,RP0

inizializzazione pin indirizzamento indiretto	
	MOVLW	0X85
	MOVWF	FSR
	MOVLW	0X01
	MOVWF	INDF

Scrivere il codice di un ciclo a contatore 
DJNZ e; e=indica il numero di byte
;a cui saltare, quindi è un salto realtivo
;di 256 byte(massimo)
;Funzionamento: si deve caricare il
;registro B che indica il numero di cicli 
;si finiscono i cicli quando B=0
;introdurre nel blocco di istruzione
;DEC B 1 o + volte, si può determinare
;un decremento maggiore di 1 

MACRO	DJNZ K 	B   EQU 0X0C
                    Blocco ist 	MOVLW K
				MOVWF B;(0X0C)
		DECFSZ	B
		GOTO		K
		NOP
programma con somma ripetuta (moltiplicazione)