16F877 ใช้ interrupt timer รีเซ็ตแล้วไม่เริ่มใหม่

กระทู้คำถาม
MCU PIC16F877
ใช้ interrupt timer1
เขียนโปรแกรมให้ 7segment นับ 0 - 9 แล้ววนกลับมาใหม่
การนับแต่ละครั้ง 1sec


// 7segment common k , LED8 bit by Anucha R ,chamobile2003@yahoo.com
// 05:03:13 update (dd:mm:yy)

#include <16F877.h>

#fuses  HS,NOLVP,NOWDT,NOPROTECT
#use    delay (clock = 20000000)    // Crytal = 20MHz

#use    fast_io(D)
#use    fast_io(C)
#use    fast_io(A)

// interrupt timmer 1 ,pulse 100Hz,
int8 count,i=0;
int v;
int NUM[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xfc}; // no dot
//int NUM[11]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7c}; // dot  active high,common low
//             0    1    2    3    4    5    6    7    8    9    dot
//----------------------------------------------------
//##############################################################################
#INT_TIMER1       // 5ms
void isr_timer1()
{
  
   if(count>100)           // 1000/5 = 200,duty cycle 50% (200) = 100
      {
      v=!v;
            if(i<9)i++;
            else i=0;
            count=0;
      }
    output_c (NUM[i]);
    output_d(0x10);
    
      count++;
   set_timer1(40536);   // 5ms=0.2us*1*TMR1H:TMR1L,65536 - 25000
}


//******************************************************************************
void main()
{
  //-------------------------------------------------
  SETUP_ADC(ADC_OFF);
   set_tris_a(0xff);       // PortA INPUT
    set_tris_c(0x00);       // 0000 0000
      set_tris_d(0x00);       // 0000 0000
       enable_interrupts(global);
   enable_interrupts(int_timer1);
   //-------------------------------------------------          
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   set_timer1(40536);

   while(true)
   {
   }

}



การทดลอง
วงจรทำงานได้ นับ 0 -9 วนไปเรื่อยๆ
แต่พอกด Reset แล้ว ค่าตัวเลข แทนที่จะเริ่ม 1 ใหม่
กลับนับต่อไปเลยครับ
ไม่ทราบ ต้องเซ็ตค่าอะไรเพิ่ม
วงจร
แก้ไขข้อความเมื่อ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่