Ćwiczenie 4

Transkrypt

Ćwiczenie 4
ĆWICZENIE 4
TEMAT:
OBSŁUGA LICZNIKÓW W PAKIECIE KEILuVISON
Wiadomości wstępne:
TCON 88h
.
TF1 TR1 TF0
TR0 IE1
IT1
IE0
IT0
TF1- ustawia się sprzętowo po przepełnieniu timera T1, kasowana
sprzętowo gdy procesor obsługuje procedurę przerwania od timera T1,
TR1 - wylacza/wlacza liczenie timera T1.
TF0 - ustawia się sprzętowo po przepełnieniu timera T0, kasowana
sprzętowo gdy procesor obsługuje procedurę przerwania od timera T0,
TR0 - wyłącza/włącza liczenie timera T0.
TMOD
GATE
C/T
M1
M0
GATE
C/T
M1
M0
GATE – wybór sposobu włączania licznika, jeżeli GATE = 0 włączanie za pomocą znacznika
TR0 lub TR1
C/T – wybór sposobu taktowania licznika C/T = 0 taktowanie wewnętrzne fosc/12 = 1MHz
M1 M0 – wybór trybu pracy licznika
0
0
1
1
0
1
0
1
Tryb 0 liczniki zliczają na 13 bitach
Tryb 1 liczniki zliczją na 16 bitach TH0 (8 bitów) TL0 (8 bitów)
Tryb 2 autodoładowania (dzielnik 8 bitowy)
Tryb 3 tylko dla licznika T0
Zadanie 1.
Napisz program który zmienia stan diody (P5^0) na przeciwny po każdorazowym
przepełnieniu licznika T0 pracującego w trybie 0. Zaobserwuj działanie licznika na
symulatorze.
#include <reg515.h>
#include <absacc.h>
sbit dioda=P5^0;
void main (void)
{
TMOD=0x01;
TH0=TL0=0x00;
TR0=1;
while (1)
{
dioda=~dioda;
while(TF0==0);
TF0=0;
}
}
Zadanie 2.
Napisz program który zlicza 5 impulsów zewnętrznych ( zmiana stanu 0 - > 1) w
symulatorze T0 Pin i po przepełnieniu licznika zmienia stan diody P5^0 na przeciwny.
Licznik T0 powinien pracować w trybie 2 (autodoładowania) i zliczać impulsy zewnętrzne
C/T = 1.
#include <reg515.h>
#include <absacc.h>
sbit dioda=P5^0;
void main (void)
{
TMOD=0x06;
TH0=TL0=250;
TR0=1;
while (1)
{
dioda= ~ dioda;
while(TF0 = =0);
TF0=0;
}
}
Zadanie 3.
Napisz program który zmienia stan portu P5 na przeciwny z opóźnieniem ok. 1sek.
Opóźnienie zrealizować za pomocą funkcji wykorzystującej licznik T0 pracujący w trybie 1.
Przykładowa funkcja opóźnienia:
void delay_1s (void)
{
char l=20;
TMOD = 0x01;
TR0=1;
while (l - -)
{
TH0=(-50000)>>8;
TL0=(-50000);
while (TF0= = 0);
TF0=0;
}
}
Zadanie 4.
Zaprogramuj licznik T0 na zliczanie impulsów wewnętrznych, natomiast włączenie
licznika powinno odbywać się za pomocą linii P3^2. Zaobserwuj działanie programu na
symulatorze.
Zadanie 5.
Napisz program który na wciśnięty klawisz P3^2 dokonuje 8 krotnego przesunięcia w
lewo wartości 0x01 wpisanej do portu P5 z opóźnieniem ok. 1s. Natomiast na wciśnięty
klawisz P3^3 przesuwa 8 razy w prawo wartość początkową wpisaną do portu P5 = 0x80.
Opóźnienie zrealizować na liczniku T1.
Zadanie 6.
Napisz program który po zliczeniu 5 impulsów zewnętrznych w liczniku T2
pracującym w trybie autodoładowania powoduje zmianę stanu końcówek portu P5 natomiast
po przekroczeniu 10 impulsów powoduje cykliczne przesunięcie wartości 0x01 w lewo.
Opóźnienie ok. 100ms.
Zadanie 7.
Napisz program który dzieli częstotliwość wejściową 1MHz przez 10. W zadaniu
wykorzystaj licznik T2 pracujący w trybie autodoładowania , wynik działania programu
zaobserwuj na porcie P5, którego końcówki zmieniają stan z 1->0 z częstotliwością
przepełnień licznika.
Zadanie 8.
Ustaw licznik T0 pracujący w trybie 3 tak aby rejestry TH0 i TL0 zliczały impulsy
wewnętrzne . Zaobserwuj częstotliwość przepełnień TF0 i TF1.
Zadanie 9.
Ustaw licznik T0 w tryb 3 rejestr TH0 na zliczanie impulsów wewnętrznych rejestr
TL0 na zliczanie impulsów zewnętrznych. Rejestr TL0 ustaw na zliczenie 5 impulsów,
natomiast w momencie przepełnienia rejestrów (TF0=1 i TF1=1) powinna nastąpić zmiana
bity P5^0 na przeciwny.
#include <reg515.h>
#include <absacc.h>
sbit dioda=P5^0;
void main (void)
{
TMOD=0x37;
TR0=TR1=1;
TL0=0xfd;
while (1)
{
while(TF0= =0 || TF1= =0);
TF0=TF1=0;
TL0=0xFA;
dioda=~dioda;
}
}
Wygląd ekranu symulatora do zadania 9. Zaobserwuj stany liczników w pracujących w trybie
3.