آقا لطفا یکی کمک منه مستمند کنه
دهنم یعنی سرویس شد
2 روزه سر تابع delay گیر کردم هرجور حساب میکنم میزنم جور در نمیاد
پروسسور من LPC1768
با کریستال 12Mhz
طبق فرمولی که همه استفاده میکنن
t*f(cpu)/5
یعنی
60*100000000=6000000000
/5
1200000000
که عقلانی نیست
اگه فرکانس کریستال
که جواب اونم میشه 144000000
اینم نمیشه
!!!!!!!!!!
من بصورت تجربی به عدد 1800000 برای ثانیه رسیدم که خوبه اما بازم میزون نیست فقط میدونم باید همین حول و حوش باشه
لطفا کمک کنید و بگید چه مقداری طبق چه فرمولی باید گذاشته شه
ممنون
اینم تابع فعلی
کد:
#ifndef _DELAY_INCLUDED_
#define _DELAY_INCLUDED_
int t;
void delay_us(int i)
{
for (t=0;t<2*i;t++);//4
}
void delay_ms(int i)
{
for (t=0;t<1800*i;t++);//1900-4800
}
void delay_s(int i)
{
for (t=0;t<1800000*i;t++);
}
#endif
اینم تابعی که در فایل پیوست موجود بود اینم سریع تر کار میکنه میزنم 1 ثانیه با اسکوپ هم که زدم تقریبا 600 تا 650 میلی ثانیه یک بار یک میشه جای یک ثانیه !!
ممنون میشم کمک کنید
کد:
//presentation Header file
#ifndef _DELAY_INCLUDED_
#define _DELAY_INCLUDED_
//presentation variable
unsigned long crystal=12000000; // for other crystal change 18432000
unsigned long x;
unsigned long y;
//presentation subs ( we have three sub 1- delay_us 2- delay_ms 3- delay_s
void delay_us(unsigned long a);
void delay_ms(unsigned long b);
void delay_s(unsigned long c);
// sub delay_us
void delay_us(unsigned long a){
do{
unsigned long d=0;
x=crystal/50000000; //
for (d=0;d<x;d++); //start the VALUE off d is 0 , increase d ,
//if d > x goto next line ,else (d<x) increase d
y++; // increase y
} while(y<a); //if y > a goto next line ,else (y<a) goto "do{"
y=0;
}
//in mine program , you write "delay_s(4);" . in this Header "a" is 4 & do-while
//loop repeat 4 ---time = (x*5)/ crystal
// sub delay_ms
void delay_ms(unsigned long b){
do{
unsigned long e=0;
x=crystal/5000;
for (e=0;e<x;e++);
y++;
} while(y<b);
y=0;
}
// sub delay_s
void delay_s(unsigned long c){
do{
unsigned long f=0;
x=crystal/5;
for (f=0;f<x;f++);
y++;
} while(y<c);
y=0;
}
#endif
ساعت پست رو ببینید متوجه اوضاع میشید