реклама на сайте
подробности

 
 
> Работа таймера TMR0 (PIC16)
loghir
сообщение May 23 2011, 15:43
Сообщение #1


Участник
*

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



На данный момент проблема в смутном описании бита T0CS регистра OPTION:
Цитата
бит 5: T0CS: Выбор тактового сигнала для TMR0
1 = внешний тактовый сигнал с вывода RA4/T0CKI
0 = внутренний тактовый сигнал CLKOUT

внутренний тактовый сигнал - это Fosc/4?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
loghir
сообщение May 25 2011, 11:20
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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;
    }
}
}

вроде все правильно , а в итоге "фиг вам". smile3046.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 16:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.014 секунд с 7
ELECTRONIX ©2004-2016