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