سلام
مشخص اصلا درست نگشتی! برای ایجاد تاخیر معمولا از تایمر استفاده میشه. البته میتونی میکرو رو توی یک حلقه منتظر بزاری ولی به نظر من اصلا کار اصولی نیست. پیشنهاد میکنم از تایمر Systick استفاده کنی. یک تابع بنویس که Systick رو روی فرکانس مورد نظر تنظیم کنه. با استفاده از Systick handler و یک تابع ساده میتونی تاخیر مورد نظر رو ایجاد کنی. برای مثال این شکل کلی تابع main.c میشه:
کد:
//--------------------------------------------------------------------------------
// File name: main.c
//----------------------------------------------------------------------------
#include "LPC17XX.h"
#include "delay.h"
void main(){
pll_init(); // Configuration function for PLL
SysTick_Config(SystemCoreClock/1000000); /* Generate interrupt each 1uS */
while(1){
// do sth
delay();
// do sth
}
return 0;
}
حالا توی فایل delay.c باید systick handler و تابع delay رو تعریف کنی. مثلا اینطوری:
کد:
//--------------------------------------------------------------------------------
// File name: delay.c
//----------------------------------------------------------------------------
#include "delay.h"
/*----------------------------------------------------------------------------
SysTick_Handler
*----------------------------------------------------------------------------*/
void SysTick_Handler(void) {
msTicks++; /* increment counter necessary in Delay() */
}
/*------------------------------------------------------------------------------
delays number of tick Systicks (happens every 1 ms)
*------------------------------------------------------------------------------*/
void Delay (uint32 dlyTicks) {
uint32 curTicks;
curTicks = msTicks;
while ((msTicks - curTicks) < dlyTicks);
}
حواست باشه که یک جایی توی فایل delay.h متغییر msTicks رو به صورت volatile static uint32 msTicks تعریف کنی.