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
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
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Ostatnio zmieniony 14 lut 2006, o 08:22 przez rdt, łącznie zmieniany 1 raz.
- Futrzaczek
- -
- Posty:782
- Rejestracja:4 gru 2005, o 17:48
- Lokalizacja:Piotrków Tryb
- Kontaktowanie:
Juz nie będę pisał co myślę , o (wybacz)Twoim programie , ale nie działa bo nie może działać.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
W zamian wklejam coś na osłodę
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
Piotrek
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
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
Widzisz , cały "pic" polega na znajomości wewnętrznej budowy proca i zasadzie jego działania.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 ?
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.
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
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
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 27 gości