عرض سلام
دوستان یه سوال دارم
از چه تابعی واسه ایجاد Delay در حد میلی ثانیه استفاده میکنید؟
یکم سرچ کردم بعضی جاها یه نوع تابع استفاده میکنند که از تایمر استفاده میکنه مثل این:
[code=c]void delay32Ms(uint8_t timer_num, uint32_t delayInMs)
{
if (timer_num == 0)
{
/* setup timer #0 for delay */
LPC_TMR32B0->TCR = 0x02; /* reset timer */
LPC_TMR32B0->PR = 0x00; /* set prescaler to zero */
LPC_TMR32B0->MR0 = delayInMs * ((SystemCoreClock/(LPC_TMR32B0->PR+1)) / 1000);
LPC_TMR32B0->IR = 0xff; /* reset all interrrupts */
LPC_TMR32B0->MCR = 0x04; /* stop timer on match */
LPC_TMR32B0->TCR = 0x01; /* start timer */
/* wait until delay time has elapsed */
while (LPC_TMR32B0->TCR & 0x01);
}
}[/code]
بعضیا هم از یه حلقه ساده استفاده میکنند مثل این:
[code=c]void delay (unsigned long tick) { /* Delay Function */
unsigned long dly = tick*3000;
while(dly--);
}[/code]
کدومش بهتره؟به جهت داشتن دقت و استفاده کمتر از منابع...
اگه نمونه کدی واسش دارید ممنون میشم به من هم بدید... :nice:
دوستان یه سوال دارم
از چه تابعی واسه ایجاد Delay در حد میلی ثانیه استفاده میکنید؟
یکم سرچ کردم بعضی جاها یه نوع تابع استفاده میکنند که از تایمر استفاده میکنه مثل این:
[code=c]void delay32Ms(uint8_t timer_num, uint32_t delayInMs)
{
if (timer_num == 0)
{
/* setup timer #0 for delay */
LPC_TMR32B0->TCR = 0x02; /* reset timer */
LPC_TMR32B0->PR = 0x00; /* set prescaler to zero */
LPC_TMR32B0->MR0 = delayInMs * ((SystemCoreClock/(LPC_TMR32B0->PR+1)) / 1000);
LPC_TMR32B0->IR = 0xff; /* reset all interrrupts */
LPC_TMR32B0->MCR = 0x04; /* stop timer on match */
LPC_TMR32B0->TCR = 0x01; /* start timer */
/* wait until delay time has elapsed */
while (LPC_TMR32B0->TCR & 0x01);
}
}[/code]
بعضیا هم از یه حلقه ساده استفاده میکنند مثل این:
[code=c]void delay (unsigned long tick) { /* Delay Function */
unsigned long dly = tick*3000;
while(dly--);
}[/code]
کدومش بهتره؟به جهت داشتن دقت و استفاده کمتر از منابع...
اگه نمونه کدی واسش دارید ممنون میشم به من هم بدید... :nice:
دیدگاه