WhiteR@bbit
24-06-2004, 10:48
Scusate per il topic luuuuungo.... :D
Salve a tutti, ho un mio amico che è depresso al massimo: deve presentare un esame di elettronica, ma non riesce a capire come mai non funziona a dovere.
Il progetto consiste nel realizzare un cancello che si apre quando una vettura passa davanti ad un sensore. Il risultato del codice qua sotto è che il cancello si apre si, ma solo con telecomando.
Vi chiedo aiuto nell'individuare se il problema sta nel codice, o nella realizzazione pratica. (se il codice è ok, gli dirò di controllare il progetto)
Premetto che io non ho la benchè minima conoscenza di quanto sto per postare, il mio ruolo è solo quello di :muro: vicino di casa di uno sfigato che un esame tra pochi giorni... :tie:
FILE1: "RICEZIONE.ASM"
.TITLE "RICEVITORE"
.VERS "ST62E65"
;*********************************************** registri per uso generale ***************************************
X .DEF 080h ;regisro x
Y .DEF 081h ;regisro y
V .DEF 082h ;regisro v
W .DEF 083h ;regisro w
A .DEF 0FFh ;regisro a
;*********************************************** registri per le porte I/O ***************************************
PORT_A .DEF 0C0h ;Data register A port
PORT_B .DEF 0C1h ;Data register B port
PORT_C .DEF 0C2h ;Data register C port
PDIR_A .DEF 0C4h ;Data direction reg. A port
PDIR_B .DEF 0C5h ;Data direction reg. B port
PDIR_C .DEF 0C6h ;Data direction reg. C port
POPT_A .DEF 0CCh ;Option register A port
POPT_B .DEF 0CDh ;Option register B port
POPT_C .DEF 0CEh ;Option register C port
;*********************************************** registri di interrupt ***************************************
IOR .DEF 0c8h
;*********************************************** registri data rom windows ***************************************
DRW .DEF 0c9h
;*********************************************** registri timer 2 ***************************************
ARRC .DEF 0D9h ;reload capture register
ARCP .DEF 0DAh ;compare register
ARMC .DEF 0D5h ;mode control register
ARSC0 .DEF 0D6h ;status control register
ARSC1 .DEF 0D7h ;status control register
ARLR .DEF 0Dbh ;load register
;*********************************************** registri A/D converter ***************************************
ADCR .DEF 0D1h ;registro di controllo
ADDR .DEF 0D0h ;registro dati
;*********************************************** controllo oscillatore ***************************************
OSCR .DEF 0DCh ;oscillator control register
;*********************************************** controllo eeprom ***************************************
DRBR .DEF 0E8h ;data ram/eeprom bank register
EECR .DEF 0EAh ;eeprom control register
;*********************************************** registr watchdog ***************************************
WDOG .DEF 0D8h ;registro wachdog
;*********************************************** timer 1 ***************************************
PSC .DEF 0D2h ;controllo prescaler
TCR .DEF 0D3h ;registro dati
TSCR .DEF 0D4h ;registro di controllo dati
;*********************************************** controllo SPI ***************************************
SPID .DEF 0E0h ;SPI data register
DIV .DEF 0E1h ;SPI divider register
MOD .DEF 0E2h ;SPI mode register
MISCR .DEF 0DDh ;miscellaneous register
;****************************************************variabili****************************************
CODICEA .DEF 084h ;codice apricancello
CODICEB .DEF 085h ;CODICE B
MEMMOT .DEF 086h
L .DEF 087h
;*********************************************** inizio programma dall'ind. 080h ***********************************
.org 080h ;inizio programma
INIZIO LDI WDOG,0ffh ;ricarico watchdog
LDI PDIR_A,11000000b
LDI POPT_A,00000000b
LDI PORT_A,00000000b
LDI PDIR_A,11000000b
LDI POPT_A,11000000b
LDI PORT_A,00000000b
LDI PDIR_B,11000010b
LDI POPT_B,00110000b
LDI PORT_B,00001101b
LDI PDIR_B,11000010b
LDI POPT_B,11110010b
LDI PORT_B,00001101b
LDI PDIR_C,00000001b
LDI POPT_C,00000000b
LDI PORT_C,00000000b
LDI PDIR_C,00000001b
LDI POPT_C,00000001b
LDI PORT_C,00000000b
LDI ADCR,0 ;disabilita il convertitore
LDI TSCR,0 ;disabilita timer 1
LDI ARMC,0 ;disabilita ARMTIM
LDI IOR,00110000b ;disabilita tutte le interruzioni
LDI MOD,0 ;disabilita spi
RETI ;ripristina i flag principali
JP MAIN ;salta al programma principale
;****************************************Programma principale**************************
MAIN LDI WDOG,0ffh
RES 6,PORT_B ;DISABILITO 555
RES 0,MEMMOT
BIT0 JRR 0,PORT_A,MEM0 ;LEGGO IL CODICE
SET 0,CODICEA
JP BIT1
MEM0 RES 0,CODICEA
BIT1 JRR 1,PORT_A,MEM1
SET 1,CODICEA
JP BIT2
MEM1 RES 1,CODICEA
BIT2 JRR 2,PORT_A,MEM2
SET 2,CODICEA
JP BIT3
MEM2 RES 2,CODICEA
BIT3 JRR 3,PORT_A,MEM3
SET 3,CODICEA
JP BIT4
MEM3 RES 3,CODICEA
BIT4 JRR 4,PORT_A,MEM4
SET 4,CODICEA
JP BIT5
MEM4 RES 4,CODICEA
BIT5 JRR 5,PORT_A,MEM5
SET 5,CODICEA
JP BIT6
MEM5 RES 5,CODICEA
BIT6 RES 6,PORT_A ;DISABILITO TRASMISSIONE
RES 7,PORT_A ;ABILITO RICEZIONE
LD A,CODICEA
ANDI A,00111111B
LD CODICEA,A
CALL DELAY
ABTRASM LDI WDOG,0ffh
JRR 0,PORT_B,ABTRASM ;QUANDO ARRIVA UN FRONTE DI DISCESA PROSEGUE
CALL DELAY4
LDI W,7
LDI L,0
RX LD PORT_B,A
ANDI A,00000001B
ADD A,L
SLA A
LD L,A
CALL DELAY1
DEC W
JRZ FIN1
JP RX
FIN1 SZ<X,A
LD A,CODICEA
CP A,CODICEB ;COMPARO I DUE CODICI
JRNC BAM
JP MAIN
BAM JRZ APRI
JP MAIN
APRI SET 6,PORT_B ;ABILITO 555
SET 7,PORT_B ;COMANDO1 MOTORE
RES 0,PORT_C ;COMANDO2 MOTORE
SET 0,MEMMOT
FINEC2 LDI WDOG,0ffh
JRR 3,PORT_B,FINEC2
RES 6,PORT_B
CALL DELAY2
SET 6,PORT_B ;RIABILITO555
RES 7,PORT_B ;INVERTO IL VERSO DEL MOTORE
SET 0,PORT_C
SET 1,MEMMOT
FINEC1 LDI WDOG,0ffh
JRR 2,PORT_B,FINEC1
RES 6,PORT_B
RES 7,PORT_B
RES 0,PORT_C
JP MAIN
DELAY2 LDI v,255
LDI Y,93
DEL2 LDI X,255
CIC2 LDI WDOG,0ffh
DEC X
JRNZ CIC2
LDI WDOG,0ffh
DEC Y
JRNZ DEL2
LDI WDOG,0ffh
DEL3 DEC V
JRNZ DEL3
RETI
DELAY LDI WDOG,0ffh
LDI Y,41
DEL LDI X,255
CIC LDI WDOG,0ffh
DEC X
JRNZ CIC
DEC Y
JRNZ DEL
RET
DELAY1 LDI WDOG,0ffh
LDI Y,3
DEL1 LDI X,34
CIC1 LDI WDOG,0ffh
DEC X
JRNZ CIC1
DEC Y
JRNZ DEL1
RET
DELAY4 LDI WDOG,0ffh
LDI Y,3
DEL2A LDI X,35
CIC2A LDI WDOG,0ffh
DEC X
JRNZ CIC2A
DEC Y
JRNZ DEL2A
RET
;*****************************************GESTIONE INTERRUPT*********************************
TAD_INT RETI
ART_INT RETI
C_INT RETI
FOT_INT RES 6,PORT_B
RES 7,PORT_B
RES 0,PORT_C
CONTR1 LDI WDOG,0ffh
JRS 4,PORT_B,CONTR1
CONTR2 LDI WDOG,0ffh
JRS 5,PORT_B,CONTR2
RETI
NMI_INT RETI
;******************************************************INTERRUPT VECTOR******************************
.ORG 0FF0H
JP TAD_INT
JP C_INT
JP FOT_INT
.ORG 0FFCH
JP NMI_INT
JP INIZIO
.END
.ORG 0FFCH
.END
FILE2: "TRASMISSIONE.ASM"
.TITLE "TRASMETTITORE"
.VERS "ST62E60"
;*********************************************** registri per uso generale ***************************************
X .DEF 080h ;regisro x
Y .DEF 081h ;regisro y
V .DEF 082h ;regisro v
W .DEF 083h ;regisro w
A .DEF 0FFh ;regisro a
;*********************************************** registri per le porte I/O ***************************************
PORT_A .DEF 0C0h ;Data register A port
PORT_B .DEF 0C1h ;Data register B port
PORT_C .DEF 0C2h ;Data register C port
PDIR_A .DEF 0C4h ;Data direction reg. A port
PDIR_B .DEF 0C5h ;Data direction reg. B port
PDIR_C .DEF 0C6h ;Data direction reg. C port
POPT_A .DEF 0CCh ;Option register A port
POPT_B .DEF 0CDh ;Option register B port
POPT_C .DEF 0CEh ;Option register C port
;*********************************************** registri di interrupt ***************************************
IOR .DEF 0c8h
;*********************************************** registri data rom windows ***************************************
DRW .DEF 0c9h
;*********************************************** registri timer 2 ***************************************
ARRC .DEF 0D9h ;reload capture register
ARCP .DEF 0DAh ;compare register
ARMC .DEF 0D5h ;mode control register
ARSC0 .DEF 0D6h ;status control register
ARSC1 .DEF 0D7h ;status control register
ARLR .DEF 0Dbh ;load register
;*********************************************** registri A/D converter ***************************************
ADCR .DEF 0D1h ;registro di controllo
ADDR .DEF 0D0h ;registro dati
;*********************************************** controllo oscillatore ***************************************
OSCR .DEF 0DCh ;oscillator control register
;*********************************************** controllo eeprom ***************************************
DRBR .DEF 0E8h ;data ram/eeprom bank register
EECR .DEF 0EAh ;eeprom control register
;*********************************************** registr watchdog ***************************************
WDOG .DEF 0D8h ;registro wachdog
;*********************************************** timer 1 ***************************************
PSC .DEF 0D2h ;controllo prescaler
TCR .DEF 0D3h ;registro dati
TSCR .DEF 0D4h ;registro di controllo dati
;*********************************************** controllo SPI ***************************************
SPID .DEF 0E0h ;SPI data register
DIV .DEF 0E1h ;SPI divider register
MOD .DEF 0E2h ;SPI mode register
MISCR .DEF 0DDh ;miscellaneous register
;*********************************************** dichiarazioni variabili *******************************************
CODICEA .DEF 084h ;codice apricancello
H .DEF 085h
L .DEF 086h
;*********************************************** inizio programma dall'ind. 080h ***********************************
.org 080h ;inizio programma
INIZIO LDI WDOG,0ffh ;ricarico watchdog
ldi PDIR_A,00000000B
ldi POPT_A,00000000B
ldi PORT_A,00000000B
LDI PDIR_B,10000000b
LDI POPT_B,01110000b
LDI PORT_B,00000000b
LDI PDIR_B,10000000b
LDI POPT_B,11110000b
LDI PORT_B,00000000b
LDI PDIR_C,11111111b
LDI POPT_C,00000000b
LDI PORT_C,00000000b
LDI PDIR_C,11111111b
LDI POPT_C,11111111b
LDI PORT_C,00000000b
LDI ADCR,0 ;disabilita il convertitore
LDI TSCR,00100000B ;disabilita timer 1
LDI ARMC,0 ;disabilita ARMTIM
ldi IOR,00010000b ;abilita tutte le interruzioni
LDI MOD,0 ;disabilita spi
RETI ;ripristina i flag principali
JP MAIN ;salta al programma principale
;****************************************Programma principale**************************
MAIN LDI WDOG,0ffh
LD A,PORT_A
ANDI A,00001111B
LD H,A
LD A,PORT_B
RLC A
RLC A
RLC A
RLC A
ANDI A,00110000B
ADD A,H
RLC A
ANDI A,01111110B
SET 7,A
RES 0,A
LD CODICEA,A
WAIT
JP MAIN
;*****************************************GESTIONE INTERRUPT*********************************
TAD_INT RETI
ART_INT RETI
C_INT RETI
BLK_INT LD A,CODICEA
LDI W,8
SET 7,PORT_B
CALL DELAY
RLC A
RLC A
RLC A
RLC A
RLC A
TX RLC A
LD L,A
ANDI A,00010000B
LD PORT_C,A
CALL DELAY1
LD A,L
DEC W
JRZ FIN1
JP TX
FIN1 RETI
DELAY LDI WDOG,0ffh
LDI Y,41
DEL LDI X,255
CIC LDI WDOG,0ffh
DEC X
JRNZ CIC
DEC Y
JRNZ DEL
RET
DELAY1 LDI WDOG,0ffh
LDI Y,3
DEL1 LDI X,34
CIC1 LDI WDOG,0ffh
DEC X
JRNZ CIC1
DEC Y
JRNZ DEL1
RET
NMI_INT RETI
;******************************************************INTERRUPT VECTOR******************************
.ORG 0FF0H
JP TAD_INT
JP ART_INT
JP C_INT
JP BLK_INT
.ORG 0FFCH
JP NMI_INT
JP INIZIO
.END
Grazie mille!
Salve a tutti, ho un mio amico che è depresso al massimo: deve presentare un esame di elettronica, ma non riesce a capire come mai non funziona a dovere.
Il progetto consiste nel realizzare un cancello che si apre quando una vettura passa davanti ad un sensore. Il risultato del codice qua sotto è che il cancello si apre si, ma solo con telecomando.
Vi chiedo aiuto nell'individuare se il problema sta nel codice, o nella realizzazione pratica. (se il codice è ok, gli dirò di controllare il progetto)
Premetto che io non ho la benchè minima conoscenza di quanto sto per postare, il mio ruolo è solo quello di :muro: vicino di casa di uno sfigato che un esame tra pochi giorni... :tie:
FILE1: "RICEZIONE.ASM"
.TITLE "RICEVITORE"
.VERS "ST62E65"
;*********************************************** registri per uso generale ***************************************
X .DEF 080h ;regisro x
Y .DEF 081h ;regisro y
V .DEF 082h ;regisro v
W .DEF 083h ;regisro w
A .DEF 0FFh ;regisro a
;*********************************************** registri per le porte I/O ***************************************
PORT_A .DEF 0C0h ;Data register A port
PORT_B .DEF 0C1h ;Data register B port
PORT_C .DEF 0C2h ;Data register C port
PDIR_A .DEF 0C4h ;Data direction reg. A port
PDIR_B .DEF 0C5h ;Data direction reg. B port
PDIR_C .DEF 0C6h ;Data direction reg. C port
POPT_A .DEF 0CCh ;Option register A port
POPT_B .DEF 0CDh ;Option register B port
POPT_C .DEF 0CEh ;Option register C port
;*********************************************** registri di interrupt ***************************************
IOR .DEF 0c8h
;*********************************************** registri data rom windows ***************************************
DRW .DEF 0c9h
;*********************************************** registri timer 2 ***************************************
ARRC .DEF 0D9h ;reload capture register
ARCP .DEF 0DAh ;compare register
ARMC .DEF 0D5h ;mode control register
ARSC0 .DEF 0D6h ;status control register
ARSC1 .DEF 0D7h ;status control register
ARLR .DEF 0Dbh ;load register
;*********************************************** registri A/D converter ***************************************
ADCR .DEF 0D1h ;registro di controllo
ADDR .DEF 0D0h ;registro dati
;*********************************************** controllo oscillatore ***************************************
OSCR .DEF 0DCh ;oscillator control register
;*********************************************** controllo eeprom ***************************************
DRBR .DEF 0E8h ;data ram/eeprom bank register
EECR .DEF 0EAh ;eeprom control register
;*********************************************** registr watchdog ***************************************
WDOG .DEF 0D8h ;registro wachdog
;*********************************************** timer 1 ***************************************
PSC .DEF 0D2h ;controllo prescaler
TCR .DEF 0D3h ;registro dati
TSCR .DEF 0D4h ;registro di controllo dati
;*********************************************** controllo SPI ***************************************
SPID .DEF 0E0h ;SPI data register
DIV .DEF 0E1h ;SPI divider register
MOD .DEF 0E2h ;SPI mode register
MISCR .DEF 0DDh ;miscellaneous register
;****************************************************variabili****************************************
CODICEA .DEF 084h ;codice apricancello
CODICEB .DEF 085h ;CODICE B
MEMMOT .DEF 086h
L .DEF 087h
;*********************************************** inizio programma dall'ind. 080h ***********************************
.org 080h ;inizio programma
INIZIO LDI WDOG,0ffh ;ricarico watchdog
LDI PDIR_A,11000000b
LDI POPT_A,00000000b
LDI PORT_A,00000000b
LDI PDIR_A,11000000b
LDI POPT_A,11000000b
LDI PORT_A,00000000b
LDI PDIR_B,11000010b
LDI POPT_B,00110000b
LDI PORT_B,00001101b
LDI PDIR_B,11000010b
LDI POPT_B,11110010b
LDI PORT_B,00001101b
LDI PDIR_C,00000001b
LDI POPT_C,00000000b
LDI PORT_C,00000000b
LDI PDIR_C,00000001b
LDI POPT_C,00000001b
LDI PORT_C,00000000b
LDI ADCR,0 ;disabilita il convertitore
LDI TSCR,0 ;disabilita timer 1
LDI ARMC,0 ;disabilita ARMTIM
LDI IOR,00110000b ;disabilita tutte le interruzioni
LDI MOD,0 ;disabilita spi
RETI ;ripristina i flag principali
JP MAIN ;salta al programma principale
;****************************************Programma principale**************************
MAIN LDI WDOG,0ffh
RES 6,PORT_B ;DISABILITO 555
RES 0,MEMMOT
BIT0 JRR 0,PORT_A,MEM0 ;LEGGO IL CODICE
SET 0,CODICEA
JP BIT1
MEM0 RES 0,CODICEA
BIT1 JRR 1,PORT_A,MEM1
SET 1,CODICEA
JP BIT2
MEM1 RES 1,CODICEA
BIT2 JRR 2,PORT_A,MEM2
SET 2,CODICEA
JP BIT3
MEM2 RES 2,CODICEA
BIT3 JRR 3,PORT_A,MEM3
SET 3,CODICEA
JP BIT4
MEM3 RES 3,CODICEA
BIT4 JRR 4,PORT_A,MEM4
SET 4,CODICEA
JP BIT5
MEM4 RES 4,CODICEA
BIT5 JRR 5,PORT_A,MEM5
SET 5,CODICEA
JP BIT6
MEM5 RES 5,CODICEA
BIT6 RES 6,PORT_A ;DISABILITO TRASMISSIONE
RES 7,PORT_A ;ABILITO RICEZIONE
LD A,CODICEA
ANDI A,00111111B
LD CODICEA,A
CALL DELAY
ABTRASM LDI WDOG,0ffh
JRR 0,PORT_B,ABTRASM ;QUANDO ARRIVA UN FRONTE DI DISCESA PROSEGUE
CALL DELAY4
LDI W,7
LDI L,0
RX LD PORT_B,A
ANDI A,00000001B
ADD A,L
SLA A
LD L,A
CALL DELAY1
DEC W
JRZ FIN1
JP RX
FIN1 SZ<X,A
LD A,CODICEA
CP A,CODICEB ;COMPARO I DUE CODICI
JRNC BAM
JP MAIN
BAM JRZ APRI
JP MAIN
APRI SET 6,PORT_B ;ABILITO 555
SET 7,PORT_B ;COMANDO1 MOTORE
RES 0,PORT_C ;COMANDO2 MOTORE
SET 0,MEMMOT
FINEC2 LDI WDOG,0ffh
JRR 3,PORT_B,FINEC2
RES 6,PORT_B
CALL DELAY2
SET 6,PORT_B ;RIABILITO555
RES 7,PORT_B ;INVERTO IL VERSO DEL MOTORE
SET 0,PORT_C
SET 1,MEMMOT
FINEC1 LDI WDOG,0ffh
JRR 2,PORT_B,FINEC1
RES 6,PORT_B
RES 7,PORT_B
RES 0,PORT_C
JP MAIN
DELAY2 LDI v,255
LDI Y,93
DEL2 LDI X,255
CIC2 LDI WDOG,0ffh
DEC X
JRNZ CIC2
LDI WDOG,0ffh
DEC Y
JRNZ DEL2
LDI WDOG,0ffh
DEL3 DEC V
JRNZ DEL3
RETI
DELAY LDI WDOG,0ffh
LDI Y,41
DEL LDI X,255
CIC LDI WDOG,0ffh
DEC X
JRNZ CIC
DEC Y
JRNZ DEL
RET
DELAY1 LDI WDOG,0ffh
LDI Y,3
DEL1 LDI X,34
CIC1 LDI WDOG,0ffh
DEC X
JRNZ CIC1
DEC Y
JRNZ DEL1
RET
DELAY4 LDI WDOG,0ffh
LDI Y,3
DEL2A LDI X,35
CIC2A LDI WDOG,0ffh
DEC X
JRNZ CIC2A
DEC Y
JRNZ DEL2A
RET
;*****************************************GESTIONE INTERRUPT*********************************
TAD_INT RETI
ART_INT RETI
C_INT RETI
FOT_INT RES 6,PORT_B
RES 7,PORT_B
RES 0,PORT_C
CONTR1 LDI WDOG,0ffh
JRS 4,PORT_B,CONTR1
CONTR2 LDI WDOG,0ffh
JRS 5,PORT_B,CONTR2
RETI
NMI_INT RETI
;******************************************************INTERRUPT VECTOR******************************
.ORG 0FF0H
JP TAD_INT
JP C_INT
JP FOT_INT
.ORG 0FFCH
JP NMI_INT
JP INIZIO
.END
.ORG 0FFCH
.END
FILE2: "TRASMISSIONE.ASM"
.TITLE "TRASMETTITORE"
.VERS "ST62E60"
;*********************************************** registri per uso generale ***************************************
X .DEF 080h ;regisro x
Y .DEF 081h ;regisro y
V .DEF 082h ;regisro v
W .DEF 083h ;regisro w
A .DEF 0FFh ;regisro a
;*********************************************** registri per le porte I/O ***************************************
PORT_A .DEF 0C0h ;Data register A port
PORT_B .DEF 0C1h ;Data register B port
PORT_C .DEF 0C2h ;Data register C port
PDIR_A .DEF 0C4h ;Data direction reg. A port
PDIR_B .DEF 0C5h ;Data direction reg. B port
PDIR_C .DEF 0C6h ;Data direction reg. C port
POPT_A .DEF 0CCh ;Option register A port
POPT_B .DEF 0CDh ;Option register B port
POPT_C .DEF 0CEh ;Option register C port
;*********************************************** registri di interrupt ***************************************
IOR .DEF 0c8h
;*********************************************** registri data rom windows ***************************************
DRW .DEF 0c9h
;*********************************************** registri timer 2 ***************************************
ARRC .DEF 0D9h ;reload capture register
ARCP .DEF 0DAh ;compare register
ARMC .DEF 0D5h ;mode control register
ARSC0 .DEF 0D6h ;status control register
ARSC1 .DEF 0D7h ;status control register
ARLR .DEF 0Dbh ;load register
;*********************************************** registri A/D converter ***************************************
ADCR .DEF 0D1h ;registro di controllo
ADDR .DEF 0D0h ;registro dati
;*********************************************** controllo oscillatore ***************************************
OSCR .DEF 0DCh ;oscillator control register
;*********************************************** controllo eeprom ***************************************
DRBR .DEF 0E8h ;data ram/eeprom bank register
EECR .DEF 0EAh ;eeprom control register
;*********************************************** registr watchdog ***************************************
WDOG .DEF 0D8h ;registro wachdog
;*********************************************** timer 1 ***************************************
PSC .DEF 0D2h ;controllo prescaler
TCR .DEF 0D3h ;registro dati
TSCR .DEF 0D4h ;registro di controllo dati
;*********************************************** controllo SPI ***************************************
SPID .DEF 0E0h ;SPI data register
DIV .DEF 0E1h ;SPI divider register
MOD .DEF 0E2h ;SPI mode register
MISCR .DEF 0DDh ;miscellaneous register
;*********************************************** dichiarazioni variabili *******************************************
CODICEA .DEF 084h ;codice apricancello
H .DEF 085h
L .DEF 086h
;*********************************************** inizio programma dall'ind. 080h ***********************************
.org 080h ;inizio programma
INIZIO LDI WDOG,0ffh ;ricarico watchdog
ldi PDIR_A,00000000B
ldi POPT_A,00000000B
ldi PORT_A,00000000B
LDI PDIR_B,10000000b
LDI POPT_B,01110000b
LDI PORT_B,00000000b
LDI PDIR_B,10000000b
LDI POPT_B,11110000b
LDI PORT_B,00000000b
LDI PDIR_C,11111111b
LDI POPT_C,00000000b
LDI PORT_C,00000000b
LDI PDIR_C,11111111b
LDI POPT_C,11111111b
LDI PORT_C,00000000b
LDI ADCR,0 ;disabilita il convertitore
LDI TSCR,00100000B ;disabilita timer 1
LDI ARMC,0 ;disabilita ARMTIM
ldi IOR,00010000b ;abilita tutte le interruzioni
LDI MOD,0 ;disabilita spi
RETI ;ripristina i flag principali
JP MAIN ;salta al programma principale
;****************************************Programma principale**************************
MAIN LDI WDOG,0ffh
LD A,PORT_A
ANDI A,00001111B
LD H,A
LD A,PORT_B
RLC A
RLC A
RLC A
RLC A
ANDI A,00110000B
ADD A,H
RLC A
ANDI A,01111110B
SET 7,A
RES 0,A
LD CODICEA,A
WAIT
JP MAIN
;*****************************************GESTIONE INTERRUPT*********************************
TAD_INT RETI
ART_INT RETI
C_INT RETI
BLK_INT LD A,CODICEA
LDI W,8
SET 7,PORT_B
CALL DELAY
RLC A
RLC A
RLC A
RLC A
RLC A
TX RLC A
LD L,A
ANDI A,00010000B
LD PORT_C,A
CALL DELAY1
LD A,L
DEC W
JRZ FIN1
JP TX
FIN1 RETI
DELAY LDI WDOG,0ffh
LDI Y,41
DEL LDI X,255
CIC LDI WDOG,0ffh
DEC X
JRNZ CIC
DEC Y
JRNZ DEL
RET
DELAY1 LDI WDOG,0ffh
LDI Y,3
DEL1 LDI X,34
CIC1 LDI WDOG,0ffh
DEC X
JRNZ CIC1
DEC Y
JRNZ DEL1
RET
NMI_INT RETI
;******************************************************INTERRUPT VECTOR******************************
.ORG 0FF0H
JP TAD_INT
JP ART_INT
JP C_INT
JP BLK_INT
.ORG 0FFCH
JP NMI_INT
JP INIZIO
.END
Grazie mille!