Ć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.