Programowy reset AT89C2051



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 31 Jul 2000 09:03:46 +0200
From: Piotr Muller <p.muller_at_nospam_trax.com.pl>
Subject: Programowy reset AT89C2051


Witam,
Może ktoś wie jak wygenerować sygnał resetu w układzie AT89C2051
programowo tak aby był rownoważny z resetem sprzętowym (PIN1) ?

Piotr


Poprzedni Następny
Wiadomość
Spis treści
From: "Olgierd Cybulski" <dechamp_at_nospam_poczta.wp.pl>
Subject: Odp: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 09:46:04 +0200



Witam,
Może ktoś wie jak wygenerować sygnał resetu w układzie AT89C2051
programowo tak aby był rownoważny z resetem sprzętowym (PIN1) ?

Nie ma takiej mozliwosci.
Mozna co najwyzej napisac procedurke (w assemblerze) zostawiajaca
procesor w stanie takim, jak po resecie sprzetowym. Tzn. zablokowac
przerwania, przywrocic startowe wartosci rejestrow SFR (uwaga na
kolejnosc operacji)a na koniec skoczyc pod adres 00h.
Efekt jest taki, jakby nastapil reset sprzetowy. Jedyna roznica
polega na tym, ze przy prawdziwym resecie sprzetowym wszystkie
linie portow zewnetrznych sa ustawiane na 1 jednoczesnie, a
w sytuacji j.w. - kolejno portami. Dobrze napisana procedura
resetu trwa kilkadziesiat cykli procesora.
Poniewaz wiekszosc SFR wymaga po prostu wpisania zera, wystarczy to
zero trzymac w akumulatorze i po kolei ladowac do rejestrow
(oszczedza to miejsce w pamieci rozkazow).

OC


Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 31 Jul 2000 11:02:01 +0200
From: Piotr Muller <p.muller_at_nospam_trax.com.pl>
Subject: Re: Odp: Programowy reset AT89C2051




Olgierd Cybulski wrote:

Witam,
Może ktoś wie jak wygenerować sygnał resetu w układzie AT89C2051
programowo tak aby był rownoważny z resetem sprzętowym (PIN1) ?

Nie ma takiej mozliwosci.
Mozna co najwyzej napisac procedurke (w assemblerze) zostawiajaca
procesor w stanie takim, jak po resecie sprzetowym. Tzn. zablokowac
przerwania, przywrocic startowe wartosci rejestrow SFR (uwaga na
kolejnosc operacji)a na koniec skoczyc pod adres 00h.
Efekt jest taki, jakby nastapil reset sprzetowy. Jedyna roznica
polega na tym, ze przy prawdziwym resecie sprzetowym wszystkie
linie portow zewnetrznych sa ustawiane na 1 jednoczesnie, a
w sytuacji j.w. - kolejno portami. Dobrze napisana procedura
resetu trwa kilkadziesiat cykli procesora.
Poniewaz wiekszosc SFR wymaga po prostu wpisania zera, wystarczy to
zero trzymac w akumulatorze i po kolei ladowac do rejestrow
(oszczedza to miejsce w pamieci rozkazow).

OC

Ok.
Wszystkie z wyżej wymienionych czynności już zrobiłem,
przepisałem wartości startowe do rejestrów SFR, wykasowałem pamięć
RAM skoczyłem pod adres programu 0000H, wpisałem wartości
inicjujące w SFR, i wszystko działa poprawnie za wyjątkiem
przerwania szeregowego. Pozostałe przerwania np. INT0 i INT1 sprawdziłem

i napewno działają!
Jaka jest do cholery róznica pomiędzy czynnościami wykonanymi
a faktycznym fizycznym resetem (PIN1)?
Może jest to specyfika układu AT89C2051?
Piotr



Poprzedni Następny
Wiadomość
Spis treści
From: "/\\_MS_/\\" <m__s_at_nospam_go2.pl>
Subject: Re: Odp: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 12:19:59 +0200


Ok.
Wszystkie z wyżej wymienionych czynności już zrobiłem,
przepisałem wartości startowe do rejestrów SFR, wykasowałem pamięć
RAM skoczyłem pod adres programu 0000H, wpisałem wartości
inicjujące w SFR, i wszystko działa poprawnie za wyjątkiem
przerwania szeregowego. Pozostałe przerwania np. INT0 i INT1 sprawdziłem

i napewno działają!
Jaka jest do cholery róznica pomiędzy czynnościami wykonanymi
a faktycznym fizycznym resetem (PIN1)?
Może jest to specyfika układu AT89C2051?
Piotr


Mam pytanie: czy ten sygnal resetu
wystepuje rowniez w trakcie obslugi
przerwania
a jesli tak to jak konczysz wtedy
to przerwanie?

--
_ _
||\_/||
|| S || m__s_at_nospam_go2.pl









--
25MB e-mail, 10MB WWW, PHP, Perl, SSI - WEB Pack - http://rubikon.pl

Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 31 Jul 2000 12:51:19 +0200
From: Piotr Muller <p.muller_at_nospam_trax.com.pl>
Subject: Re: Odp: Programowy reset AT89C2051


