PDA

Visualizza versione completa : Aiutoooooo!!!!:(


XdarkmanX
26-10-2002, 18.16.04
Chi fra voi è così bravo da riuscire a fare questo esercizio in assembly, linguaggio da usare è quello dello Z80!!


Vi ringrazio già ora!!

Sergio Neddi
26-10-2002, 22.37.25
Cosa si dovrebbe fare? non è chiaro. l'unica cosa chiara che ho visto è che hai icq, msn messenger, 2 utenti di c6...

Si tratta di qualcosa riguardo le comunicazioni seriali, ma non ho capito di più.

XdarkmanX
27-10-2002, 00.39.24
Devo fare un programma ed il programma è tutto scritto nel foglio allegato!!

Sergio Neddi
27-10-2002, 01.18.05
Sarà che sono orbo ma faccio una fatica boia a leggere...

...allora bisogna (correggimi se sbaglio):

1) fare un programma che legge dei dati seriali dal bit 0 di una porta INPORT che è locata a 33h;
2) fare una specie di semplice crittografia facendo l'OR Esclusivo con il byte ricevuto precedentemente. Si assume il valore 0 per il primo byte, dato che non ce ne sono di precedenti;
3) ogni byte elaborato va inviato (in forma seriale) al bit 0 della porta OUTPORT che è locata a 35h.

Visto che si tratta di seriali bisogna considerare che sono 1 bit di start, 8 bit di dati ed 1 bit di stop, il tutto va a 100bps.

Bisogna gestire quindi le temporizzazioni sia per quanto riguarda la lettura dei valori in ingresso sia per quanto riguarda la serializzazione dei valori in uscita.

Immagino che non ci sia handshake.

Il tutto in Assambler Z80.

Devo dire che manca una cosa... dato che si tratta di dispositivi seriali e quindi è importante la temporizzazione... manca un qualsiasi dispositivo temporizzatore che ci dia un riferimento temporale.

Servirebbe sapere come fare i cicli di calcolo del tempo: si può usare un timer esterno oppure bisogna farlo solo con la CPU?

Se si può usare solo la CPU bisogna però conoscerne la precisa frequenza di clock (per uno Z80 è tipicamente 2 MHZ, per uno Z80A il doppio), in modo da calcolare dei cicli di ritardo che approssimino le temporizzazioni richieste.

In ogni caso non mi pare un esercizio semplicissimo.

Sarà anche perché sono tantissimi anni che non programmo più lo Z80.

ekerazha
27-10-2002, 10.18.19
complementi per la preparazione Sergio, è la prima volta che faccio fatica a capire un post :D

XdarkmanX
27-10-2002, 16.23.52
Le temporizzazioni del BITTIME e del TIME16 sono già date, ovvero:

BITTIME (10 mS)
TIME16 (625 microS)

Sergio Neddi
27-10-2002, 21.32.06
Originariamente inviato da XdarkmanX
Le temporizzazioni del BITTIME e del TIME16 sono già date, ovvero:

BITTIME (10 mS)
TIME16 (625 microS)

Questo lo so, però come fai a gestirle se non hai un riferimento, un orologio, insomma... un timer esterno oppure il clock del processore... per calcolare i 10ms oppure i 625ms devi avere un riferimento per sapere quando è passato questo tempo.

Si possono fare dei loop con il processore, ma è necessario conoscere la freq. di clock oppure si può usare un riferimento esterno.

Senza riferimenti precisi non si possono calcolare gli intervalli di tempo.

XdarkmanX
27-10-2002, 23.10.14
Capisco! Ti mando un esempio, ma ovviamente bisogna cambiarlo, in sostanza questo è l'esercizio svolto, ma devo modificare qualcosa, oppure rifarlo completamente!!



ORG 0000h
JP 0100h
ORG 0100h

SERIN EQU 33h
SEROUT EQU 35h
LD SP,0FFFFh ;initialisation of the stack pointer
LD B,00000000b ;data trasmitted before the begin of the program
RESET: LD D,7 ;counter
START: IN A,(SERIN) ;it controls if the line is sampled
BIT 0,A ;high 8 times continuosly
CALL TIME16
JP Z,RESET
DEC D
JP Z,BEGIN
JP START
BEGIN: LD D,8
LD H,00000000b
CONTINUE: IN A,(SERIN) ;it loads in the H register the data
SRL H ;acquired from the bit '0' of the input
CALL BITTIME ;port
BIT 0,A
JP Z,DEC
SET 7,H
DEC: DEC D
JP NZ,CONTINUE
IN A,(SERIN) ;it controls if the stop bit is low
BIT 0,A ;else it ignores all the data just acquired
JP NZ,RESET ;and goes back to the 'reset' label, waiting
LD A,H ;for another 'start' signal
PUSH AF
XOR B ;cryptographic operation
LD D,8
OUTPUTS: OUT (SEROUT),A ;gives the outputs 1 by 1 from the
SRL A ;bit '0' of the A register
DEC D
JP NZ,OUTPUTS
POP AF
LD B,A ;copies the data stored in the A register
JP RESET ;in the B register for a future cryptographic
;operation
TIME16: NOP ;This two subprograms are merely USEd to emulate
RET ;a delay routine, this one wait for 625 microseconds

BITTIME: NOP ;this one wait for 10 milliseconds
RET



Fai un bel copia/incolla e vedi come si può fare grazie!!!

Sergio Neddi
27-10-2002, 23.14.35
Ah, mi pare di capire che le 2 temporizzazioni sono routine già fatte e che si occupano loro di come calcolare il tempo... noi ci dobbiamo solo occupare del resto.

Almeno a giudicare da questo, in quanto vengono richiamate 2 routine vuote che immagino siano solo di esempio:

TIME16: NOP ;This two subprograms are merely USEd to emulate
RET ;a delay routine, this one wait for 625 microseconds

BITTIME: NOP ;this one wait for 10 milliseconds
RET


Ci darò un'occhiata, ma non credo di avere abbastanza tempo in questi giorni.

XdarkmanX
27-10-2002, 23.36.24
Se riesci entro martedì, mi faresti un favore enorme grazie!!