7 szegmenses kijelzõ meghajtása ATM128-cal
Papp Zoltán
oneway at onewayelectronics.hu
Wed Jul 6 21:46:53 CEST 2005
Wed, 6 Jul 2005 18:17:44 +0200-n, Laurinyecz Zoltán
<lauri at mail.globonet.hu> írta:
> > 10 elemu tablazat, amiben 0..9-ig szerepelnek a "dekodolt"
> szegmensek.
> > Kereses meg a binaris szam hozzaadasa a tablazat cimehez. Gyors es
> > egyszeru.
> >
> > R16-ban legyen a szamod
> >
> > ldi ZL,low(tabla*2)
> > ldi ZH,hi(tabla*2)
> > ldi R17,(tabla/32768)
> > clr R0
> > andi R16,0x0F
> > add ZL,R16
> > adc ZH,R0
> > adc R17,R0
> > out RAMPZ,R17
> > elpm R0,Z
> > out portb,R0
>
>
> >.MACRO _Display ;@0
> >ldi R17, at 0 ;i <- aktualis karakter kodja
> >_ldi16 ZH,ZL,PLed ;Z <- karakter-tabla cime
> >_add16 ZH,ZL,R17 ;Z <- Z+i
> >lpm ;R0 <- prg(Z) (karakter formaja)
> >out PORTB,R0 ;karakter kiir
> >.ENDMACRO ;_Display
>
> Átnézve más forrásokat is gyakorlatilag a fenti két rutinhoz hasonló
> megoldásokat találtam. A
> közös bennük hogy egyiket sem igazán értettem meg t.i. hogy melyik sor
> mit csinál és legfoképpen
> hogy hogyan.
>
> El tudná-e magyarázni valaki a rutinok muködését egy kicsit bovebben
> olyasvalakinek aki épp csak
> hogy túl van az elso villogó led meg futófény programján? (ez vagyok én)
OK, gyorstalpaló:
Gyakorlatilag a programmemóriában tárolod le a táblázatodat sorban a 0-tól
9-ig, és tovább, ennek van egy kezdőcíme.
A programban betöltöd a 16 bites Z (ZH és ZL) regiszterbe a táblázatod
bájtban kifejezett kezdőcímét. Ehhez hozzáadod a kijelezni kívánt
"karakter" kódját (saját kódolás: 0=0, 1=1, .. 9=9, 0xA=pl. A betű,
0x10=pl. mínusz jel, stb...), így a Z-ben most már annak a karakternek a
címe van, amelyiket ki kell tenned a portra, hogy a kívánt karakter
jelenjen meg. (ATM128-on a programmemória 17 bites, mivel 128kiB van,
ezért kell a RAMPZ regisztert is buherálnod, ebben van a 16. címbit, ld
fent a MACRO felett az R17:ZH:ZL-ben tárolod a 17 bites címet, és ehhez
adod hozzá az R16 regiszter alsó 4 bitjét; mivel a felső 4 bitet törli az
[andi R16,0x0F])
Ezután az lpm (vagy elpm) utasítással betöltöd a Z címen lévő,
programmemóriában letárolt bájtot, ami az R0 regiszterbe kerül, ezt aztán
kiírod a portra.
Javaslom kicsit jobban ismerkedj meg a digitális technikával, a
mikrokontrollerek lelkivilágával, és nézd meg az ATMEGA128
utasításkészletét, hogy pl. a fenti utasítások mit csinálnak.
Ha nagyon nem akarsz elmélyedni az assemblyben, akkor meg programozz
C-ben, egyszerűbb, és jobban átláthatóbb, és a legtöbb esetben elég jó
gépi kódot is generál.
UFF
--
Papp Zoltán
OneWay Electronics
More information about the Elektro
mailing list