PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : شمارش تعداد دفعات سرریز



gate_crasher
10-08-2010, 15:03
سلام من می خواستم تعداد دفعات سرریز شمارنده 0 میکروatmega32 رو بشمارم. در واقع می خوام یه متغییر داشته باشم که هربار سرریز اتفاق افتاد یکی به اون اضافه شه.

masoodhashemy
10-08-2010, 15:27
config timer0=counter,edge=rising
on ovf0 prog
enable interrupts

dim i as byte
یا
dim i as word

i=0
do

loop
end

:prog
incr i
return

حالا هر وقت کانتر 8 بیتی صفر ، 256 تا شمرد به زیربرنامه prog میپره و یک واحد به متغیر i اضافه میکنه
من دیگه دستورات معرفی میکرو و کریستال ننوشتم.

gate_crasher
10-08-2010, 16:14
من با codevision کار می کنم ولی چیزی که از برنامه فهمیدم یه متغییر ساده تعریف شده و تو زیر برنامه وفقه سرریز با دستور incr i یکی مقدارش رو افزایش دادید درسته؟
ولی توی زیر برنامه ما به متغییر i دسترسی نداریم و برنامه ارور می ده

agape
10-08-2010, 17:04
خوب باید متغییرت رو گلوبال تعریف کنی



static int i=0;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
i++;
}

:0013:

ghaem313
10-08-2010, 17:10
ولی توی زیر برنامه ما به متغییر i دسترسی نداریم و برنامه ارور می ده

منظورت چیه از این که به متغیر دسترسی نداریم
اگر متغیر i یا هر چیز دیگه ای رو عمومی تعریف کنی به راحتی میتونی تو هر زیربرنامه ای روش کار کنی و تغییرش بدی
بعد از ابتدای برنامه وقبل از main مغییر مورد نظرت رو تعریف میکنی
مثلا:
#include <mega32.h>
#include <delay.h>
#define xtal 2000000
int i;
حالا تو زیر برنامه وقفه سرزیر از دستور ++ استفاده میکنی
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
i++;
}
البته فعال سازی وقفه نباید یادت بره

gate_crasher
10-08-2010, 23:41
قبلا این کارو انجام دادم(static int i) ارور می داد ولی الان که دوباره تست کردم درست شد ممنون.