program w asemblerze

Nov 21, 2003 5 Replies

mo¿ecie powiedzieæ czy poprawnie napisa³em program? ma ustawiaæ bit na P0.0 na 12 godzin, P0.1 na 3 godziny i na 9 godzin wszedzie jedynki. Program ma byæzrealizowany na uP ATMEL 2051. Je¶li poda³em za ma³o informacji to pytajcie bo naprawde pisze program pierwszy raz i jestem laikiem z krwi i ko¶ci :)



"Elektroniczny Sterownik O¶wietlenia Akwarium"



Org 0h



ljmp SEKUNDA



Org 01bh inc r1 reti



Sekunda: Podprogram: setb ea mov tmod,#0 setb et1 setb tr1 clr r1



Tu: cjne r1,#113,TU inc r2 cjne r2,#60,TU inc r3 cjne r3,#60,TU inc r4 ret



Zmiana1 Equ 00111111b Zmiana2 Equ 11111111b Port Equ 01111111b



Dzien: mov p1,#port cjne r4,#12,TU clr r2 clr r3 clr r4 Call Podprogram



Noc: cjne r4,#3,TU XRL p1,#Zmiana1 clr r2 clr r3 clr r4 Call Podprogram



Nic: cjne r4,#9,TU mov p1,#Zmiana2 clr r1 clr r2 clr r3 clr r4 ljmp DZIEN



End



No jak na pierwszy raz to nie¼le. Ale ogólnie jest ¼le.

1) Dopracowaæ przerwania czasowe. Mo¿na wykorzystaæ licznik 16 bitowy do uzyskiwania przerwañ np. co 50msek i w procedurze obs³ugi przerwania umie¶ciæ licznik sekund, min itd. 2) ljmp SEKUNDA ..............koñczy siê "ret" ? 3) i inne drobiazgi.

U¿ytkownik "MatriX" snipped-for-privacy@op.pl napisa³ w wiadomo¶ci news:bpln53$mnf$ snipped-for-privacy@nemesis.news.tpi.pl...

komend± ret koñczy siê PODPROGRAM ¿eby nie lecia³ od pocz±tku wszystkiego tylko odrazu wskoczy³ w kojeljny tryb pracy. timer jest w trybie 0 i ustawi³em przerwania tak, ¿eby zliczy³ mi ich 113 bo wtedy jest sekunda. nie liczy³em czasu trwania cyklów maszynowych bo dok³adno¶æ nie jest najwa¿niejsza.

dlaczego ljmp musi siê koñczyæ ret-em? przecierz to jest skok a nie podprogram. a ret-em wraca siê chyba z podprogramów.

ljmp nie mo¿e siê koñczyæ "ret". W programie twoim jest skok do etykiety :"Sekunda", nastêpnie wykonywana jest pêtla "Tu" i za ni± instrukcja powrotu z podprogramu "ret".

ljmp SEKUNDA ;------------------- Sekunda: ;------------------ Tu: cjne r1,#113,TU ;-------------------- ret

Dlaczego rejestry r1, r2, r3, r4 nie s± zerowane po instrukcjach cjne np.( inc r2 ; clr r1 )? Jaki asembler posiadasz? Najlepiej to zapu¶ciæ to na symulatorze softwarowym. Wyjd± wszystkie b³êdy

U¿ytkownik "MatriX" snipped-for-privacy@op.pl napisa³ w wiadomo¶ci news:bpnftv$b9j$ snipped-for-privacy@atlantis.news.tpi.pl...

ljmp nie mo¿e siê koñczyæ "ret". W programie twoim jest skok do etykiety :"Sekunda", nastêpnie wykonywana jest pêtla "Tu" i za ni± instrukcja powrotu z podprogramu "ret".

ljmp SEKUNDA ;------------------- Sekunda: ;------------------ Tu: cjne r1,#113,TU ;-------------------- ret

Dlaczego rejestry r1, r2, r3, r4 nie s± zerowane po instrukcjach cjne np.( inc r2 ; clr r1 )? Jaki asembler posiadasz? Najlepiej to zapu¶ciæ to na symulatorze softwarowym. Wyjd± wszystkie b³êdy

U¿ytkownik "MatriX" snipped-for-privacy@op.pl napisa³ w wiadomo¶ci news:bpnftv$b9j$ snipped-for-privacy@atlantis.news.tpi.pl...

jakto przecierz po kazdej kolejnej etykiecie zeruje rejestry. je¶li chodzi o ljmp to moge go zast±piæ instrukcj± CALL i powinno byæ dobrze. czy sie myle? i wtedy w SEKUNDA by³aby podprogramem i móg³bym wykonywaæ w niej pêtle. czy sie myle?

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required