Marek Sp napisał: Teraz program działa idealnie jeśli chodzi o wybory i realizacje , ale nie podoba mi się robienie przerw za pomocą waitms i chciałem uruchomić timer0 tak żeby można było zmienić czas cyklu od 1 sek do 2 sek. Wprowadziłem zmienna A jako byte , ograniczyłem do 99 , ze są 3 diody to cykl byłby co 33 gdzie wartość 99 mogla przyjąć od 1 do 2 sek . Nie wiem czy to jasno opisałem .
Jeżeli stosujesz instrukcje 'Waitms' to wymagany upływ czasu jest liczony przez processor. Chcąc 'zatrudnić' dowolny timer do liczenia czasu, potrzebujesz przejąć nad nim pełną kontrolę. Tak skonfigurowany timer (określony tylko prescaler) w więszości przypadków nie jest praktycznie użyteczny. Dlatego każdy z nich ma szerokie możliwosci konfiguracji (rejestrów) - trybu pracy , przez co staje się bardzo pomocnym narzędziem.
Najpierw skonfiguruj timer aby odliczał wymagane interwały czasu, (jezeli nie jest to bezpośrednio możliwe, to przynajmniej jakiś 'równy' odcinek z którego złozysz inny dowolny), a następnie potrzebujesz przebudować subrutyny, lub fragmenty programu gdzie chcesz je użyć.
Tu najczęściej stosuje sie jakąś pętlę. Może to być; Do/Loop z ewentualną możliwością wyjścia z niej z chwilą upływu odpowiedniego czasu , może to być też ; 'for../next'; albo 'do..until' albo też: 'while../wend", a także często wystarczają instrukcje warunkowe 'if../then' w połączeniach z flagami. Zależy jaki koncept przyjął programista.
Zacznij jednak od pełnej kontroli timera; nad jego różnymi trybami pracy poza "Normal".
e marcus