Witam. Ucze programować się w bascomie i zachciało mi się zrobić miganie diody które będzie wywołane przerwaniem Timera1 poczytałem i wydłubałem taki program:
Config Portb = &B11111111 ' cały port B jako wyjście Portb = &B00000000 Config Portd = &B1111100 Portd = &B111111
Config Timer1 = Timer , Prescale = 64
Enable Interrupts Enable Timer1
Timer1 = 125
On Timer1 Label1 Nosave
Do Loop
Label1:
Portb.0 = 1 Waitms 100 Portb.0 = 0 Waitms 100
Return
Jak powinien wyglądać poprawnie bo raczej ten coś nie bardzo chce działac...
Z góry dzięki za pomoc
Didn't find your answer? Ask the community — no account required.
K
Konop
A jaki masz kwarc?? Bo jak coś w stylu 1MHz, a procek zapewne AVR (bo tego też nie podałeś!!) to przerwanie zostanie zgłoszone po około 16ms od startu :D... . No chyba, że ten Timer jest 16bit, to już lepiej... ale to musiałbyś napisać o jaki procek chodzi
Skracasz cykl Timera?? Hmmm... no są dwa wyjścia - dla Timera 8-bit skracasz o połowę czyli już masz 8ms... a dla Timera 16-bit to skrócenie jest nieznaczne :/
Czemu NoSave?? Poki główna pętla jest pusta, to może to nie przeszkadzać, ale w przyszłości może przeszkadzać!! Uważaj na to!!
Jesteś pewny, że podpiąłeś LEDa do odpowiedniego pinu??
Ostatnia linijka jest zbędna!! Po wygaszeniu diody opóźnienie do kolejnego zapalenia wykona Timer!! Marnowanie czasu w przerwaniu to poważny błąd w przypadku większości (bardziej rozbudowanych) programów!
A sprawdzałeś w symulatorze programowym?? Generalnie napisz jaki to procek oraz co i jak działa!! I czy działało coś prostszego?? Spróbuj może zrobić program taki, który w pętli ma taki zestaw komend: Do portb.0=1 waitms 250 portb.0=0 waitms 250 Loop
Powinien migać diodą ale bez używania przerwań. Druga sprawa:
-zadeklarowałeś BASCOMowi jakiego kwarcu używasz?? Bo bez tego nie możesz użyć komendy waitms, gdyż czasy mogą być zupełnie inne od zamierzonych!!
-jestes pewny, że dobrze dobrałeś częstotliwość kwarcu i prescale?? choć w przypadku przykładowego programu dzięki obecności waitms powinno to i tak działać!!...
-nie pamiętam już za dużo z Bascoma... czy linia Enable Timer1 oznacza włączenie zegara, czy zezwolenie na przerwania?? bo MUSZISZ zezwolic na przerwanie z timera 1, a czy go musisz włączać czy nie - to nie pamiętam, sprawdź w katalogu, albo poszukaj jak to się robi w BASCOMie :)... chyba komenda START....
Pozdrawiam Konop
J
Jarek
Ciach :-)
Więc tak mam procek ATTINY 2313 i kwarc 4Mhz przy dzieleniu przez 64 a później danie do timera1 = 125 powinno wg. mnie dać impuls co 2ms. Miganie diody led działa... pisałem pod ten procek już inne programy ale przerwania mi nie wychodzą.. jedyne co udało mi się z przerwań zrobić to przerwanie zewnętrzne poprzez int0 a z tym timerem to nie bardzo wiem jak zrobić przerwanie po przepełnieniu czyli jeżeli timer (akurat w tym przypadku) zliczy 125 impulsów... może ktoś by mi mógł napisać program który by działał?? A ja bym już z niego sobie załapał jak to robić... Z góry dziękuje za pomoc
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.