Page 21 - 6636
P. 21

4        n
                                                        8
                                            T         2 2  pres , n  0,1,2,...,8 ,   (4.1)
                                                 Fosc

                            де F osc – тактова частота мікроконтролера, 2  npres  – коефіцієнт
                            ділення тактових імпульсів дільником.
                                Якщо період спрацювання таймера занадто малий, то пе-
                            ріод  можна  збільшити  увівши  в  програму  лічильну  змінну.
                            Алгоритм  роботи  такого  таймера  виглядатиме  таким  чином:
                            значення лічильної змінної при настанні кожного переривання
                            таймера  збільшується  на  1,  при  досягненні  максимального
                            встановленого значення здійснюються потрібні дії в програмі
                            і в лічильну змінну записується нульове значення (див. алго-
                            ритм переривання таймера на рис. 4.2). Максимальне значення
                            лічильної змінної N max можна обчислити згідно виразу

                                                      N max=T потр/T,                   (4.2)


                            де T потр – потрібна часова затримка.
                                Для опису підпрограми обробника переривання від тайме-
                            ра  0  в  середовищі  PICC  використовують  спеціальне  слово
                            #INT_TIMER0. Після цього слова розміщують текст підпрог-
                            рами:
                            #INT_TIMER0
                            void  TIMER0_isr(VOID) {
                            //тут розміщується текст команд підпрограми
                            }

                                Таблиця 4.1 – Команди програми для керування таймером
                            Команда           Пояснення          Приклад
                            enable_interrupts   Ця функція вмикає  enable_interrupts(INT_TIMER0);
                            (level)           переривати     на
                                              заданому рівні.
                            disable_interrupts   Ця  функція  вими-  disable_interrupts(INT_TIMER0);
                            (level)           кає  переривати  на
                                              заданому рівні.
                            setup_timer_0     Ця  функція  на-   setup_timer_0
                            (mode)            строює таймер 0    (T0_INTERNAL|T0_DIV_256);


                                                           20
   16   17   18   19   20   21   22   23   24   25   26