2

私は基本的にpic16f84aマイクロコントローラーのpic外部割り込みについて学んでいます。基本的に、ピンB0(RB0 / T0CKI)に接続されたボタンを押すたびにカウントし、7セグメントディスプレイの結果を表示したいと思います。hitechcコンパイラを使用しています。

#include<htc.h>
__CONFIG(WDTE_OFF& PWRTE_OFF & CP_OFF);
char get7SegmentCode(char value)
{
    switch(value)
    {
        case 0b00000000:
            return (char)0b00111111 ; //0 code
        case 0b00000001:
            return (char)0b00110000 ; //1 code
        case 0b00000010:
            return (char)0b01011011  ; //2 code
        case 0b00000011:
            return (char)0b010011111 ; //3 code
        default:
            return (char)0b00000000 ; //all  code
    }
}
void main()
{
    //declare portb for output and porta upper 4 pins for output and lower 4 for input
    TRISA=0b00001111;
    TRISB=0b00000000;
    CLRWDT();//clear watchdog timer
    TMR0=0;
    OPTION_REG = 0b00111000;//RBPU:PORTB pull-ups are disabled,
    //INTEDG:Interrupt on falling edge of RB0/INT pin
    //T0CS:Transition on RA4/T0CKI pin
    //T0SE:Increment on high-to-low transition on RA4/T0CKI pin
    //PSA:Prescaler assigned to the WDT
    while(1)
    {
        char timerval= TMR0;//read tmr0 into variable
        char restrictedtimerval= timerval & 0x0f;//force upper 4bits to zero to restrict value to 0 - f
        PORTB= get7SegmentCode(restrictedtimerval);
    }
}

残念ながら、このコードをproteus vsmでシミュレートすると、スイッチを何度押しても、7セグメントディスプレイに「0」と表示されます。なぜこうなった?PS:これは私の回路です。 回路

4

1 に答える 1

2

ピンRA4/T0CKIはポートAのRA4という名前の5番目のビットです。したがって、開始コードは次のようになります。

TRISA=0b00011111;

代わりは

TRISA=0b00001111;
于 2012-04-23T19:37:51.387 に答える