Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MAIN.C
- #include "iodefine.h"
- #include "lcd.h"
- #include "inline.h"
- #define KEYObszar 0x20001
- #define KEY_data (*(volatile unsigned char *)(KEYObszar))
- #define K1 0x7E
- #define K2 0x7D
- #define K3 0x7B
- #define K4 0x77
- unsigned char napis_KENER[] = "KENER";
- char *stanPracy = "START";
- char *stanLicznika = " ";
- // Definicje zmiennych globalnych
- short i = 0;
- short amplituda = 100;
- short okres = 50;
- long temp;
- void SetCounters()
- {
- AD.ADCSR.BYTE = 0x33 // ustawienie potencjometru
- ITU.TSTR.BYTE = 0x01; // wylaczenie licznikow
- ITU.TMDR.BIT.PWM3 = 1; // ustawienie kanalu 3 w fazie zliczania
- ITU.TFCR.BYTE = 0xC2; // ustawienie kanalu 3 jako PWM
- ITU3.TCR.BYTE = 0xA0; // czyszczenie sygnalu przez GRA
- ITU3.GRA = 4000; // wartosci poczatkowe
- ITU3.GRB = 4000; //
- ITU3.GRA = 4000; //
- ITU3.TIOR.BIT.IOB = 0;
- ITU.TSTR.BIT.STR3 = 1; // wlaczenie licznka na kanale 3
- ITU3.TIER.BIT.IMIEA = 1; // wlaczenie przerwan na kanale 3
- ITU.TSTR.BIT.STR0 = 0; // wylaczenie licznika na kanale 0
- ITU0.TCR.BYTE = 0xA3; // czyszzenie sygnalu przez GRA
- ITU0.GRA = 1000000; // wartosc poczatkowa GRA
- ITU0.TIER.BYTE = 0xF8; // wlaczenie przerwan na kanale 0
- ITU.TSTR.BIT.STR0 = 1; // wlaczenie licznika na kanale 0
- }
- // definicja funkcjido wyswietlania ciagu znakow
- void puts(unsigned char *napis)
- {
- int x = 0;
- while (napis[x] != '\0')
- {
- putchar(napis[x++]);
- }
- }
- void EkranStartowy(void)
- {
- puts("Ekran startowy!");
- }
- void Wyswietlacz()
- {
- // Wyswietlanie danych
- // stanPracy stanLicznika
- }
- void PutsINT2(short x); //
- void PutsINT3(short x); // Wypisywanie liczb
- void PutsINT4(short x); //
- int main()
- {
- InitLCD();
- SetCounters();
- while (1)
- {
- if (ITU0.TSR.BIT.IMFA == 1) // sprawdzenie czy licznik 0 skonczyl odliczanie
- {
- if (KEY_data == K1) // sprawdzenie czy klawisz 1 jest nacisniety
- {
- stanPracy = "START";// PUTS START
- ITU3.TIER.BIT.IMIEA = 1; // wlaczenie generatora
- }
- else if (KEY_data == K2)// sprawdzenie czy klawisz 2 jest nacisniety
- {
- stanPracy = "STOP ";// PUTS STOP
- ITU3.TIER.BIT.IMIEA = 0; // wylaczenie generatora
- }
- if (AD.ADCSR.BIT.ADF == 1) // sprawdzenie czy stan potencjometru zostal zmieniony
- {
- okres = (AD.ADDRC >> 6) * 51 / 1024; // obliczenie nowej wartosci okresu
- if (okres == 0)
- {
- stanLicznika = "MIN";// PUTS MIN
- }
- else if (okres == 50)
- {
- stanLicznika = "MAX";// PUTS MAX
- }
- else
- {
- stanLicznika = " ";// PUTS ...
- }
- AD.ADCSR.BIT.ADF = 0; // ustawienie stanu potencjometru na 0
- }
- Wyswietlacz(); // WYSWIETLENIE DANYCH NA WYSWIETLACZU
- }
- }
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////////////////// Inthandler.c
- ///////////////////////////////////////////////////////////////////////////////////////////////////////
- void INT_IMIA3(void)
- {
- if (i == 50)
- {
- i = 0;
- }
- if (okres >= 5)
- {
- if (i < 25)
- {
- temp = (4000 / okres) * (amplituda / 100.0) * i * 2;
- }
- else
- {
- temp = (4000 / okres) * (amplituda/100.0) * (100-i*2);
- }
- if ((temp < (40 * amplituda)) && (temp >= 0))
- {
- if (temp < 2000)
- {
- ITU3.BRB = temp;
- }
- else
- {
- ITU3.GRB = temp;
- }
- }
- else
- {
- ITU3.GRB = 40 * amplituda;
- ITU3.BRB = 40 * amplituda;
- }
- }
- else
- {
- ITU3.GRB = 40 * amplituda;
- ITU3.BRB = 40 * amplituda;
- }
- i++;
- ITU3.TSR.BIT.IMFA = 0;
- }
- // Potencjometr -> skalowanie do 5-95 (procent nachylenia) (chyba jest)
- // Nachylenie = przeskalowany potencjometr/2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement