Vai al contenuto
PLC Forum


Programmare In Assembler Un At90s4433


Messaggi consigliati

Inserito:

Salve,

sono uno studente di elettronica, che dovrà presentare in occasione degli esami di maturità un microprocessore che con il sensore di temperatura LM335 a monte ha la funzione di trasmettere ad un lcd la temperatura. Il tutto è pronto ... ma mi manca la programmazione in assembler. Il microprocessore è un AT90S4433. Potreste darmi una mano. GRAZIEEEEEEE!


Inserita:

Se ti manca il programma ancora oggi, addì 19-06-06 la vedo brutta per te, a meno che tu non stia preparando la maturità del 2007 :lol:

Per curiosità cosa ti serve? Hai fatto mniente? Non crederai di trovare qualcuno che fa la tesina al posto tuo!

Inserita:

I due programmi di trasmissione e ricezione ci sono già ..

Visto e considerato che il microprocessore ,dai miei professori trattato ST6210, non si trova proprio , non sò se si possono utilizzare in parte o adattare i programmi suddetti al microprocessore in questione .. l'at90s4433 , che ho .

Grazie ancora per l'interessamento..

-------------------------------------------------------------

CONVERSIONE ADC E TRASMISSIONE DEL DATO

.title "ADC+tx" ; Titolo del programma

.vers "ST62E10" ; Microprocessore usato

; 8 Mhz ; 01/06/2006

ldi wdog,0ffh ; Carico il Watch-Dog.

; Setta la porta A

ldi pdir_a,00000001b ;out solo pa0 TX

ldi popt_a,00000001b

ldi port_a,00000001b

; Setta la porta B

ldi pdir_b,00000000b ;tutti input

ldi popt_b,00000001b ;verrà usato solo pb0 come ADC

ldi port_b,00000001b

;PROGRAMMA PRINCIPALE

main ldi wdog,255

ldi adcr,00110000b ;abilita A/D ( su pb0)

att jrr 6,adcr,att ;attende conversione

ld a,addr ;mette in a il valore convertito

res 1,port_a ;sincronismo per l'oscilloscopio

nop ;piccolo ritardo

set 1,port_a ;l'impulso torna alto

ldi wdog,255

ldi x,8 ;numero dei bit da tx

unbit rlc a ;ruota nrl cy il bit 7 del byte

jrnc zero ;se cy=0 salta a zero

jp uno ;se cy=1 salta a uno

zero set 0,port_a ;mette linea=1

ldi w,6 ;resta a 1 per 1/4 T

decw dec w

jrnz decw

res 0,port_a ;mette linea=0

ldi w,19 ;resta a 0 per 3/4 T

dew dec w

jrnz dew

jp decx

uno set 0,port_a ;lineaa=1

ldi w,19 ;resta per 3/4 T

decc dec w

jrnz decc

res 0,port_a ;lineaa=0

ldi w,6 ;resta a 0 per 1/4 T

decw_ dec w

jrnz decw_

decx dec x

jrz ldiw ;se i bit tx sono 8 ritorna

jp unbit ;altrimenti ne prende un altro

ldiw ldi w,35 ;pausa fra byte = circa 2T

duet ldi wdog,255

dec w

jrnz duet

jp main ;altro byte

-------------------------------------------

.title "RX+display" ; Titolo del programma

.vers "ST62E10" ; Microprocessore usato

; 8 Mhz ; 01/06/2006

aa .def 084h

decimi .def 085h

unita .def 086h

decine .def 087h

resto .def 088h

risul .def 089h

xx .def 08ah

;*** Setta la porta A

ldi pdir_a,11111111b ;dipsonibili solo pa0,1,2,3 verso CA3161

ldi popt_a,11111111b ; tutti ouput

ldi port_a,11111111b

;*** Setta la porta B

ldi pdir_b,00000111b ;pa0,1,2 output

ldi popt_b,00000111b ;pb3 in rx

