Работа с таймером, загорание лампочки в определённый промежуток времен » Форум сайта Pic.RKniga.ru


Логин:
Пароль:
О сайте:

Pic.Rkniga.ru - Сайт как для начинающих, так и для опытных радиолюбителей, разрабатывающих свои устройства на популярных PIC микроконтроллерах.
Здесь можно обмениваться сообщениями на форуме, а также добавлять на сайт статьи и схемы своих устройств.

Меню сайта
Главная Форум по PIC микроконтроллерам Форум Статьи по PIC микроконтроллерам Статьи Справочная информаци по PIC микроконтроллерам Справочник Литература по PIC микроконтроллерам Литература Схемотехника Схемотехника устройств на PIC микроконтроллерах Микроконтроллеры Программаторы Все по программированию PIC микроконтроллеров Программы, Софт Программы Ссылки
Опрос

Сколько лет вы занимаетесь программированием PIC микроконтроллеров?


от 0-1 года
1-3 года
3-5 лет
5-10 лет
более 10


Последние материалы
  • Тестовая плата для отладки программ на микроконтроллере PIC18F4550
  • Кнопка On/OFF на PIC12F629.
  • Часы с синхронизацией от китайского будильника
  • ШИМ регулятор на PIC16F628A.
  • Счетчики прямого и обратного счета на PIC16F628A.
  • Таймер отключения питания для мультиметра и не только.
  • Измеритель напряжения и тока
  • Маршрутный компьютер для электровелосипеда
  • Простой двухканальный термометр на PIC16F690 и датчиках DS18B20
  • Электронная "Незабудка" для забывчивых
  • Популярные материалы
    Случайная книга


    Ответить
     Работа с таймером, загорание лампочки в определённый промежуток времен
    perec200
    13 апреля 2018 13:53
    Сообщение #1


    Новичок
    • 17

    Репутация: 0
    Группа: Посетители
    Сообщений: 2
    Регистрация: 13.04.2018
    ICQ:--
    Пишу систему автополива, осталось только сделать: подача логической единицы через определённый промежуток времени, подача логического нуля на порт через определённый промежуток времени.


    Помогите, пожалуйста, с кодом 1000 сайтов прошерстил ничего не работает.
    Мне нужно к примеру каждую минуту, чтобы порт RA1 загорался. Так мне будет легче понять логику работы.


    Пробовал ЧТО-ТО ТАКОЕ СДЕЛАТЬ но компилятор ругается на PR1
    Это код с таймером в 10 секунд. Он у меня не работает Статья

    #include <p24fj128ga010.h>
    _CONFIG2(FCKSM_CSDCMD&OSCIOFNC_ON&POSCMOD_HS&FNOSC_PRI)
    #define SYSCLK 8000000
    #define t1 0.5
    #define PREG SYSCLK/2*t1/256
    #define DELAY 20
    #define PORTB_0 PORTBbits.RB0
    void main(void)
    {
       int cnt = 0;
       AD1PCFG = 0xffff;
       TRISB = 0xfffe;
       PR1 = PREG;
       TMR1 = 0;
       T1CON = 0x8030;
       while (1)
       {
         if (_T1IF == 1)
         {
           _T1IF = 0;
           if (cnt == DELAY)
           {
             cnt = 0;
             PORTB_0 = ~PORTB_0;
           }
           cnt++;
         }
       }
    }

    Мой код

    Перейти в начало страницы
    alex
    13 апреля 2018 23:21
    Сообщение #2


    Активный участник
    • 51

    Репутация: 3
    Группа: Администраторы
    Сообщений: 107
    Регистрация: 13.06.2012
    ICQ:--
    Пример кода для PIC16F877A на компиляторе XC8.

    Счетчик настроен на максимальную частоту. Примерно через каждый 250 мс значение порта B инвертируется. Для увеличения этого значения нужно добавить свою переменную. Для уменьшения этого значения настроить регистры TMR1H, TMR1L и T1CON.

    Приведенный ниже код поможет разобраться с работой таймера.


    //_PIC16F877A
    #define _XTAL_FREQ 8000000
    #pragma config FOSC = HS
    #pragma config WDTE = OFF
    #pragma config PWRTE = OFF
    #pragma config BOREN = ON
    #pragma config LVP = OFF
    #pragma config CPD = OFF
    #pragma config WRT = OFF
    #pragma config CP = OFF

    #include <xc.h>

    void interrupt Interrupt(void)  //Подпрограмма прерываний
    {
        if(TMR1IF==1){
            PORTB=~PORTB;
            
            //<<<Вставить свой счетчик секунд, минут, часов и т.д.
            
            TMR1H=0;TMR1L=0;TMR1IF=0; //Сброс флага прерывания и значений счетчиков
        }
    }

    void TMR1_INIT(void){
        TMR1H=0;TMR1L=0;TMR1IF=0;
        T1CON=0b00111001;
        TMR1IE=1;TMR1IF=0;
        GIE=1;PEIE=1;
    }

    void main(void) {
        TRISA = 0;PORTA = 0;
        TRISB = 0;PORTB = 0;
        
        TMR1_INIT();    //Инициализа
    ция счетчика TMR1
        
        while(1)
        {
            PORTAbits.RA0=1;
            __delay_ms(250);
            PORTAbits.RA0=0;
            __delay_ms(250);
            
            //ЧТО-ТО ДЕЛАЕМ ЕЩЕ...
        }
    }
    Перейти в начало страницы
    Быстрый ответ Ответить
    1чел. читают эту тему (гостей: 1)
    Пользователей: 0

      Сейчас: 20 апреля 2024 15:44