['51] nie wychodzi z przerwania po uarcie

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

Reply to
Pawel "O'Pajak
Loading thread data ...

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

Reply to
myrcioch

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

Reply to
Pawel "O'Pajak

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

Reply to
Pawel "O'Pajak

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.