ldi port_b,00000111b ; rimanenti non utilizzati conf. input

media add a,resto ;somma il precedente valore con il nuovo

jrnc etic2 ;se non c’è riporto salta

inc risul ;altrimenti incrementa

etic2 ld resto,a

ld a,xx ;verifica se ha eseguito 255 conversioni

jrz etic4 ;se si salta

dec xx ;altrimenti un conversione in meno

ret

etic4 ld a,resto ;arrotonda

cpi a,127

jrc etic3 ;se a é minore salta e continua a sottrarre

inc risul ;altrimenti arrotonda incrementando risul

etic3 ld a,risul ;valore mediato 255 volte va in a

ldi xx,5

call div

ld a,resto

sla a ;moltiplica per 2

ld decimi,a

ld a,risul

ldi xx,10

call div

cpi a,0

jrnz no0

ldi a,15

no0 ld decine,a

ld a,resto

ld unita,a

clr resto

clr risul

ldi xx,255

ret

div clr w

ldi wdog,255

cp a,xx ;se a< div salta

jrc ok

sub_ sub a,xx ;sottrae x ad a

inc w ;conta quante volte ci sta x in a

ldi wdog,255

cp a,xx

jrnc sub_ ;se a >= salta e continua a sottrarre

ok ld resto,a ;resto UNITA

ld a,w ;risultato

ld risul,a ;DECINE

ret

;DISPLAY

mux ld aa,a

ldi port_b,00001111b ;spegne display

ld a,v

cpi a,0

jrnz uno_

ld a,decimi

ld port_a,a

ldi port_b,0001011b

jp normal

uno_ cpi a,1

jrnz due

ld a,unita

ld port_a,a

ldi port_b,00001101b

jp normal

due ld a,decine

ld port_a,a

ldi port_b,0001110b

ldi v,255

normal inc v

ld a,aa

ret

;PROGRAMMA PRINCIPALE RX

main clr resto

clr risul

ldi xx,255

main_ ldi wdog,255 ;RICEVE UN BYTE

ldi w,25 ;resta in questo loop fino a che input

testa jrs 3,port_b,main_ ;da alto torna basso e permane + di un T

dec w ;per assicurarsi che sia un nuovo byte

jrnz testa

ldi x,8 ;numero bit da ricevere x confronto

rx ldi wdog,255

jrr 3,port_b,rx

call mux

ldi w,6 ;predispone per la campionatura a 1/2 T

decr dec w

jrnz decr

jrr 3,port_b,zero ;se dopo 1/2 T e` 0 salta

uno set 0,a ;altrimenti setta bit0 di a

dec x ;conta un bit ricevuto

jrz out ;se sono finiti salta

sla a ;altrimenti sposta a sinistra bit0 e prepara

resta jrs 3,port_b,resta ;per il prossimo

jp rx ;se linea =1 resta altrimenti input

out call media

jp main_ ;ricomincia per altro byte

zero res 0,a ;bit0= 0

dec x

jrnz slaa

jp out ;se sono finiti salta

slaa sla a ;altrimenti sposta a sinistra e libera x prossimo

jp rx ;ne aspetta un altro

Inserita:

per programmare i controllori atmel ci vuole AVRStudio per la compilazione, e PonyProg per la programmazione. Naturalmente devi avere interfaccia USB, o seriale, o parallela per connetterti al computer. ciao

Inserita:

Sono già in pèossesso degli strumenti di compilazione e programmazione.. mi serve solo sapere se i due programmi sono adatti per il microprocessore o è necessaria qualche modifica...

Inserita: (modificato)

Se ci pensi un attimo hai la risposta... Ti pare che, tanto per fare un esempio, che le istruzioni assembler possano tutte e quante essere identiche? Quello che puoi fare è , manuale ST6 e manuale ATMEL alla mano, tradurre il programma e poi compilarlo e debuggarlo...

Saluti

Modificato: da omar

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...