Witam. Mam nadzieję, że i tym razem uzyskam od Was pomoc.
Chciałem napisać program do zliczania impulsów, a dokładnie np. zliczanie impulsów w okresie czasu 15 sekund i jak zostaną zliczone dwa impulsy to ma się zapalić dioda. Poniżej przedstawię kod programu, ale najpierw objaśnienia.
Timer T0 - zlicza impulsy
Timer T1 - odmierza czas zliczania
Kwarc 6Mhz, zatem 6Mhz/12 daje 500000 Hz
Przyjmuje sobie ziarnko odmierzanego czasu jako 10Hz (o,15 sekundy) Zatem: 500000 Hz/50000
50000 to zapiane w Hex C350
FFFF - C350 to daje 3CAF te wartości wykrorzystuje w programie.
Wiem, że trzeba odpowiednio ustawić poszczególne bity w rejestrze TMOD. Tylko nie wiem, gdyż są 4 tryby działania Timerów ( 0,1,2,3), ja wybrałem MODE 1, czy jest to dopowiednie pod moje potrzeby? Jezel i tak, to czy zapis TMOD=0x0D; jest prawidłowy? Nie wiem czy dobrze skonfigurowałem te Timery, prosiłbym o weryfikacje
osoby, które mogą pomóc. Nie wiem jak zrobić, żeby dioda się zapalała po zlcizeniu tych 2 impulsów. Byłbym wdzięczny za pomoc. Pozdrawiam.
Chciałem napisać program do zliczania impulsów, a dokładnie np. zliczanie impulsów w okresie czasu 15 sekund i jak zostaną zliczone dwa impulsy to ma się zapalić dioda. Poniżej przedstawię kod programu, ale najpierw objaśnienia.
Timer T0 - zlicza impulsy
Timer T1 - odmierza czas zliczania
Kwarc 6Mhz, zatem 6Mhz/12 daje 500000 Hz
Przyjmuje sobie ziarnko odmierzanego czasu jako 10Hz (o,15 sekundy) Zatem: 500000 Hz/50000
50000 to zapiane w Hex C350
FFFF - C350 to daje 3CAF te wartości wykrorzystuje w programie.
Wiem, że trzeba odpowiednio ustawić poszczególne bity w rejestrze TMOD. Tylko nie wiem, gdyż są 4 tryby działania Timerów ( 0,1,2,3), ja wybrałem MODE 1, czy jest to dopowiednie pod moje potrzeby? Jezel i tak, to czy zapis TMOD=0x0D; jest prawidłowy? Nie wiem czy dobrze skonfigurowałem te Timery, prosiłbym o weryfikacje
osoby, które mogą pomóc. Nie wiem jak zrobić, żeby dioda się zapalała po zlcizeniu tych 2 impulsów. Byłbym wdzięczny za pomoc. Pozdrawiam.
#include <8051.h>
#include <stdio.h>
#define SECOND 100
#define PortLED P1_1
////////////////////////////////////////////////////////////////////////
void main(void)//program glowny
{
TMOD=0x0D; //Ustawienie trybu Timerow
TR1=1; //Start Timer 1
TH1=0x3CAF; //Wpisanie wartosci do rejestra
TL1=0;
TH0=0xFE; //Wpisanie wartosci do rejestra (ma zliczyć 2 impulsy i zasygnalizować to)
TL0=0;
TR0=1; //Start Timer0
ET1=1; //Zgoa na przerwanie od TIMER1
EA=1; //zezwolenie na przerwanie
while(1) //petla
{
while(!INT0) {}; //Linia INT0 bramkuej zliczanie
while(INT0) {};
TH0=0; //zerowanie licznikow TH0
TL0=0; //i TL0 przed pomiarem
}
}
//podprogram przerwania
void T1_int(void) interrupt 3 using 1
{
int count=0;
TH1=0x3CAF; //czas do następnego przerwania
TL1=0x00;
if (++count==SECOND)
{
count=0;
INT0=!PortLED;
}
}