Wyzwalanie licznika innym licznikiem

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Kuna
Użytkownik
Posty: 130
Rejestracja: 26 lip 2008, 11:03
Lokalizacja: w-wa

Wyzwalanie licznika innym licznikiem

Post autor: Kuna » 21 mar 2010, 0:00

Witam, chciałbym zrobić coś takiego:

Licznik T0 pracuje w trybie licznika i zlicza cykle maszynowe. Chciałbym by mógł on wyzwolić licznik T1, który pracował by w trybie zliczania impulsów. Czy da się coś takiego zrobić?

Np. T0 liczy do 100 i daje impuls, który zlicza T1. Czy da się to zrobić bez używania zewnętrznej linii?

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 21 mar 2010, 9:48

pierwsze co mi do głowy przychodzi to wprowadzenie dodatkowej zmiennej jako bit, która zmieni swoja wartość przy przepełnieniu T0 a jak zmieni wartość to zezwoli na zliczanie T1.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 21 mar 2010, 10:36

Tylko po co ?? Nigdy nie widziałem takiego przepastnego rozwiązania. Jak T0 ma zliczać cykle maszynowe, to po ty 100 cyklach zgłasza przerwanie, program zwiększa o 1 jakaś tam zmienną i po problemie. Ostatecznie T0 robi jako generator częstotliwości podzielonej przez 100 i taktuje T1, ale wtedy trzeba połączyć ze sobą odpowiednie piny CPU.

Kuna
Użytkownik
Posty: 130
Rejestracja: 26 lip 2008, 11:03
Lokalizacja: w-wa

Post autor: Kuna » 21 mar 2010, 11:09

Chciałem by program był "mniejszy". Powiedzmy, że chce generować przerwanie co 1 sekundę. Normalnie muszę użyć statyczną zmienną, która zlicza ilość wystąpienia przerwania. A tak, statyczną zmienną zastąpił by drugi timer, który zliczał by przerwania.

Metoda matrixa się sprawdza - chociaż jestem zawiedziony wielkością programu. Ostatecznie w głównym liczniku robie tak:

TR1=0x01;
TR1=0x00;

i działa.

ODPOWIEDZ