Как подсчитать в двоичном коде на плате 8 светодиодов - ПИК - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть эта программа, и я хочу изменить ее, чтобы светодиоды считали в двоичном виде с частотой 1 Гц (1 с).

#include <xc.h>           

void main(void) { 
    TRISD  = 0x00;          
    PORTD  = 0x00; 
    INTCON = 0xA0;          
    OPTION_REGbits.T0CS = 0;     
    OPTION_REGbits.PSA  = 0;     
    OPTION_REGbits.PS = 7;          
    while(1);           
} 

void interrupt myISR(void) { 
    if(TMR0IF) { 
        PORTD++; 
        INTCONbits.TMR0IF = 0;  
    }
}

Я понимаю, что мне придется изменить функцию myISR так, чтобы PORTD увеличивался после определенного количества переполнений и чтобы было необходимо подходящее значение предварительной нагрузки, но с точки зрения подсчета в двоичном виде,Каковы возможные пути для этого?

1 Ответ

0 голосов
/ 13 декабря 2018

Если ваше прерывание от Таймера 0 происходит, например, каждые 100 мс, этот пример может помочь:

void interrupt myISR(void) {
    static uint8_t counter = 0;

    if(TMR0IF) 
    { 
        INTCONbits.TMR0IF = 0;  
        TMR0 = RELOAD_VALUE_100MS
        counter++;
        if (counter >= 10)
        {
            counter = 0;
            PORTD++; 
        }
    }
}
...