|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2002
Città: 3vis0
Messaggi: 423
|
HELP..per esame elettonica
Scusate per il topic luuuuungo....
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 FILE1: "RICEZIONE.ASM" Codice:
.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 Codice:
.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
__________________
Ci sono due modi di fare le cose: quello giusto e quello mio. E sono la stessa cosa! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
Qui ci vorrebbe buffon
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: 3vis0
Messaggi: 423
|
Quote:
__________________
Ci sono due modi di fare le cose: quello giusto e quello mio. E sono la stessa cosa! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:04.



