Tak,
sygnał tzw. resetu programowego może wystąpić podczas przerwania.
Nie kończę przerwania normalnie tzn. RETI lecz inicjuję system od
początku ustawiam Stos, SFR , zeruję pamięć itp., czyli program powinien
zacząć pracę tak jak po resecie sprzętowym.
Moim zdaniem wszystko powinno być ok.
Na nóżce resetu sprzetowego PIN 1 jest cały czas stan niski (nieaktywny).
Piotr

/\\ MS_\\ wrote:

Ok.
Wszystkie z wyżej wymienionych czynności już zrobiłem,
przepisałem wartości startowe do rejestrów SFR, wykasowałem pamięć
RAM skoczyłem pod adres programu 0000H, wpisałem wartości
inicjujące w SFR, i wszystko działa poprawnie za wyjątkiem
przerwania szeregowego. Pozostałe przerwania np. INT0 i INT1 sprawdziłem

i napewno działają!
Jaka jest do cholery róznica pomiędzy czynnościami wykonanymi
a faktycznym fizycznym resetem (PIN1)?
Może jest to specyfika układu AT89C2051?
Piotr

Mam pytanie: czy ten sygnal resetu
wystepuje rowniez w trakcie obslugi
przerwania
a jesli tak to jak konczysz wtedy
to przerwanie?

--
> _ _
> ||\_/||
> || S || m__s_at_nospam_go2.pl
>
> --
> 25MB e-mail, 10MB WWW, PHP, Perl, SSI - WEB Pack - http://rubikon.pl


Poprzedni Następny
Wiadomość
Spis treści
From: "Olgierd Cybulski" <dechamp_at_nospam_poczta.wp.pl>
Subject: Odp: Odp: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 13:00:41 +0200



Użytkownik Piotr Muller :

Tak,
sygnał tzw. resetu programowego może wystąpić podczas przerwania.
Nie kończę przerwania normalnie tzn. RETI lecz inicjuję system od
początku ustawiam Stos, SFR , zeruję pamięć itp., czyli program powinien
zacząć pracę tak jak po resecie sprzętowym.
Moim zdaniem wszystko powinno być ok.
Na nóżce resetu sprzetowego PIN 1 jest cały czas stan niski (nieaktywny).
Piotr

Każdy procesor ma zabezpieczenie przed ponownym uruchomieniem
obslugi tego samego przerwania (gdy jest ono juz obslugiwane).
Jest cos takiego jak znacznik obslugi przerwania, nie pamietam,
czy w 51 jest on wprost dostepny, ale na pewno jest tez znacznik
zgloszenia przerwania. Jesli sie nie stosuje RETI, trzeba po
zablokowaniu przerwan skasowac te znaczniki "recznie". Inaczej
procesor "mysli" ze nadal obsluguje przerwanie, nawet po zrobieniu
porzadku ze stosem.
OC


Poprzedni Następny
Wiadomość
Spis treści
From: "Stanislaw Sidor" <sts_at_nospam_qq.elcompzu.com.pl>
Subject: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 13:14:45 +0200


On the news Olgierd Cybulski <dechamp_at_nospam_poczta.wp.pl> wrote:

Każdy procesor ma zabezpieczenie przed ponownym uruchomieniem
obslugi tego samego przerwania (gdy jest ono juz obslugiwane).

Eeee tam. '51 jest wyjatkiem :)

Jest cos takiego jak znacznik obslugi przerwania, nie pamietam,
czy w 51 jest on wprost dostepny, ale na pewno jest tez znacznik
zgloszenia przerwania. Jesli sie nie stosuje RETI, trzeba po
zablokowaniu przerwan skasowac te znaczniki "recznie". Inaczej
procesor "mysli" ze nadal obsluguje przerwanie, nawet po zrobieniu
porzadku ze stosem.

A gdzie masz znaczniki obslugi/zgloszenia przerwan INT1, INT0 czy od zegarow ?

(STS)


Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 31 Jul 2000 13:37:49 +0200
From: Piotr Muller <p.muller_at_nospam_trax.com.pl>
Subject: Re: Programowy reset AT89C2051




Stanislaw Sidor wrote:

On the news Olgierd Cybulski <dechamp_at_nospam_poczta.wp.pl> wrote:

Każdy procesor ma zabezpieczenie przed ponownym uruchomieniem
obslugi tego samego przerwania (gdy jest ono juz obslugiwane).

Eeee tam. '51 jest wyjatkiem :)

Jest cos takiego jak znacznik obslugi przerwania, nie pamietam,
czy w 51 jest on wprost dostepny, ale na pewno jest tez znacznik
zgloszenia przerwania. Jesli sie nie stosuje RETI, trzeba po
zablokowaniu przerwan skasowac te znaczniki "recznie". Inaczej
procesor "mysli" ze nadal obsluguje przerwanie, nawet po zrobieniu
porzadku ze stosem.

A gdzie masz znaczniki obslugi/zgloszenia przerwan INT1, INT0 czy od zegarow ?

(STS)

Znaczniki te sa ustawiane po skoku do adresu 0000h przy inicjalizacji systemu.



Poprzedni Następny
Wiadomość
Spis treści
From: "Stanislaw Sidor" <sts_at_nospam_qq.elcompzu.com.pl>
Subject: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 14:31:26 +0200


On the news Piotr Muller <p.muller_at_nospam_trax.com.pl> wrote:

Znaczniki te sa ustawiane po skoku do adresu 0000h przy inicjalizacji
systemu.

