در برنامه نویسی توسط
با سلام خدمت دوستان

برنامه یک چراغ راهنمایی را نوشتم که تعداد خودرو ها در دو باند را از طریق دو وقفه خارجی می شماره و می خوام در قسمت تایمر بعد از چند دقیقه تعداد خودرو های دو باند را با هم مقایسه کنه اما

1_ تایمر با فعال شدن وقفه های خارجی فعال میشه

2-در قسمت تایمر مقایسه صورت نمی گیره.

میشه راهنمایی کنید که باید چیکار کنم تا درست بشه؟

نرم افزار  (codevision)

1 پاسخ

0 امتیاز
توسط jahandideh
سلام برنامه کدویژن را هم ارسال میکردین . خب وقفه خارجی جدا و وقفه سرریز تایمر جداست هر کدوم را جدا فعال کنید. برای هر کدوم روتین وقفه جدا بنویسید. در داخل روتین وقفه سرریز تایمر اعداد را مقایسه میکنی.
توسط
سلام وقفه های خارجی و تایمر را از طریق کدویزارد  تعریف کردم .مگه خود کد ویزارد این ها را جدا تعریف نمی کنه ؟
این یک تیکه از برنامه است که قسمت وقفه ها و تایمر در آن است در بدنه اصلی هم برنامه چراغ راهنمایی به صورت مداوم تکرار میشه.
ممنون میشم اگه بیشتر راهنمایی کنید.
#include <mega64.h>
#include <delay.h>
#define seg_red PORTE
#define seg_blu PORTF
#define seg1 PORTC.6
#define seg2 PORTC.7
#define seg3 PORTB.4
#define seg4 PORTB.5
#define seg5 PORTB.1
#define seg6 PORTB.0
#define seg7 PORTB.3
#define seg8 PORTB.2
// Declare your global variables here

unsigned char   x,y,count0,count1,a=0,b=0,s=0;
unsigned char cathode_seg0[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char control[]={0b11111110,0b11111101,0b11111011,0b11110111};

signed char i,j,tekrar;
unsigned char cathode_seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if (PIND.0==0){
                
                  x++;  
             if(x==10)
            {x=0;y++;}
             if(y==10)y=0;
             delay_ms(10);                           
               
             
              while(1)
              {   
                 
               // seg5=1;seg6=1;
               // seg5=0;seg6=1;
                PORTB=control[1];
                PORTA=cathode_seg0[x];
                delay_ms(10);
              
               // seg5=1;seg6=1;
               // seg5 =1;seg6=0;
                PORTB=control[0];
                PORTA=cathode_seg0[y];
                delay_ms(1);
               
                //seg5 =0;seg6=0;
                if(PIND.0==0 )break;
                }
             }

}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
if (PIND.1==0){
                
                  a++;  
             if(a==10)
            {a=0;b++;}
             if(b==10)b=0;
             delay_ms(10);
                                
             
              while(1)
                {  
                  
               // seg7=1;seg8=1;
               // seg7=0;seg8=1;    
                PORTB=control[3];
                PORTA=cathode_seg0[a];
                delay_ms(10);
              
                //seg7=1;seg8=1;
                //seg7 =1;seg8=0;
                PORTB=control[2];
                PORTA=cathode_seg0[b];
                delay_ms(1);
                //seg7 =0;seg8=0;
                if( PIND.1==0)break;
                  }
              }    

}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// s++;
        count0=y*10;
        count0=count0+x;
        count0=count0/100;
        
        count1=b*10;
        count1=count1+a;
        count1=count1/100;
                
 if(s==120){
       s=0;
  if (count0>count1){
      
  PORTB.7=1;
      PORTC.0=1;
      PORTC.5=1;
    
      for(i=1;i<=0;i++){
          for(j=9; j>0; j--){
               for(tekrar=0; tekrar<20; tekrar++){
                 
                seg1=0;seg2=1;
                seg_red=cathode_seg[i];
                 delay_ms(5);
                 seg1=1;seg2=1;
                 seg1=1;seg2=0;
                 seg_red=cathode_seg[j];
                 delay_ms(5);     
                 seg1=1;seg2=1;
                }   
                 
               
              }
           }
                 PORTC.5=0;
                 PORTC.4=1;
                 delay_ms(100);
                 PORTC.4=0;
                 PORTC.3=1;
                 PORTC.0=0;
                 PORTC.2=1;
             for(i=0;i>0;i--){
                 for(j=9; j>0; j--){
                    for(tekrar=0; tekrar<20; tekrar++){      
                       seg3=0;seg4=1;
                       seg_blu=cathode_seg[i];
                       delay_ms(5);
                       seg3=1;seg4=1;
                      
                       seg3=1;seg4=0;
                       seg_blu=cathode_seg[j];
                       delay_ms(5);     
                       seg3=1;seg4=1;
                    }
                  }
               }
                       PORTC.2=0;
                       PORTC.1=1 ;
                       delay_ms(100);
                       PORTC.1=0;
                       PORTC.3=0;
  
  }
  
  if (count0<count1){
      
  PORTB.7=0;
      PORTC.0=1;
      PORTC.5=1;
    
      for(i=0;i<=0;i++){
          for(j=9; j>0; j--){
               for(tekrar=0; tekrar<20; tekrar++){
                 
                seg1=0;seg2=1;
                seg_red=cathode_seg[i];
                 delay_ms(5);
                 seg1=1;seg2=1;
                 seg1=1;seg2=0;
                 seg_red=cathode_seg[j];
                 delay_ms(5);     
                 seg1=1;seg2=1;
                }   
              }
           }
                 PORTC.5=0;
                 PORTC.4=1;
                 delay_ms(100);
                 PORTC.4=0;
                 PORTC.3=1;
                 PORTC.0=0;
                 PORTC.2=1;
             for(i=1;i>0;i--){
                 for(j=9; j>0; j--){
                    for(tekrar=0; tekrar<20; tekrar++){      
                       seg3=0;seg4=1;
                       seg_blu=cathode_seg[i];
                       delay_ms(5);
                       seg3=1;seg4=1;
                      
                       seg3=1;seg4=0;
                       seg_blu=cathode_seg[j];
                       delay_ms(5);     
                       seg3=1;seg4=1;
                    }
                  }
               }
                       PORTC.2=0;
                       PORTC.1=1 ;
                       delay_ms(100);
                       PORTC.1=0;
                       PORTC.3=0;
    }
    else
        s++;
  }
}
...