سلام وقفه های خارجی و تایمر را از طریق کدویزارد تعریف کردم .مگه خود کد ویزارد این ها را جدا تعریف نمی کنه ؟
این یک تیکه از برنامه است که قسمت وقفه ها و تایمر در آن است در بدنه اصلی هم برنامه چراغ راهنمایی به صورت مداوم تکرار میشه.
ممنون میشم اگه بیشتر راهنمایی کنید.
#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++;
}
}