ATMega8 + asembler



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzy$" <kchrisk1_at_nospam_poczta.onet.pl>
Subject: ATMega8 + asembler
Date: Thu, 6 May 2004 17:56:27 +0200


Witam
Mam takie pytanko: w jaki sposob najprosciej i najszybciej w asemblerze
zamienic liczbe 16bitowa na liczbe dziesietna?
Mam wynik z przetwornika (2*8bitow) i chcialbym wyrzucic na wyswietlacz
liczbe odpowiadajaca tej wartosci binarnej.
Dzieki za pomoc
Krzysiek




========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.pw.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Zbych" <god_at_nospam_heaven.org>
Subject: Re: ATMega8 + asembler
Date: Thu, 6 May 2004 18:51:24 +0200


Mam takie pytanko: w jaki sposob najprosciej i najszybciej w =
asemblerze
zamienic liczbe 16bitowa na liczbe dziesietna?

Tutaj masz algorytm konwersji bin->spakowane bcd.
http://www.atmel.com/dyn/resources/prod_documents/doc0938.pdf
Wystarczy wypakowa=E6 ka=BFd=B1 cyfr=EA, dodac kod ascii zera
i wyrzuci=E6 na wy=B6wietlacz.


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.pw.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Zbych" <god_at_nospam_heaven.org>
Subject: Re: ATMega8 + asembler
Date: Thu, 6 May 2004 18:52:57 +0200


dodac kod ascii zera i wyrzuci=E6 na wy=B6wietlacz.
oczywi=B6cie je=B6li m=F3wimy o wy=B6wietlaczu lcd.



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzy$" <kchrisk1_at_nospam_poczta.onet.pl>
Subject: Re: ATMega8 + asembler
Date: Sat, 8 May 2004 21:21:45 +0200





oczywiście jeśli mówimy o wyświetlaczu lcd.
Tak chodzi mi o wyswietlacz LCD
http://www.atmel.com/dyn/resources/prod_documents/doc0938.pdf

zaczalem robic wedlug tego pdfa :

.def tmp=r19
.def L1=r13
.def L2=r14
.def L3=r15
.def DanaLSB=r16 ;mlodszy bajt liczby ktora chce zamienic
.def DanaMSB=r17 ;starszy bajt tej liczby
.def count=r18


ldi count,0x10
clr r13
clr r14
clr r15

lop:
LsL DanaLSB
RoL DanaMSB
RoL L1
RoL L2
RoL L3
dec count
breq end

ale doszedlem dotad i nie za bardzo wiem co dalej..
gdybys mogl podpowiedziec bylbym wdzieczny

DZieki za pomoc
Krzysiek






========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: ATMega8 + asembler
Date: Sun, 09 May 2004 12:16:02 +0200


"Krzy$" wrote:

oczywiście jeśli mówimy o wyświetlaczu lcd.
Tak chodzi mi o wyswietlacz LCD
http://www.atmel.com/dyn/resources/prod_documents/doc0938.pdf

ale doszedlem dotad i nie za bardzo wiem co dalej..
gdybys mogl podpowiedziec bylbym wdzieczny

Nie wiem skad to mam ale moze pomoze ;-)
Nie sprawdzalem czy dziala ale pewnie tak.

;-----------------------------------------------------------------------------;
; Universal decimal string conversion (8/16 bit unsigned)
;
; Register Variables:
; Call: var1:0 = 16 bit value to be converted
; len = String length
; tmp1:0 = <Don't care> (high register must be assigned)
; tmp2 = <Don't care>
;
; Result: var1:0 = <Unknown>
; len = <Not changed>
; tmp1:0 = <Unknown>
; tmp2 = 0
;
; Size: 30 words
; Clock: depends on output routine
; Stack: 10 bytes max (+output routine)
;
; Examples: var1 len output
; 100 0 "100"
; 1234 0 "1234"
; 0 7 " 0"
; 100 5 " 100"
; 100 2 "100"


