我有这个程序,我想修改它,使发光二极管计数在二进制以1Hz(1s)的速率。

#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递增,并且需要适当的预加载值,但是就二进制计数而言,有哪些可能的方法来实现这一点?

最佳答案

如果计时器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++;
        }
    }
}

关于c - 如何在8个LED板上评估二进制数-PIC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53749031/

10-11 23:11
查看更多