2012-04-23 72 views
1

我基本上是在pic16f84a微控制器上学习pic外部中断。基本上我想每按一次按钮连接到引脚B0(RB0/T0CKI)并显示七段显示结果。我正在使用hitech c编译器。pic 16f84a定时器/计数代码没有像预期的那样运行

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

不幸的是,当我在变形VSM模拟这个代码,七段显示器只显示“0”,无论多少次,我按下开关。这是为什么发生? PS:这是我的电路。 circuit

回答

1

引脚RA4/T0CKI是端口A 的第五名为RA4位,所以你的启动代码必须

TRISA=0b00011111; 

代替

TRISA=0b00001111; 
相关问题