Powiedzmy, ale czy sa dostepne programowo ?

P.S. Trudno dzis mowic o procesorze '51 jak kazda firma ma troche inne jego
jadro i niektore mikrofunkcje tez sie roznia na poszczegolnych jego wersjach.
Juz lepiej mowic o procesorze programowo(assemblerowo) zgodnym z '51 i to w
zakresie funkcji ogolnie udokumentowanych.

(STS)


Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 31 Jul 2000 14:44:51 +0200
From: Piotr Muller <p.muller_at_nospam_trax.com.pl>
Subject: Re: Programowy reset AT89C2051




Stanislaw Sidor wrote:

On the news Piotr Muller <p.muller_at_nospam_trax.com.pl> wrote:

Znaczniki te sa ustawiane po skoku do adresu 0000h przy inicjalizacji
systemu.

Powiedzmy, ale czy sa dostepne programowo ?

Tak są dostępne programowo.



P.S. Trudno dzis mowic o procesorze '51 jak kazda firma ma troche inne jego
jadro i niektore mikrofunkcje tez sie roznia na poszczegolnych jego wersjach.
Juz lepiej mowic o procesorze programowo(assemblerowo) zgodnym z '51 i to w
zakresie funkcji ogolnie udokumentowanych.

(STS)

I tu jest racja faktycznie są jakieś różnice nieudokumentowane przez producenta
bo dlaczego przerwanie INT0 i INT1 bez problemów działają a przerwanie RS
nie działa przy braku fizycznego resetu?
Piotr


Poprzedni Następny
Wiadomość
Spis treści
From: "/\\_MS_/\\" <m__s_at_nospam_go2.pl>
Subject: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 14:52:41 +0200


I tu jest racja faktycznie są jakieś różnice nieudokumentowane przez
producenta
bo dlaczego przerwanie INT0 i INT1 bez problemów działają a przerwanie RS
nie działa przy braku fizycznego resetu?
Piotr
A jak ustawiales priorytety przerwan int0 , int1 , i rs232 ?

--
_ _
||\_/||
|| S || m__s_at_nospam_go2.pl








--
25MB e-mail, 10MB WWW, PHP, Perl, SSI - WEB Pack - http://rubikon.pl

Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 31 Jul 2000 15:18:27 +0200
From: Piotr Muller <p.muller_at_nospam_trax.com.pl>
Subject: Re: Programowy reset AT89C2051




/\\ MS_\\ wrote:

I tu jest racja faktycznie są jakieś różnice nieudokumentowane przez
producenta
bo dlaczego przerwanie INT0 i INT1 bez problemów działają a przerwanie RS
nie działa przy braku fizycznego resetu?
Piotr
A jak ustawiales priorytety przerwan int0 , int1 , i rs232 ?

--
> _ _
> ||\_/||
> || S || m__s_at_nospam_go2.pl
>
> --
> 25MB e-mail, 10MB WWW, PHP, Perl, SSI - WEB Pack - http://rubikon.pl

INT0 i INT1 wyższy, reszta normalny.
Piotr


Poprzedni Następny
Wiadomość
Spis treści
From: "/\\_MS_/\\" <m__s_at_nospam_go2.pl>
Subject: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 17:09:02 +0200


A jak ustawiales priorytety przerwan
int0 , int1 , i rs232 ?

INT0 i INT1 wyższy, reszta normalny.
Piotr

Słuchaj , z tego co wiem to sa jakies
znaczniki
niedostepne dla programisty sluzace do
informacji o
priorytecie wykonywanych przerwan (ale
nie te ustawiane
w rej IP) Chodzi o jakis mechanizm
niezezwalania na ponowne
uruchomienie przerwania wlasnie
obslugiwanego
Cytat z ksiazki Mikrokontrolery
jednoukladowe rodziny 51
Stareckiego:

RETI:
Powrot z procedury przerwania[...]
.Przywracana jest mozliwosc
obslugi przerwan o priorytecie takim
samym jak przed wystapieniem
przerwania ...

Jesli wyjscie z przerwania nie jest
rozkazem RETI
to nie jest zerowany znacznik
priorytetu
Podejrzewam , ze jesli zamienilbys
priorytety
UARTa i ktoregos z INT (uart na wyzszy)
to nie chodzilby INT

Proponuje sprobowac kod proponowany
wczesniej
Jest to wywolanie rozkazu RETI na adres
00Hex
_ _
||\_/||
|| S || m__s_at_nospam_go2.pl





--
Przyznajemy się do niskich cen - http://rubikon.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Arek Karas" <karas_at_nospam_hbury.com>
Subject: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 18:18:27 GMT


A moze sprobuj z zewnetrznym watchdogiem.
Jak chcesz zresetowac procesor to robisz petle nieskonczona, nie zerowany
watchdog zalatwia reszte.

AK

/\ MS_\ <m__s_at_nospam_go2.pl> wrote in message
news:8m44j2$f85$1_at_nospam_aquarius.webcorp.com.pl...
A jak ustawiales priorytety przerwan
int0 , int1 , i rs232 ?

INT0 i INT1 wyższy, reszta normalny.
Piotr

Słuchaj , z tego co wiem to sa jakies
znaczniki
niedostepne dla programisty sluzace do
informacji o
priorytecie wykonywanych przerwan (ale
nie te ustawiane
w rej IP) Chodzi o jakis mechanizm
niezezwalania na ponowne
uruchomienie przerwania wlasnie
obslugiwanego
Cytat z ksiazki Mikrokontrolery
jednoukladowe rodziny 51
Stareckiego:

RETI:
Powrot z procedury przerwania[...]
.Przywracana jest mozliwosc
obslugi przerwan o priorytecie takim
samym jak przed wystapieniem
przerwania ...

Jesli wyjscie z przerwania nie jest
rozkazem RETI
to nie jest zerowany znacznik
priorytetu
Podejrzewam , ze jesli zamienilbys
priorytety
UARTa i ktoregos z INT (uart na wyzszy)
to nie chodzilby INT

Proponuje sprobowac kod proponowany
wczesniej
Jest to wywolanie rozkazu RETI na adres
00Hex
_ _
||\_/||
|| S || m__s_at_nospam_go2.pl





--
> Przyznajemy się do niskich cen - http://rubikon.pl



Poprzedni Następny
Wiadomość
Spis treści
From: "Stanislaw Sidor" <sts_at_nospam_qq.elcompzu.com.pl>
Subject: Re: Programowy reset AT89C2051
Date: Tue, 1 Aug 2000 00:13:43 +0200


On the news Arek Karas <karas_at_nospam_hbury.com> wrote:
A moze sprobuj z zewnetrznym watchdogiem.
Jak chcesz zresetowac procesor to robisz petle nieskonczona, nie zerowany
watchdog zalatwia reszte.

Po co petle. Wpisac w PCON rozkaz Power-Down i procesorek grzecznie i w
spokoju poczeka nic nie robiac na restart.

(STS)


Poprzedni Następny
Wiadomość
Spis treści
From: "Stanislaw Sidor" <sts_at_nospam_qq.elcompzu.com.pl>
Subject: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 15:42:25 +0200


On the news /\ MS_\ <m__s_at_nospam_go2.pl> wrote:

A jak ustawiales priorytety przerwan int0 , int1 , i rs232 ?

BTW, przestancie pisac, ze '51 ma RS232 !!!
Specyfikacje RS232 mozecie osobno poczytac, a '51 ma co najwyzej dupleksowy
port transmisji asychronicznej i nic wiecej.

(STS)


Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 31 Jul 2000 16:06:10 +0200
From: Piotr Muller <p.muller_at_nospam_trax.com.pl>
Subject: Re: Programowy reset AT89C2051




Stanislaw Sidor wrote:

On the news /\ MS_\ <m__s_at_nospam_go2.pl> wrote:

A jak ustawiales priorytety przerwan int0 , int1 , i rs232 ?

BTW, przestancie pisac, ze '51 ma RS232 !!!
Specyfikacje RS232 mozecie osobno poczytac, a '51 ma co najwyzej dupleksowy
port transmisji asychronicznej i nic wiecej.

(STS)

Ok. nie jest to RS232 użyłem tu skrótu myślowego jest to
port transmisji asynchronicznej ale i synchronicznej !



Poprzedni Następny
Wiadomość
Spis treści
From: "Stanislaw Sidor" <sts_at_nospam_qq.elcompzu.com.pl>
Subject: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 17:35:30 +0200


On the news Piotr Muller <p.muller_at_nospam_trax.com.pl> wrote:

Ok. nie jest to RS232 użyłem tu skrótu myślowego jest to
port transmisji asynchronicznej ale i synchronicznej !

Ta synchroniczna to 'produkt uboczny' :)

(STS)


Poprzedni Następny
Wiadomość
Spis treści
From: "Olgierd Cybulski" <dechamp_at_nospam_poczta.wp.pl>
Subject: Odp: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 17:42:01 +0200



Użytkownik Piotr Muller :

I tu jest racja faktycznie są jakieś różnice nieudokumentowane przez producenta
bo dlaczego przerwanie INT0 i INT1 bez problemów działają a przerwanie RS
nie działa przy braku fizycznego resetu?
Piotr

Piotrze, troche pokory. Nie wiem, dlaczego cos Ci nie dziala,
ale nie sadze, zebys dokopal sie do "nieudokumentowanych roznic".
Przede wszystkim zauwaz, ze przerwania od portu szeregowego sa inaczej
traktowane, niz przerwania zewnetrzne - znacznik zgloszenia przerwania
(RI, TI) nie jest kasowany przez RETI tylko musi byc kasowany programowo.
Jak juz pisal /\ MS_\ , jesli chcesz zasymulowac reset z wnetrza
obslugi przerwania (jakiegokolwiek), to musisz to zrobic przez RETI
z podmienionym adresem powrotu odlozonym na stosie. Inaczej
mozesz sobie odtwarzac wszystkie SFRy, a procesor i tak bedzie
myslal, ze obsluguje przerwanie.
Poza tym malo sensowne jest selektywne zerowanie tylko tych bitow
w rejestrach SFR, ktore cie interesuja. Rozkaz czyszczenia bitu
trwa tyle samo, co rozkaz zerowania calego rejestru, lepiej jest
zatem napisac ogolna procedure symulujaca pelny reset.
Wez tabelke startowych wartosci AT89C2051 (na stronach ATMELa znajdziesz PDF)
i je po prostu w przemyslanej kolejnosci wpisz do rejestrow -
zadziala na pewno, jesli nie jestes pewien kolejnosci, zrob
to samo dwa razy i mozesz spac spokojnie.
OC


Poprzedni Następny
Wiadomość
Spis treści
From: "Olgierd Cybulski" <dechamp_at_nospam_poczta.wp.pl>
Subject: Odp: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 17:26:26 +0200



Użytkownik Stanislaw Sidor :

Każdy procesor ma zabezpieczenie przed ponownym uruchomieniem
obslugi tego samego przerwania (gdy jest ono juz obslugiwane).

Eeee tam. '51 jest wyjatkiem :)

Nie jest. Gdyby nie bylo takich zabezpieczen, byloby mozliwe
zaiterowanie przerwania. Tymczasem nawet gdy zgloszenie
przerwania zostanie powtorzone, jest ono ignorowane do
czasu napotkania rozkazu RETI.

Jest cos takiego jak znacznik obslugi przerwania, nie pamietam,
czy w 51 jest on wprost dostepny, ale na pewno jest tez znacznik
zgloszenia przerwania. Jesli sie nie stosuje RETI, trzeba po
zablokowaniu przerwan skasowac te znaczniki "recznie". Inaczej
procesor "mysli" ze nadal obsluguje przerwanie, nawet po zrobieniu
porzadku ze stosem.

A gdzie masz znaczniki obslugi/zgloszenia przerwan INT1, INT0 czy od zegarow ?

Znaczniki zgloszenia przerwania - IE0 (TCON.1), IE1 (TCON.3) dla zewnetrznych,
TF0 (TCON.5), TF1 (TCON.7) dla zegarow, TI (SCON.1) , RI (SCON.0) dla serial.
Znaczniki te sa ustawiane automatycznie gdy zostanie wykryta obecnosc
sygnalu zglaszajacego przerwanie (czy to zewn., czy to wewn.) i kasowane
rowniez automatycznie (z wyjatkiem TI,RI).
Oprocz tego wszystkie te znaczniki mozna ustawiac/kasowac programowo,
w szczegolnosci w ten sposob mozna spowodowac (zasymulowac) przerwanie
na drodze czysto software'owej.

Co do znacznikow obslugi przerwania - procesor nie wie, jakie dokladnie
przerwanie jest obslugiwane (bo to nie jest istotne), liczy sie
tylko priorytet. Znaczniki te, tzw. przerzutniki priorytetow
(osobne dla kazdego priorytetu, czyli razem dwa :-) sa niedostepne
dla uzytkownika, tzn. nie sa udostepniane w zadnym SFR.
Ale wierz mi, gdyby ich nie bylo, procesor by nie mogl dzialac :-)

A teraz zwracam sie do kolegi Mullera - nie wiedzialem wczesniej,
ze chodzi Ci o mozliwosc symulowania resetu z wnetrza procedury
obslugi przerwania. Trzeba bylo tak od razu napisac.
Wobec powyzszego jedynym sensownym rozwiazaniem problemu
jest to, co proponuje kolega /\ MS_\ (co to za pseudo,
klawiature mozna polamac :-), cytuje :
mov acc,#0
push acc
push acc
reti
Symuluje to powrot z obslugi przerwania, z tym, ze skok jest pod 00h.
OC


Poprzedni Następny
Wiadomość
Spis treści
From: "Stanislaw Sidor" <sts_at_nospam_qq.elcompzu.com.pl>
Subject: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 17:42:58 +0200


On the news Olgierd Cybulski <dechamp_at_nospam_poczta.wp.pl> wrote:

Eeee tam. '51 jest wyjatkiem :)

Nie jest. Gdyby nie bylo takich zabezpieczen, byloby mozliwe
zaiterowanie przerwania. Tymczasem nawet gdy zgloszenie
przerwania zostanie powtorzone, jest ono ignorowane do
czasu napotkania rozkazu RETI.

Mam u siebie '32-ki Intela, ktore spokojnie to maja gdzies.
Przerwania od zegara wchodza jedna na drugie, gdy przerwanie to ma programowo
ustawiony wysoki priorytet (PT0).

Co do znacznikow obslugi przerwania - procesor nie wie, jakie dokladnie
przerwanie jest obslugiwane (bo to nie jest istotne), liczy sie
tylko priorytet. Znaczniki te, tzw. przerzutniki priorytetow
(osobne dla kazdego priorytetu, czyli razem dwa :-) sa niedostepne
dla uzytkownika, tzn. nie sa udostepniane w zadnym SFR.
Ale wierz mi, gdyby ich nie bylo, procesor by nie mogl dzialac :-)

Sprawdz wiec jak sie zachowa przerwanie zegarowe Timer0 z ustawionym wysokim
prorytetem.
Moze rozne '51 robia to inaczej ?

(STS)


Poprzedni Następny
Wiadomość
Spis treści
From: "Olgierd Cybulski" <dechamp_at_nospam_poczta.wp.pl>
Subject: Odp: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 17:56:48 +0200



Użytkownik Stanislaw :

Mam u siebie '32-ki Intela, ktore spokojnie to maja gdzies.
Przerwania od zegara wchodza jedna na drugie, gdy przerwanie to ma programowo
ustawiony wysoki priorytet (PT0).

Zauwaz, ze mowilismy o kontrolerach AT89c2051.
Nie wiem, co to za 32-ki, ale nie wydaje mi sie, zeby to mialo
cos wspolnego z rodzina MCS-51. No chyba, ze "pewne podobienstwa".

Co do znacznikow obslugi przerwania - procesor nie wie, jakie dokladnie
przerwanie jest obslugiwane (bo to nie jest istotne), liczy sie
tylko priorytet. Znaczniki te, tzw. przerzutniki priorytetow
(osobne dla kazdego priorytetu, czyli razem dwa :-) sa niedostepne
dla uzytkownika, tzn. nie sa udostepniane w zadnym SFR.
Ale wierz mi, gdyby ich nie bylo, procesor by nie mogl dzialac :-)

Sprawdz wiec jak sie zachowa przerwanie zegarowe Timer0 z ustawionym wysokim
prorytetem.
Moze rozne '51 robia to inaczej ?

Nie wiem, o czym mowisz. Watpie, zeby 89C51 i podobne 8-bitowki
mialy takie bledy, przynajmniej ja sie nie natknalem, przerzutnik
priorytetu jest zwalniany dopiero po RETI i mozesz co najwyzej spowodowac
wykonywanie przerwania w kolko (zaraz po RETI znow sie zaczyna przerwanie),
ale nie mozesz niczym legalnie przerwac przerwania na wysokim priorytecie.
Jesli jest jakas inna "'51-ka", to po pierwsze nie jest ona kompatybilna
z MCS-51, a po drugie, producent z pewnoscia o tym wie i nie jest
to niezamierzony efekt - moze w takich procesorach trzeba recznie
wstawiac CLR EA na poczatku procedur obslugi przerwan priorytetowych ?

O.C.


Poprzedni Następny
Wiadomość
Spis treści
From: jfox_at_nospam_friko6.onet.pl (J.F.)
Subject: Re: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 17:43:15 GMT


On Mon, 31 Jul 2000 17:26:26 +0200, Olgierd Cybulski wrote:
Użytkownik Stanislaw Sidor :
Każdy procesor ma zabezpieczenie przed ponownym uruchomieniem
obslugi tego samego przerwania (gdy jest ono juz obslugiwane).

Eeee tam. '51 jest wyjatkiem :)

Nie jest. Gdyby nie bylo takich zabezpieczen, byloby mozliwe
zaiterowanie przerwania.

No i co w tym zlego ? Rola programisty w tym zeby nie bylo to
problemem.
Zaraz - x86 jak ma? Chyba da sie w przerwaniu uzyc EI i przyjac
nastepne.. 8080 i 8085 ? Pamiec mi juz szwankuje, ale tam chyba
nie bylo RETI ?

J.


Poprzedni Następny
Wiadomość
Spis treści
From: "/\\_MS_/\\" <m__s_at_nospam_go2.pl>
Subject: [offtopic] Do kol. O. Cybulskiego
Date: Mon, 31 Jul 2000 19:52:59 +0200


Mam prosbe tak przy okazji
Do Outlooka jest latka poprawiajaca
skrot Odp na Re
Dzieki niej inne newsreadery nie
glupieja
i nie ma tematu
Re: Odp: Odp: Odp: Programowy reset
AT89C2051

http://windows.online.pl/programy/prog06
.htm

_ _
||\_/||
|| S || m__s_at_nospam_go2.pl




--
Własna strona WWW, w 5 minut, bez znajomości HTML - http://wizytowka.pl

Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 31 Jul 2000 13:15:38 +0200
From: Piotr Muller <p.muller_at_nospam_trax.com.pl>
Subject: Re: Odp: Odp: Programowy reset AT89C2051




Olgierd Cybulski wrote:

Użytkownik Piotr Muller :

Tak,
sygnał tzw. resetu programowego może wystąpić podczas przerwania.
Nie kończę przerwania normalnie tzn. RETI lecz inicjuję system od
początku ustawiam Stos, SFR , zeruję pamięć itp., czyli program powinien
zacząć pracę tak jak po resecie sprzętowym.
Moim zdaniem wszystko powinno być ok.
Na nóżce resetu sprzetowego PIN 1 jest cały czas stan niski (nieaktywny).
Piotr

Każdy procesor ma zabezpieczenie przed ponownym uruchomieniem
obslugi tego samego przerwania (gdy jest ono juz obslugiwane).
Jest cos takiego jak znacznik obslugi przerwania, nie pamietam,
czy w 51 jest on wprost dostepny, ale na pewno jest tez znacznik
zgloszenia przerwania. Jesli sie nie stosuje RETI, trzeba po
zablokowaniu przerwan skasowac te znaczniki "recznie". Inaczej
procesor "mysli" ze nadal obsluguje przerwanie, nawet po zrobieniu
porzadku ze stosem.
OC

Tak prawda sa to znaczniki przerwania zewnętrznego TI i RI trzeba je
wyzerować.


Poprzedni Następny
Wiadomość
Spis treści
From: "Stanislaw Sidor" <sts_at_nospam_qq.elcompzu.com.pl>
Subject: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 14:33:13 +0200


On the news Piotr Muller <p.muller_at_nospam_trax.com.pl> wrote:

Tak prawda sa to znaczniki przerwania zewnętrznego TI i RI trzeba je
wyzerować.

To sie tyczy lacza szeregowego, ale co do przerwan od zegarow to dostepnych
znacznikow brak.

(STS)


Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 31 Jul 2000 14:41:36 +0200
From: Piotr Muller <p.muller_at_nospam_trax.com.pl>
Subject: Re: Programowy reset AT89C2051




Stanislaw Sidor wrote:

On the news Piotr Muller <p.muller_at_nospam_trax.com.pl> wrote:

Tak prawda sa to znaczniki przerwania zewnętrznego TI i RI trzeba je
wyzerować.

To sie tyczy lacza szeregowego, ale co do przerwan od zegarow to dostepnych
znacznikow brak.

(STS)

Ależ oczywiści, że są w jednym z rejestrów SFR, którego wartość jest zmieniana
przy restarcie programu od adresu 0000H.
Piotr


Poprzedni Następny
Wiadomość
Spis treści
From: "Stanislaw Sidor" <sts_at_nospam_qq.elcompzu.com.pl>
Subject: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 15:40:50 +0200


On the news Piotr Muller <p.muller_at_nospam_trax.com.pl> wrote:

To sie tyczy lacza szeregowego, ale co do przerwan od zegarow to
dostepnych
znacznikow brak.

(STS)

Ależ oczywiści, że są w jednym z rejestrów SFR, którego wartość jest
zmieniana
przy restarcie programu od adresu 0000H.

Chetnie poznam w ktorym.

(STS)


Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 31 Jul 2000 16:11:54 +0200
From: Piotr Muller <p.muller_at_nospam_trax.com.pl>
Subject: Re: Programowy reset AT89C2051




Stanislaw Sidor wrote:

On the news Piotr Muller <p.muller_at_nospam_trax.com.pl> wrote:

To sie tyczy lacza szeregowego, ale co do przerwan od zegarow to
dostepnych
znacznikow brak.

(STS)

Ależ oczywiści, że są w jednym z rejestrów SFR, którego wartość jest
zmieniana
przy restarcie programu od adresu 0000H.

Chetnie poznam w ktorym.

(STS)

Rejestr IE pięć najmłodszych bitów! (Port szeregowy, dwa liczniki,
dwa przerwania zwenętrzne). Czy się mylę ?
Piotr



Poprzedni Następny
Wiadomość
Spis treści
From: "/\\_MS_/\\" <m__s_at_nospam_go2.pl>
Subject: Re: Odp: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 13:12:06 +0200


Każdy procesor ma zabezpieczenie przed ponownym uruchomieniem
obslugi tego samego przerwania (gdy jest ono juz obslugiwane).
Jest cos takiego jak znacznik obslugi przerwania, nie pamietam,
czy w 51 jest on wprost dostepny, ale na pewno jest tez znacznik
zgloszenia przerwania. Jesli sie nie stosuje RETI, trzeba po
zablokowaniu przerwan skasowac te znaczniki "recznie". Inaczej
procesor "mysli" ze nadal obsluguje przerwanie, nawet po zrobieniu
porzadku ze stosem.
OC

Wlasnie o tym myslalem zadajac pytanie
A jesli nie wystarcza skasowanie
znacznika przerwania to
sprobuj skok pod adres 0000Hex
zastapic sekwencja :
mov acc,#0
push acc
push acc
reti
moze pomoze

--
_ _
||\_/||
|| S || m__s_at_nospam_go2.pl








--
25MB e-mail, 10MB WWW, PHP, Perl, SSI - WEB Pack - http://rubikon.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Olgierd Cybulski" <dechamp_at_nospam_poczta.wp.pl>
Subject: Odp: Odp: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 12:50:28 +0200



Użytkownik Piotr Muller :

Mozna co najwyzej napisac procedurke (w assemblerze) zostawiajaca
procesor w stanie takim, jak po resecie sprzetowym. Tzn. zablokowac
przerwania, przywrocic startowe wartosci rejestrow SFR (uwaga na
kolejnosc operacji)a na koniec skoczyc pod adres 00h.

[...]

Ok.
Wszystkie z wyżej wymienionych czynności już zrobiłem,
przepisałem wartości startowe do rejestrów SFR, wykasowałem pamięć
RAM skoczyłem pod adres programu 0000H, wpisałem wartości
inicjujące w SFR, i wszystko działa poprawnie za wyjątkiem
przerwania szeregowego. Pozostałe przerwania np. INT0 i INT1 sprawdziłem

i napewno działają!
Jaka jest do cholery róznica pomiędzy czynnościami wykonanymi
a faktycznym fizycznym resetem (PIN1)?

Przede wszystkim uważaj z cholerowaniem - to jest grupa dyskusyjna,
pretensje kieruj do siebie lub do firmy Atmel :-)
Jak już pisałem, istotne są nie tylko wartości wpisywane do SFR,
ale także kolejność wpisywania. W szczególności przerwania
trzeba zablokować na samym początku (żeby procedura ich obslugi
nie zakłóciła zerowania rejestrów). Później trzeba zatrzymać liczniki,
wyzerować je (odwrócenie tej kolejności powoduje błędy !), a
następnie wyzerować wszystkie bity zgłoszenia przerwań czekających
na obsługę (pomimo zablokowania przerwań bity te mogą być
ustawione). Wymyślenie właściwej kolejności kasowania rejestrow może
być czasochłonne, więc jeśli brak Ci czasu na wnikanie w szczegoly,
po prostu powtórz dwukrotnie całą procedurę zerowania (z wyjątkiem,
oczywiście, koncowego skoku pod 00h), wówczas kolejność instrukcji przestanie
mieć znaczenie (no chyba, ze o jakims rejestrze zupelnie zapomnisz).

P.S. O ile pamietam reset wcale nie kasuje pamieci RAM.

O.C.


Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 31 Jul 2000 13:11:37 +0200
From: Piotr Muller <p.muller_at_nospam_trax.com.pl>
Subject: Re: Odp: Odp: Programowy reset AT89C2051




Olgierd Cybulski wrote:

Użytkownik Piotr Muller :

Mozna co najwyzej napisac procedurke (w assemblerze) zostawiajaca
procesor w stanie takim, jak po resecie sprzetowym. Tzn. zablokowac
przerwania, przywrocic startowe wartosci rejestrow SFR (uwaga na
kolejnosc operacji)a na koniec skoczyc pod adres 00h.

[...]

Ok.
Wszystkie z wyżej wymienionych czynności już zrobiłem,
przepisałem wartości startowe do rejestrów SFR, wykasowałem pamięć
RAM skoczyłem pod adres programu 0000H, wpisałem wartości
inicjujące w SFR, i wszystko działa poprawnie za wyjątkiem
przerwania szeregowego. Pozostałe przerwania np. INT0 i INT1 sprawdziłem

i napewno działają!
Jaka jest do cholery róznica pomiędzy czynnościami wykonanymi
a faktycznym fizycznym resetem (PIN1)?

Przede wszystkim uważaj z cholerowaniem - to jest grupa dyskusyjna,
pretensje kieruj do siebie lub do firmy Atmel :-)
Jak już pisałem, istotne są nie tylko wartości wpisywane do SFR,
ale także kolejność wpisywania. W szczególności przerwania
trzeba zablokować na samym początku (żeby procedura ich obslugi
nie zakłóciła zerowania rejestrów).

Blokuje wszystkie poprzez EA

Później trzeba zatrzymać liczniki,
wyzerować je (odwrócenie tej kolejności powoduje błędy !),

Nie zatrzymuje liczników, zeruje je przy inicjalizacji systemu!

a
następnie wyzerować wszystkie bity zgłoszenia przerwań czekających
na obsługę (pomimo zablokowania przerwań bity te mogą być
ustawione).

Bity aktywności przerwań zeruje przy inicjalizacji systemu.

Wymyślenie właściwej kolejności kasowania rejestrow może
być czasochłonne, więc jeśli brak Ci czasu na wnikanie w szczegoly,
po prostu powtórz dwukrotnie całą procedurę zerowania (z wyjątkiem,
oczywiście, koncowego skoku pod 00h),

Po co dwa razy?

wówczas kolejność instrukcji przestanie
mieć znaczenie (no chyba, ze o jakims rejestrze zupelnie zapomnisz).

Działam na następujących rejestrach: IE, IP, SCON, TMOD, PCON,SP, TCON,
DPTR, PSW, podczas inicjalizacji systemu po skoku pod adres 0000H są
inicjalizowane!



P.S. O ile pamietam reset wcale nie kasuje pamieci RAM.

Tak to prawda.



O.C.


Poprzedni Następny
Wiadomość
Spis treści
From: "Stanislaw Sidor" <sts_at_nospam_qq.elcompzu.com.pl>
Subject: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 13:12:27 +0200


On the news Olgierd Cybulski <dechamp_at_nospam_poczta.wp.pl> wrote:

P.S. O ile pamietam reset wcale nie kasuje pamieci RAM.

Dobrze pamietasz :)
Zerowanie RAMu byloby glupota.

(STS)


Poprzedni Następny
Wiadomość
Spis treści
From: roland <roland_at_nospam_zly.kis.p.lodz.pl>
Subject: Re: Programowy reset AT89C2051
Date: Mon, 31 Jul 2000 14:09:51 GMT




Piotr Muller napisał(a):

Witam,
Może ktoś wie jak wygenerować sygnał resetu w układzie AT89C2051
programowo tak aby był rownoważny z resetem sprzętowym (PIN1) ?

Piotr

moze tak:
Wygenerowac sygnal z dowolnego portu na przerzutnik mono, ktorego
wyjscie jest podpiete do pin1.

Roland


Poprzedni Następny
Wiadomość
Spis treści
Date: Mon, 31 Jul 2000 16:19:49 +0200
From: Piotr Muller <p.muller_at_nospam_trax.com.pl>
Subject: Re: Programowy reset AT89C2051


Bardzo rozsądny pomysł, który brałem pod uwagę, z tym
małym problemem, że barkuje mi wolnych wyjść.
Gdybym wiedział, że wystąpi taki problem zastąpiłbym
AT89C2051 na AT89C51 i po kłopocie, ale teraz jest to
dośc trudne.
Piotr

roland wrote:

Piotr Muller napisał(a):

Witam,
Może ktoś wie jak wygenerować sygnał resetu w układzie AT89C2051
programowo tak aby był rownoważny z resetem sprzętowym (PIN1) ?

Piotr

moze tak:
Wygenerowac sygnal z dowolnego portu na przerzutnik mono, ktorego
wyjscie jest podpiete do pin1.

Roland