['51] nie wychodzi z przerwania po uarcie

Mar 13, 2006 4 Replies

Powitanko, Pomozcie prosze, bo zaraz ^!#$$! dostane... Programik, gania sobie w petli, ustawione 2 przerwania: od seriala (UARTu) i od timera 0. W IP ustawiony priorytet na seriala. I wszystko fajnie dziala, tzn. timer 0 generuje przerwania jak trzeba, ale jak cos sie wysle do seriala (czyli nastapi od niego przerwanie), to juz z niego nie wychodzi, a timer 0 zatrzymuje sie (?). Oczywiscie jest na koncu obslugi tego przerwania "reti", probowalem nawet w tej obsludze uruchamiac timer 0 na nowo, a procek sie uparl i juz. Na stos wpycham PSW i Acc, zdejmuje na koncu, a on dalej uparty *(&&$@! jego mac. Heeeelp pliiiiz...



Pozdroofka, Pawel Chorzempa


Pawel "O'Pajak" napisal 2006-03-13 16:38:

Flagę scon.1 (ti) lub scon.0 (ri - jeśli dane idą do procesora) - kasujesz?

Tomek

Powitanko,

Tak, pierwszym rozkazem, dopiero potem przepisuje sbufa. Ale juz sobie poradzilem, pomaga odtworzenie TCON, TMOD, PCON, SCON, a wlasciwie wpisanie ich na nowo. Dziala, tylko teraz musze pokombinowac dlaczego obsluga tego przerwania modyfikuje SFRy, ktorych nie powinna ruszac i ktore dokladnie. Albo to wina Bascoma, albo mojej niewiedzy...

Pozdroofka, Pawel Chorzempa

Pawel "O'Pajak" snipped-for-privacy@gazeta.pl napisa³

A sk±d wiesz, ¿e stoi? Z symulatora? Ze sprzêtu? A jak± prodcedurk± odbierasz te dane z portu szeregowego? Nawet w Bascomie ma¿na to zrobic na kilka sposobów, z których czê¶æ nie nadaje siê do przerwañ. Wklej trochê kodu, inaczej nie wiadomo co zrobi³e¶ :)

Pozdrawiam JJJK

Powitanko,

Dochodzenie co robilem w kolejnych etapach jest mozliwe, ale pracochlonne. Byl taki etap, ze symulator pieknie biegal, a rzeczywisty uklad po odebraniu bajtu zamyslal sie na wieki. To, ze siedzial w petli odbioru z RSa wiem z pulapki programowej (cpl p3.7).

Taka mieszanka bascomowo-assemblerowa: If Scon.0 = 1 Then Scon.0 = 0 Lit = Sbuf End If Kompiluje sie na cjnz, mov, itd. a tak lepiej widac co jest co. Jest kilka takich sekwencji przypisujacych sbuf do roznych zmiennych w zaleznosci od "lit"

Wiem, np. input;-)

Na poczatek trzeba ustawic: mov PCON.7,#0 MOV SCON, #&H50'1010000 MOV TH1, #&hFD' 253 (9600bps) MOV TL1, #&hFD' j.w. mov ie,#&B10010010 'wlaczone: ogolne, od seriala i od T0 mov ip,#&H10 'priorytet od seriala

Natomiast w obsludze interrupta od seriala na koncu trzeba powtorzyc: MOV SCON, #&H50 i to wystarczy Za Boga nie wiem dlaczego i dlaczego w terminalu mi po kazdym odebraniu

2 bajtu wyplowa znaczek "|" i cofa kursor (jakies ASCII ponizej 32).

Pozdroofka, Pawel Chorzempa

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required