Assembler w AVR, odejmowanie

Jan 16, 2007 9 Replies

Witam



Jest sobie kod:



IMPULS: cli in czas,TCNT0 clr temp ;czyszczenie flag signed i negative subi czas,112 brmi ALARM



Problem w tym , że nawet jeśli rejestr liczący timera ma 255, to w wyniku odejmowania dostaje zawsze wynik negatywny :(


Dnia Tue, 16 Jan 2007 10:21:42 +0100, scx napisał(a):

?!?!?!

ldi czas,0xff subi czas,112 I też mam ustawioną flagę "negative"! Od kiedy 255 - 112 < 0?

Aha: AVRStudio 4.12, Attiny12, testuję program we wbudowanym symulatorze

U¿ytkownik "scx" snipped-for-privacy@wu-pe.pe-el> napisa³ w wiadomo¶ci news: snipped-for-privacy@40tude.net...

flaga N ustawiana jest zawsze kiedy w wyniku ustawiony jest najbardziej znaczacy bit ktory stanowi o znaku danej liczby. Jezeli operujesz na liczbach ze znakiem to liczba 255 nie oznacza wcale 255 tylko -127;] zatem

-127-(+112) jak by nie bylo daje ujemna liczbe.

w jaki sposób masz zadeklarowan± zmienna czas? Jest to jeden z rejestrów R16-R31?

i czy przypadkiem zapis nie powinien wygl±daæ tak: subi czas,$112

Pozdrawiam Darek

scx snipped-for-privacy@wu-pe.pe-el> napisał(a):

Hmmm... Traktujesz swoje dane jako liczby bez znaku , a sprawdzasz wskaźniki dla operacji na liczbach ze znakiem , czyli U2.Gdybyś napisał co chcesz osiąnąć , to wtedy - kto wie ;-)

Piotrek

A nie -1?

U¿ytkownik "RoMan Mandziejewicz" snipped-for-privacy@pik-net.pl napisa³ w wiadomo¶ci news: snipped-for-privacy@pik-net.pl...

Masz oczywiscie racje, pomylilem sie i niemam nic na swoje usprawiedliwienie ;-]

pozdrawiam

Jak nie używasz liczb ze znakiem, to sprawdzaj carry, a nie sign.

pozdrawiam

majek

Dnia Tue, 16 Jan 2007 17:30:18 +0100, Marek Wodzinski napisał(a):

i to właśnie jest prawidłowa odpowiedź :P zamiast brmi - brcs

Dziękuję wszystkim za podpowiedzi, a szczególnie Robertowi za uświadomienie mnie w kwestii reprezentacji liczb ujemnych :) I tak dzień po dniu człowiek się mądrzejszy robi :P

Urządzonko już pięknie śmiga - jest to ostrzegacz o przekroczeniu 5000 obrotów silnika + przypominacz o zapięciu pasów. Jutro będzie testowany w naturze, a biurku działa OK.

Dnia 16-01-2007 o 10:40:59 scx snipped-for-privacy@wu-pe.pe-el> napisał(a):

Dorzuce jeszcze od siebie to co sam nie dawno tutaj na grupie uslyszalem: nie ufaj symulatorowi. Ostatnio symulator pokazywal jakies dziwolagi natomiast zaprogramowana atmega dziala prawidlowo. Wiec zalecam ostroznosc.

pozdrawiam

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required