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

 
 
> Работа таймера TMR1 в PIC16
loghir
сообщение Apr 28 2011, 02:25
Сообщение #1


Участник
*

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



Доброго времени суток!
Сохраняется ли предзагрузка таймера более одного цикла работы? После первого переполнения или сброса модулем CCP?

Сообщение отредактировал loghir - Apr 28 2011, 02:26
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
loghir
сообщение May 23 2011, 09:33
Сообщение #2


Участник
*

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



Таймер упорно не работает: (счет не начинается)
Код
// MK pic16f72

#include <pic.h>

__CONFIG (XT & WDTDIS & PWRTDIS & BOREN & UNPROTECT);
#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;

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;
}

// для общего анода, КИПЦ-09.
const unsigned char arr_seg [10] =
{
/* начало массива
0bABCDEFGH – расположение сегментов по битам */
0b00000011, // «0» ! (справа-налево) 0-горит
0b10011111, // «1» !
0b00100101, // «2» !
0b00001101, // «3» !
0b10011001, // «4» !
0b01001001, // «5» !
0b01000001, // «6» !
0b00011111, // «7» !
0b00000001, // «8» !
0b00001001, // «9» !
};

void init (void)
{
// общие настройки таймеров
// регистр INTCON
GIE = 1;         // разрешены все немаскированные прерывания
PEIE = 1;        // разрешены все немаскированные прерывания от переферийных модулей

// настройка TMR1 для 1,90735 Hz
// регистр T1CON
T1CKPS1 = 1;    // выбор коэфф. деления предделителя
T1CKPS0 = 1;    // выбор коэфф. деления предделителя
T1OSCEN = 0;    // выключить внутренний тактовый генератор модуля TMR1
TMR1CS  = 0;    // 1 - выбран внешний (0 - внутренний, Fosk/4) источник тактового сигнала модуля TMR1
TMR1H = 0x0;    // preset for timer1 MSB register
TMR1L = 0x0;    // preset for timer1 LSB register
// конец настройки TMR1 для 1,90735 Hz
}

void main (void)
{
podgot();
for(;;)
{
all_1 = 0;                        // общий анод
PORTB = arr_seg [time1];

if (RA0 == 0) // запуск TMR1
    {
    // регистр PIE1
    TMR1IE = 1;    // Разрешение прерывания по переполнению TMR1
    TMR1ON = 1;    // включить TMR1
    }

if (RA1 == 0) // останов TMR1
    {
    // регистр PIE1
    TMR1IE = 0;    // Запрет прерывания по переполнению TMR1
    TMR1ON = 0;    // выключить TMR1
    }

while (TMR1IF == 0) // (пауза 1,90735 Hz) ожидание флага по переполнению TMR1
{}
TMR1IF = 0;

time2 = time2 + 1;
if (time2 == 2) // деление частоты превывания TMR1 на 2
    {
    time2 = 0;
    time1 = time1 + 1;
    }
if (time1 > 9) // чтобы "time1" не вышла за пределы массива
    {
    time1 = 0;
    }
}
}

где ошибка?!
На RA0 и RA1 подается +5В через резистор 4к7. Кнопка замыкает линии порта на "массу".

Сообщение отредактировал loghir - May 23 2011, 10:01
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- loghir   Работа таймера TMR1 в PIC16   Apr 28 2011, 02:25
- - Ruslan1   Цитата(loghir @ Apr 28 2011, 05:25) Добро...   Apr 28 2011, 07:03
- - xemul   Позволю себе дополнить предыдущего оратора. Если и...   Apr 28 2011, 09:47
|- - Ruslan1   ......Но если хочется совсем-совсем точно, то нужн...   Apr 28 2011, 09:57
|- - ar__systems   Цитата(Ruslan1 @ Apr 28 2011, 04:57) .......   Apr 28 2011, 13:21
- - loghir   Спасибо за неожиданно информативный ответ! Нас...   Apr 28 2011, 18:24
|- - Ruslan1   Цитата(loghir @ Apr 28 2011, 21:24) Спаси...   Apr 28 2011, 19:48
- - VVD_2   Цитата(loghir @ Apr 28 2011, 05:25) Добро...   May 15 2011, 12:47
- - loghir   Все ли у меня в порядке с настройками таймера? Код...   May 17 2011, 09:56
- - sargein   PEIE забыли. Ну и в тексте программы где-то дальше...   May 17 2011, 10:05
- - loghir   sarqein спасибо! Добавлю в настройку КодPEIE =...   May 17 2011, 11:34
- - loghir   Нигде не нашел данных: при Fosk/4 = 1 Mhz (при TMR...   May 17 2011, 13:17
- - sargein   Правильно, оно же все делением получается хорошо, ...   May 17 2011, 14:08
|- - xemul   Цитата(loghir @ May 23 2011, 13:33) Код.....   May 23 2011, 10:10
- - loghir   Запускаем таймер низким на RA0: Кодif (RA0 == ...   May 23 2011, 10:34
- - sargein   тоже не понял про прерывания, где interrupt isr()?...   May 23 2011, 10:47
- - loghir   Цитатагде interrupt isr() пока стараюсь далать мак...   May 23 2011, 11:35
- - xemul   Цитата(sargein @ May 23 2011, 14:47) тоже...   May 23 2011, 12:31
- - loghir   ЦитатаВы продолжаете не понимать, что такое прерыв...   May 23 2011, 14:22
|- - xemul   Цитата(loghir @ May 23 2011, 18:22) Ну по...   May 23 2011, 17:30
- - loghir   Цитата(sargein @ May 23 2011, 13:47) тоже...   May 31 2011, 08:31


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

 


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


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