با سلام
من از دو وقفه خارجي به صورت همزمان استفاده کردم که درعمل فقط ايتراپت صفر جواب ميده اما تو پرتئوس هر دو جواب ميده :eek:
اولش با کريستال 8 مگ کار ميکردم جواب نميداد گفتم شايد کم مياره و cpu زمان کافي براي انجام دستورات نداره اما 16 مگ هم گذاشتم جواب نداد که نداد
پيش فرض با Atmel Studio کار ميکنم اما ويژن رو هم گذاشتم.
(اين فقط يک برنامه دمو هستش )
سورس
http://uplod.ir/4kb7cfruuj33/New_folder_(4).rar.htm
http://www.uplooder.net/cgi-bin/dl.c...4b2d6c87730505با تشکر
کد:#include <mega8.h> #include <alcd.h> #include <delay.h> #include <stdio.h> int i=0,j=0; char str1[20],str2[20]; // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { i=i+1; } // External Interrupt 1 service routine interrupt [EXT_INT1] void ext_int1_isr(void) { j=j+1; } // Declare your global variables here void main(void) { GICR|=0xC0; MCUCR=0x00; GIFR=0xC0; lcd_init(16); // Global enable interrupts #asm("sei") while (1) { delay_ms(1000); sprintf(str1,"%d",i); lcd_gotoxy(0,0); lcd_puts(str1); sprintf(str2,"%d",j); lcd_gotoxy(5,0); lcd_puts(str2); i=0; j=0; } }
GCC:
کد:#ifndef F_CPU #define F_CPU 16000000UL #endif #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "myutils.h" #include "lcd.h" int i=0,j=0; ISR(INT0_vect,ISR_BLOCK) { i=i+1; } ISR(INT1_vect,ISR_BLOCK) { j=j+1; } int main(void) { GICR=0xC0; MCUCR=0x00; GIFR=0xC0; sei(); InitLCD(LS_ULINE); LCDClear(); while(1) { _delay_ms(1000); LCDWriteIntXY(0,0,i,2) LCDWriteIntXY(5,0,j,2) i=0; j=0; } }