Witam,
mam zamiar zrobic sobie mini kompa na procesorze atmega8 do do samochodu z mozlwoscia wykorzystania zainstalowanego w samochodzie TID 10-cio znakowego, na forum temat bylo pare watkow ale akurat pod takiego TIDa i atmege nie bylo jakis rozwiazan, na forum udalo mi sie znalezdz bibliteke ice.lib do zastosowan na '51, probuje ja przetlumaczyc na atmege
ale moja znajomosc asemblera jest w staduim poczatkowym i mam problem z przelumaczenie fragmentu kodu:
;R2 JEST PARAMETREM PROCEDURY
;I ZAWIERA ZNAK DO WYSLANIA
I2c_send:
;mov r2,{znak}'wywolanie
clr c ;zeruj carry flag
mov acc,r2 ;{znak}
;zapisz liczbe do obrubki
rlc acc ;przesun w lewo o jeden bit
MOV C,{psw.0} ;ustaw carry flag tak jak bit parzystosci
jc dalej1 ;jesli carry jest = 1 znaczy że liczba jest nieparzysta wiec nic nie rob z ta liczba Wyswietlacz opla ma kontrole parzystosci nieparzystą
setb acc.0 ;ustawia bit aby byla nieparzysta liczba jedynek
Dalej1:
;acc zawiera daną do wyslania
;mov {znak},acc ;przepisz z acc do znak
mov b,#8 ;powtóż 8 razy wysylanie bitu
Petla:
push acc ;zapisz acc
push b ;zapisz b
;przesuwanie bitow w celu wyodrebnienia jednego do wyslania
djnz b,shifting
sjmp noshifting
Shifting:
rrc a
djnz b,shifting
Noshifting:
anl a,#00000001b
;wysylanie bitu
jnz setsda
clr P1.1 ;Sda=0
sjmp opusc_ustawianie
Setsda:
setb P1.1 ;Sda=1
Opusc_ustawianie:
pop b
pop acc
push b
lcall takt
pop b
djnz b,petla
clr P1.1 ;SDA=0 ack po wyslanym bajcie Sda i Mrq muszą byc na 0 inaczej nie bedzie dzialac
lcall takt
;opuznij o 42us AMENDE
mov r0,#15 ;42us
mov r1,#1
lcall czekaj
ret
jezeli ktos moze mi w tym temacie jakos pomoc to z gory dziekuje
mam zamiar zrobic sobie mini kompa na procesorze atmega8 do do samochodu z mozlwoscia wykorzystania zainstalowanego w samochodzie TID 10-cio znakowego, na forum temat bylo pare watkow ale akurat pod takiego TIDa i atmege nie bylo jakis rozwiazan, na forum udalo mi sie znalezdz bibliteke ice.lib do zastosowan na '51, probuje ja przetlumaczyc na atmege
ale moja znajomosc asemblera jest w staduim poczatkowym i mam problem z przelumaczenie fragmentu kodu:
;R2 JEST PARAMETREM PROCEDURY
;I ZAWIERA ZNAK DO WYSLANIA
I2c_send:
;mov r2,{znak}'wywolanie
clr c ;zeruj carry flag
mov acc,r2 ;{znak}
;zapisz liczbe do obrubki
rlc acc ;przesun w lewo o jeden bit
MOV C,{psw.0} ;ustaw carry flag tak jak bit parzystosci
jc dalej1 ;jesli carry jest = 1 znaczy że liczba jest nieparzysta wiec nic nie rob z ta liczba Wyswietlacz opla ma kontrole parzystosci nieparzystą
setb acc.0 ;ustawia bit aby byla nieparzysta liczba jedynek
Dalej1:
;acc zawiera daną do wyslania
;mov {znak},acc ;przepisz z acc do znak
mov b,#8 ;powtóż 8 razy wysylanie bitu
Petla:
push acc ;zapisz acc
push b ;zapisz b
;przesuwanie bitow w celu wyodrebnienia jednego do wyslania
djnz b,shifting
sjmp noshifting
Shifting:
rrc a
djnz b,shifting
Noshifting:
anl a,#00000001b
;wysylanie bitu
jnz setsda
clr P1.1 ;Sda=0
sjmp opusc_ustawianie
Setsda:
setb P1.1 ;Sda=1
Opusc_ustawianie:
pop b
pop acc
push b
lcall takt
pop b
djnz b,petla
clr P1.1 ;SDA=0 ack po wyslanym bajcie Sda i Mrq muszą byc na 0 inaczej nie bedzie dzialac
lcall takt
;opuznij o 42us AMENDE
mov r0,#15 ;42us
mov r1,#1
lcall czekaj
ret
jezeli ktos moze mi w tym temacie jakos pomoc to z gory dziekuje