با سلام
من از دو وقفه خارجی به صورت همزمان استفاده کردم که درعمل فقط ایتراپت صفر جواب میده اما تو پرتئوس هر دو جواب میده :eek:
اولش با کریستال 8 مگ کار میکردم جواب نمیداد گفتم شاید کم میاره و cpu زمان کافی برای انجام دستورات نداره اما 16 مگ هم گذاشتم جواب نداد که نداد
پیش فرض با Atmel Studio کار میکنم اما ویژن رو هم گذاشتم.
(این فقط یک برنامه دمو هستش )
سورس
http://uplod.ir/4kb7cfruuj33/New_folder_(4).rar.htm
http://www.uplooder.net/cgi-bin/dl.c...4b2d6c87730505
با تشکر
GCC:
من از دو وقفه خارجی به صورت همزمان استفاده کردم که درعمل فقط ایتراپت صفر جواب میده اما تو پرتئوس هر دو جواب میده :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; } }
دیدگاه