ايران ويج

نسخه‌ی کامل: تابع delay
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
من یه تابع delay تو یه کدی دیدم میخوام ببینم کسی هست این کد به هم توضیح بده
تا اونجایی که من فهمیدم
امده گفته حلقهwhile جمعا 8 کلاک می سوزاند
فرکانس arm ما هم 12000000hz است
1500000=12000000/8
چرا امده تقسیم بر فرکانس کرده؟؟؟؟؟؟
کد php:
void delay(void)
{      
int x=1500000;
while(
x--);

این تابع میاد این متغیر ایکس را مقدار میده و بعد همینطور یکی یکی ازش کم میکنه تا صفر بشه بعد دیگه تابه برگشت میخوره یا تموم میشه
(۲۹-خرداد-۱۳۹۴, ۲۲:۱۱:۵۸)kimiafars نوشته است: [ -> ]این تابع میاد این متغیر ایکس را مقدار میده و بعد همینطور یکی یکی ازش کم میکنه تا صفر بشه بعد دیگه تابه برگشت میخوره یا تموم میشه
این تابع delay پس چطور زمان تنظیم میکنه
خوب تابع ورودی نمی گیرهه و همواره زمان تاخیری که این تابع ایجاد می کنه ثابت هست.
برای تغییر زمان باید یه متغیر به تابع بفرستی با هر زمانی که خواستی و...
البته راههای دیگه ای هم هست مثل for تو در تو و ...
کد:
#ifndef _DELAY_INCLUDED_
#define _DELAY_INCLUDED_

unsigned long crystal=1000000;
unsigned long x;
unsigned long y;

//--------------------------------------------------------
void delay_us(unsigned long a)
{
unsigned long d=0;
    a/=6.5;//new//
while(y<a)
{
  x=crystal/50000000;
  for (d=0;d<x;d++);
  y++;
}
y=0;
}

//--------------------------------------------------------
void delay_ms(unsigned long b)
{
unsigned long d=0;
    b=b/2.21;//new//
while(y<b)
{
  x=crystal/5000;    
   for (d=0;d<x;d++);
  y++;
}
y=0;
}

//--------------------------------------------------------
void delay_s(unsigned long c)
{
unsigned long d=0;
while(y<c)
{
  x=crystal/5;
  for (d=0;d<x;d++);
  y++;
}
y=0;
}
//--------------------------------------------------------

#endif
این یه تابع delay