|
Работа таймера TMR0 (PIC16) |
|
|
|
May 23 2011, 15:43
|
Участник

Группа: Участник
Сообщений: 63
Регистрация: 13-03-11
Пользователь №: 63 577

|
На данный момент проблема в смутном описании бита T0CS регистра OPTION: Цитата бит 5: T0CS: Выбор тактового сигнала для TMR0 1 = внешний тактовый сигнал с вывода RA4/T0CKI 0 = внутренний тактовый сигнал CLKOUT внутренний тактовый сигнал - это Fosc/4?
|
|
|
|
|
 |
Ответов
|
May 25 2011, 11:20
|
Участник

Группа: Участник
Сообщений: 63
Регистрация: 13-03-11
Пользователь №: 63 577

|
Спасибо. Но лучше бы авторы даташита делали его в одном стиле, с большим числом информации. Пробую получить с помощью TMR0 временной интервал в 1 сек - не работает. Цифры не меняются. Код // MK pic16f72
#include <pic.h>
__CONFIG (XT & WDTDIS & PWRTDIS & BOREN & UNPROTECT); #define XTAL FREQ 4MHZ #define all_1 RC4 // общие провода 1-4 разрядов #define all_2 RC5 #define all_3 RC6 #define all_4 RC7 unsigned char time1 = 0; // объявляем глобальные переменные счетчика 1-4 разрядов и обнуляем их. unsigned char time2 = 0; unsigned char time3 = 0; unsigned char time4 = 0; unsigned char tmp100 = 0; bit DDF = 0; // переменная "защелка"
void podgot (void) { ADCON1 = 0x07; // отключение АЦП TRISA = 0b111111; // (0/1 - выход/вход, нумерация битов в регистре справо-налево) TRISB = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево) TRISC = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево) RBPU = 1; PORTA = 0; PORTB = 0b11111111; PORTC = 0b11111111; }
// для общего анода const unsigned char arr_seg [10] = { 0b00000011, // «0» (справа-налево) 0-горит 0b10011111, // «1» 0b00100101, // «2» 0b00001101, // «3» 0b10011001, // «4» 0b01001001, // «5» 0b01000001, // «6» 0b00011111, // «7» 0b00000001, // «8» 0b00001001, // «9» };
void init (void) { // настройка TMR0 на 100 Hz (сотые доли секунды). // регистр OPTION T0CS = 0; // bit 5 TMR0 Выбор источника сигнала 0 - Fosc/4 (внутренний); 1 - подача на T0CKI T0SE = 0; // bit 4 TMR0 Выбор фронта приращения TMR0 при внешнем тактовом сигнале (0-передний фронт) PSA = 0; // bit 3 Выбор включения предделителя: 0 - перед TMR0, 1 - перед WDT PS2 = 1; // bit 2 Настройка предделителя PS1 = 0; // bit 1 Настройка предделителя PS0 = 1; // bit 0 Настройка предделителя TMR0 = 100; // предзагрузка TMR0, сбрасывается при переполнении. // конец настройки TMR0 на 100 Hz (сотые доли секунды). }
void stTMR0 (void) // запуск TMR0 { GIE = 1; // разрешены все немаскированные прерывания PEIE = 1; // разрешены все немаскированные прерывания от переферийных модулей T0IE = 1; // Разрешение прерывания по переполнению TMR0 T0IF = 0; // сброс флага прерывания по переполнению TMR0 }
void intTMR0 (void) // обработчик прерываний TMR0 (вариант для 1 сек): { while (tmp100 < 100) { if(T0IF == 1) { tmp100 = tmp100 + 1; // прибавление до 100 (в сумме 1 сек) GIE = 1; // разрешены все немаскированные прерывания T0IF = 0; // сброс флага прерывания по переполнению TMR0 T0IE = 1; // Разрешение прерывания по переполнению TMR0 TMR0 = TMR0 + 100; // предзагрузка TMR0 } } time1 = time1 + 1; }
void main (void) { podgot(); init(); for(;;) { all_1 = 0; PORTB = arr_seg [time1]; if ((RA0 == 0)|(DDF == 1)) // запуск TMR0 или продолжение счета при DDF == 1 { DDF = 1; stTMR0(); // запуск TMR0 intTMR0(); // обработчик прерываний TMR0 (вариант для 1 сек): } if (RA1 == 0) // останов TMR0 { DDF = 0; T0IE = 0; // запрет прерывания по переполнению TMR0 } if (time1 > 9) // чтобы "time1" не вышла за пределы массива { time1 = 0; } } } вроде все правильно , а в итоге "фиг вам".
|
|
|
|
Сообщений в этой теме
loghir Работа таймера TMR0 (PIC16) May 23 2011, 15:43 xemul Цитата(loghir @ May 23 2011, 19:43) На да... May 23 2011, 17:33 Redguy Блок-схема TMR0 тебе в помощь! May 25 2011, 05:42 sargein программка жесткая какая-то, в частности выносы в ... May 25 2011, 11:51 xemul Обработчик прерываний для мелких пиков должен выгл... May 25 2011, 11:52 loghir sargein,
как работает оператор Кодif (T0IF... May 25 2011, 12:46 sargein пишите в конце своей программы вот это:
Кодinterru... May 25 2011, 13:58 loghir Если
Кодinterrupt isr() {
if (T0IF... May 25 2011, 14:26 sargein писать надо после main() { } я ведь это уже два ра... May 25 2011, 14:37 xemul Цитата(loghir @ May 25 2011, 16:46) xemul... May 25 2011, 14:55 loghir Спасибо за подсказку.
Буквари ценны тем, что быстр... May 25 2011, 16:39 xemul Цитата(loghir @ May 25 2011, 20:39) Вся б... May 26 2011, 07:26 loghir Цитатавсе требуемые интервалы сделайте на программ... May 26 2011, 16:03 xemul Цитата(loghir @ May 26 2011, 20:03) Но во... May 26 2011, 19:11 sergeeff Уважаемый loghir,
я убедился в том, что удивитель... May 26 2011, 16:27 loghir Цитатая убедился в том, что удивительный лодырь, о... May 26 2011, 17:39 sergeeff Вот-вот. Именно про это я писал. Выдавил таки топи... May 26 2011, 20:36 loghir xemul, спасибо.
Буду разбираться. Проблема в том, ... May 27 2011, 02:20 xemul Цитата(loghir @ May 27 2011, 06:20) Буду ... May 27 2011, 06:39 sergeeff Цитата(loghir @ May 27 2011, 06:20) Мозги... May 27 2011, 09:02 loghir ЦитатаНу объясните мне, с чем здесь разбираться?
с... May 27 2011, 10:05 xemul Цитата(loghir @ May 27 2011, 14:05) С Про... May 27 2011, 11:10 sergeeff Вопрос на засыпку: откуда вы знаете, что ваш обраб... May 27 2011, 10:44 loghir ЦитатаВопрос на засыпку: откуда вы знаете, что ваш... May 29 2011, 14:19 xemul Цитата(loghir @ May 29 2011, 18:19) где-т... May 29 2011, 14:58 sargein смутная программка
а не могли бы вы еще раз уточн... May 29 2011, 14:36 loghir xemul
в #14 я всего-навсего спросил, как рассчитат... May 29 2011, 15:34 SKov Цитата(loghir @ May 29 2011, 19:34) xemul... May 29 2011, 16:48  xemul Цитата(SKov @ May 29 2011, 20:48) Предзаг... May 29 2011, 17:28   SKov Цитата(xemul @ May 29 2011, 21:28) Первый... May 29 2011, 18:01    xemul Цитата(SKov @ May 29 2011, 22:01) Не совс... May 29 2011, 19:00     SKov Цитата(xemul @ May 29 2011, 23:00) Рассмо... May 29 2011, 19:46      xemul Цитата(SKov @ May 29 2011, 23:46) Так что... May 30 2011, 06:51       SKov Цитата(xemul @ May 30 2011, 10:51) Я могу... May 30 2011, 07:40        xemul Цитата(SKov @ May 30 2011, 11:40) Интерес... May 30 2011, 08:18         SKov Цитата(xemul @ May 30 2011, 12:18) Диспер... May 30 2011, 08:42 sargein ну как то примерно так
Кодunsigned char tmp100 = ... May 29 2011, 17:14 sargein xemul, согласен, забыл про это May 29 2011, 17:51 loghir Спасибо за гору инфы! Еще бы переварить...
Д... May 30 2011, 07:29 _Pasha Не встречал задач, где предзагрузка таймера в комб... May 30 2011, 08:28 loghir Вот что получилось:
Кодvoid init (void)
{... May 30 2011, 14:32 SKov Цитата(loghir @ May 30 2011, 18:32) Вот ч... May 30 2011, 15:28 sargein Цитата(loghir @ May 30 2011, 17:32) while... May 30 2011, 15:37 sergeeff Коллеги!
Уважаемый loghir не хочет сам ничего... May 30 2011, 15:56 loghir ЦитатаУ вас проблемы с элементарным программирован... May 30 2011, 17:02 loghir Всем большое спасибо!!!!!... May 31 2011, 07:56
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|