mk_decu8: clr var1 ;8 bit entry
mk_decu16: ;16 bit entry
clr tmp2 ;digit counter
inc tmp2 ;---- decimal string generating
loop
clr tmp0 ;var1 /= 10;
ldi tmp1,16 ;
lsl var0 ;
rol var1 ;
rol tmp0 ;
cpi tmp0,10 ;
brcs PC+3 ;
subi tmp0,10 ;
inc var0 ;
dec tmp1 ;
brne PC-8 ;/
subi tmp0,-'0' ;Push the remander (a decimal
digit)
push tmp0 ;/
cp var0,tmp1 ;if(var =! 0)
cpc var1,tmp1 ; continue digit loop;
brne PC-16 ;/
cp tmp2,len ;Adjust string length (this can
be removed for auto-length)
brcc PC+5 ;
inc tmp2 ;
ldi var0,' ' ;
push var0 ;
rjmp PC-5 ;/
pop var0 ;Put decimal string
rcall xmit ;<-- Put a char (var0) to
memory, console or any display device
dec tmp2 ;
brne PC-3 ;/
ret



--
Regards. Przy odpowiedzi usun "." przed "net" z adresu!!!
|-----------------------------------------------------|
| Milosz Skowyra GSM Mobile +48 600 95 35 72 |
| miloszek_at_nospam_fido.net.org.pl 2:484/2.47 on fidonet |
|-----------------------------------------------------|

========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!lublin.pl!uw.edu.pl!news.pw.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: ATMega8 + asembler
Date: Sun, 09 May 2004 13:08:28 +0200


Pewnego dnia Krzy$ przemówił ludzkim głosem:

http://www.atmel.com/dyn/resources/prod_documents/doc0938.pdf

ale doszedlem dotad i nie za bardzo wiem co dalej..
gdybys mogl podpowiedziec bylbym wdzieczny


No to może zacznę od początku. W nocie masz opisany algorytm konwersji,
ale nie musisz go sam implementować. Możesz ściągnąć gotową funkcję ze
strony atmela, albo jeśli masz zainstalowane avrstudio to znajdziesz ją
w pliku avr204.asm.

Konwersję wywołujesz tak:

ldi fbinL,low(12345) ; 12345 to przykładowa liczba
ldi fbinH,high(12345)
rcall Bin2BCD16 ; tu wywołujesz konwersję

teraz trzeba rozpakować liczby po konwersji, dodać do każdej kod ascii 0

Najpierw wysyłasz najstarszą cyfrę:

ldi temp,'0' ;
add temp,tBCD2
rcall WyslijNaLCD ;

Potem 2 i 3 w kolejności:

mov temp,tBCD1
swap temp ; zamien polowy bajtow
andi temp,$0f ; zostaw tylko połówkę
subi temp,(-'0') ; dodaj kod ascii 0
rcall WyslijNaLCD
mov temp,tBCD1 ; to samo dla młodszej tetrady
andi temp,$0f
subi temp,(-'0')
rcall WyslijNaLCD

Dla cyfry 4 i 5 blok jest identyczny jak dla 2 i 3, musisz tylko zmienić
tBCD1 na tBCD0.



--
*Warning*: Dates in Calendar are closer than they appear.

### /mail: bzb<at>poczta<dot>onet<dot>pl/ ###


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzy$" <kchrisk1_at_nospam_poczta.onet.pl>
Subject: Re: ATMega8 + asembler
Date: Sun, 9 May 2004 14:55:40 +0200




Konwersję wywołujesz tak:

ldi fbinL,low(12345) ; 12345 to przykładowa liczba
ldi fbinH,high(12345)
rcall Bin2BCD16 ; tu wywołujesz konwersję


Ale jezeli ja mam taka sytuacje ze odbieram z przetwornika wartosc 16bitowa
jest ona zapisana jako dodeb1 - (MSB) i dodeb2 - (LSB)
to jak mam uzyc tej funkcji??
wpisalem tak:

.include"avr204.asm" ; zalaczylem mu ten plik z tym ze zmienilem w nim
.include "8515def.inc" na .include "m8def.inc"
....
ldi fbinL,low(dodeb2) ; przy kompilacji wywala mi tu blad: "undefined
variable referenced"
ldi fbinH,high(dodeb1) ;przy kompilacji wywala mi tu blad: "undefined
variable referenced"
rcall Bin2BCD16 ;

ldi dana,'0' ;
add dana,tBCD2
rcall dana_lcd

mov dana,tBCD1
swap dana ; zamien polowy bajtow
andi dana,$0f ; zostaw tylko połówkę
subi dana,(-'0') ; dodaj kod ascii 0
rcall dana_lcd
mov dana,tBCD1 ; to samo dla młodszej tetrady
andi dana,$0f
subi dana,(-'0')
rcall dana_lcd ;wyslij na lcd

mov dana,tBCD0
swap dana ; zamien polowy bajtow
andi dana,$0f ; zostaw tylko połówkę
subi dana,(-'0') ; dodaj kod ascii 0
rcall dana_lcd
mov dana,tBCD0 ; to samo dla młodszej tetrady
andi dana,$0f
subi dana,(-'0')
rcall dana_lcd ;wyslij na lcd

Co tu jest jeszcze zle??
Dzieki za pomoc
Krzysiek



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.pw.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: ATMega8 + asembler
Date: Sun, 09 May 2004 15:14:25 +0200


Pewnego dnia Krzy$ przemówił ludzkim głosem:

ldi fbinL,low(dodeb2) ; przy kompilacji wywala mi tu blad: "undefined
> ldi fbinH,high(dodeb1) ;przy kompilacji wywala mi tu blad: "undefined

Ja bym wywalił low i high (bo to jest makro które dzieli liczbę ma
młodszy i starszy bajt). A jak masz zadeklarowane dodeb1 i 2 ?

Co tu jest jeszcze zle??

uruchom to w debugerze, wpisz jakieś wartości do dedeb i sprawdź czy działa.


--
*Warning*: Dates in Calendar are closer than they appear.

### /mail: bzb<at>poczta<dot>onet<dot>pl/ ###


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.pw.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: ATMega8 + asembler
Date: Sun, 09 May 2004 15:18:18 +0200


Pewnego dnia Zbych przemówił ludzkim głosem:

ldi fbinL,low(dodeb2) ; przy kompilacji wywala mi tu blad: "undefined

ldi fbinH,high(dodeb1) ;przy kompilacji wywala mi tu blad: "undefined

i jeszcze jedno, jeśli dodeb to komórki pamięci, to użyj mov zamiast ldi.


--
*Warning*: Dates in Calendar are closer than they appear.

### /mail: bzb<at>poczta<dot>onet<dot>pl/ ###


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzy$" <kchrisk1_at_nospam_poczta.onet.pl>
Subject: Re: ATMega8 + asembler
Date: Sun, 9 May 2004 16:09:09 +0200




A jak masz zadeklarowane dodeb1 i 2 ?

Dodeb1 i dodeb2 sa to rejestry zdefiniowane:
.def dodeb1=r21
.def dodeb2=r22

Ja bym wywalił low i high (bo to jest makro które dzieli liczbę ma
młodszy i starszy bajt).
Hmm czyli jak to powinno wygladac, bo juz nie mam pomyslow??




========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.pw.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: ATMega8 + asembler
Date: Sun, 09 May 2004 17:35:29 +0200


Pewnego dnia Krzy$ przemówił ludzkim głosem:

Hmm czyli jak to powinno wygladac, bo juz nie mam pomyslow??

mov fbinL,dodeb2
mov fbinH,dodeb1
rcall Bin2BCD16


--
*Warning*: Dates in Calendar are closer than they appear.

### /mail: bzb<at>poczta<dot>onet<dot>pl/ ###


========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzy$" <kchrisk1_at_nospam_poczta.onet.pl>
Subject: Re: ATMega8 + asembler
Date: Sun, 9 May 2004 23:11:23 +0200


Ok juz wszystko dziala
Dzieki za pomoc!
Krzysiek



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai