Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

przerwanie co robie źle 89c2051

rdt
-
-
Posty:87
Rejestracja:20 sie 2003, o 18:03
Lokalizacja:100km od Wawy
przerwanie co robie źle 89c2051

Postautor: rdt » 13 lut 2006, o 23:26

Witam
mam pytanko odnośnie kodu :


Dim A As Byte
Config Timer1 = Timer , Mode = 1 , Gate = Internal

Glowny:
On Timer1 Dodawanie Nosave
Enable Interrupts
Enable Timer1
Load Timer1 , 65530
Start Timer1
Do
Cls
Lcd A
Wait 1
Loop

Dodawanie:
Disable Interrupts
Disable Timer1
Stop Timer1
A = A + 1
Wait 1
If A = 20 Then
Lcd "koniec"
End
Else
Goto Glowny
End If


kwestia jest tego typu ze chce sobi na przyklad zobaczyc na wyswietlaczu lcd jak sobie zlicza a jak dojdzie do 20 to ma sie zatrzymac a jest tak ze w rzeczywistości (plytka testowa bascom college AVT2500) to zlicz tylko do 1 i jakby dalej nie bylo przerwania
Ostatnio zmieniony 14 lut 2006, o 08:22 przez rdt, łącznie zmieniany 1 raz.

Awatar użytkownika
Futrzaczek
-
-
Posty:782
Rejestracja:4 gru 2005, o 17:48
Lokalizacja:Piotrków Tryb
Kontaktowanie:

Postautor: Futrzaczek » 14 lut 2006, o 07:16

Po pierwsze: polecam zamiast poleceń GOTO polecenia GOSUB
GOTO nie zawsze mi działają

rdt
-
-
Posty:87
Rejestracja:20 sie 2003, o 18:03
Lokalizacja:100km od Wawy

Postautor: rdt » 14 lut 2006, o 08:21

nie mam problemu z polecenim goto tylko z tym ze timer odlicza do 1
po kilkakrotnym uzyciu gosub przepełnia sie stos i tak jakbym zresetował procka
przy uzyciu gosub jest odkladany na stos adres powrotny z goto nie mam takich problemow

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 14 lut 2006, o 19:42

nie mam problemu z polecenim goto tylko z tym ze timer odlicza do 1
po kilkakrotnym uzyciu gosub przepełnia sie stos i tak jakbym zresetował procka
przy uzyciu gosub jest odkladany na stos adres powrotny z goto nie mam takich problemow
Juz nie będę pisał co myślę , o (wybacz)Twoim programie , ale nie działa bo nie może działać.
W zamian wklejam coś na osłodę :D

Kod: Zaznacz cały

Dim A As Byte , Przerwanie As Bit Config Timer1 = Timer , Mode = 1 , Gate = Internal On Timer1 Przerwanko Enable Timer1 Enable Interrupts A = 0 Cls Lcd A While A < 20 Reset Przerwanie Counter1 = 6 Start Timer1 Bitwait Przerwanie , Set Stop Timer1 Cls Lcd A Wait 1 Wend A = 0 End Przerwanko: Incr A Set Przerwanie Return
Pozdrawiam
Piotrek

rdt
-
-
Posty:87
Rejestracja:20 sie 2003, o 18:03
Lokalizacja:100km od Wawy

Postautor: rdt » 15 lut 2006, o 01:16

Dzieki za pomoc ale nadal nie wiem czemu nie działa i gdzie zrobiłem bląd
nie chodzi tylko o to aby raz sobie poradzic z bledem ale tez i o to zeby swoje zrozumiec no nie ?

jostak
-
-
Posty:11
Rejestracja:2 lut 2006, o 12:31
Lokalizacja:Wrocław

Postautor: jostak » 15 lut 2006, o 08:43

przede wszystkim musisz doczytac co spowoduje wydanie polecenia:
ON przerwanie skok do NOSAVE

a pozniej sie zastanowic czy kod w programie obslugi przerwania nie koliduje z wydana wczesniej dyrektywa NOSAVE, przy tej dyrektywie musisz mocno uwazac co piszesz w obsludze przerwania

podejrzyj wszystko w ASM i bedziesz wiedzial cos narobil :)

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 15 lut 2006, o 18:17

Dzieki za pomoc ale nadal nie wiem czemu nie działa i gdzie zrobiłem bląd
nie chodzi tylko o to aby raz sobie poradzic z bledem ale tez i o to zeby swoje zrozumiec no nie ?
Widzisz , cały "pic" polega na znajomości wewnętrznej budowy proca i zasadzie jego działania.
W procach seri MCS-51 , czyli także Twoim , istnieje coś takiego jak priorytet przerwań i tak - pisząc w wieeeeelkim skrócie - po 1-szym wywołaniu przerwania od T1 i nie zakończeniu obsługi tegoż przerwania rozkazem RETI (w Bascomie Return), procek wykonuje skok do etykiety Glowny i wykonując instrukcje pętli głównej między Do Loop , "myśli" , że w dalszym ciągu wykonuje obsługę przerwania T1.Ten stan , nie pozwala mu to przyjąć do wykonania kolejnego przerwania , o priorytecie niższym lub równym niż aktualnie obsługiwane , czyli nie może wykonać kolejnego przerwania T1 , bo on cały czas myśli , że obsługuje jeszcze 1-sze.
Podsumowując , bez RETI alias Return , ani rusz ;)
To tak w bardzo dużym skrócie.

Piotrek

PS
Jeśli chodzi o Nosave , to zgadzam się z kolegą powyżej.

rdt
-
-
Posty:87
Rejestracja:20 sie 2003, o 18:03
Lokalizacja:100km od Wawy

Postautor: rdt » 15 lut 2006, o 20:37

serdeczne dzięki - niestety nie znam assemblera dlatego probuje co nieco w bascomie - mam tylko pytanie czy po kilkunastokrotnym wykonaniu skoku z powodu przerwania nie przepelni mi sie stos
ktos kto zna sie troszke na tym (niestety nie na bascomie) wskazał mi wlasnie przepelnienie sie stosu jako przyczyne hmmmm - resetowania sie procka - program skakał za pomocą polecenia gosub z jednej etykiety do drugiej - rzecz jasna po kilkunastokrotnym przeskoczeniu procek sie "resetował"
przeczytalem gdzies ze wlasnie przerwania powodują odkladanie na stos wszystkich danych i dlatego dopisałem tam NOSAVE
dzieki za odpowiedz i cierpliwosc
p.s. jezeli przerwania mogą cos zlego wywolac to jak sie tego ustrzec (moze przez wyczyszczenie reczne czegos) ??
oraz kiedy mozna stosowac nosave ??

[ Dodano: 16-02-2006, 01:13 ]
Panowie jest 1:12 a dzieki Wam poradzilem sobie z problemem ktory mnie trapil od jakiegos czasu
jeszcze raz dzieki

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 32 gości