ببخشيد كه جواب سواله شما رو با تاخير ميدم چون به شدت درگير امتحانات هستم
من برنامه شما و كتابخونه تاخير رو بررسي كردم و به اين نتيجه رسيدم كه اين كتابخونه كه نمي دونم كي اونو نوشته مشكل داره و اصلا استاندارد نيست به دليل اينكه پالس هاي كلاك رو درست حساب نكرده و محاسبه پريود زمانيش مشكل داره تازشم اين كتابخونه برا كريستال 18432000 نوشته شده بود كه با خوده اين كريستالم باز محاسباتش درست از آب در نمي اومد
من تابع تاخير رو بيرون كتابخونه از اول شبيه سازي كردم و تونستم تاخير دقيقا يه ثانيه اي درست كنم، سورس كد تاخير و كل برنامه رو براتون ميزارم خودتون تست كنيد انشاءالله مشكل حل ميشه .
کد:
#include <AT91SAM7X256.h>
#include <lib_AT91SAM7X256.h>
#define crystal 12000000
void delay_s(unsigned long c)
{
unsigned long x,y=0,f;
x=crystal/5;
do
{
for(f=0;f<x;f++);
y++;
}while(y<c);
}
int main(void)
{
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA);
AT91F_PIO_CfgOutput( AT91C_BASE_PIOB, AT91C_PIO_PB0);
( AT91F_PIO_GetInput( AT91C_BASE_PIOB) , 0x02) ;
AT91F_PIO_CfgPullup( AT91C_BASE_PIOB, AT91C_PIO_PB1);
AT91F_PIO_SetOutput ( AT91C_BASE_PIOB, AT91C_PIO_PB0);
while (1)
{
AT91F_PIO_ClearOutput ( AT91C_BASE_PIOB, 0x01);
delay_s(1);
AT91F_PIO_SetOutput ( AT91C_BASE_PIOB, 0x01);
delay_s(1);
};
}
تو برنامه بالا كافيه فقط زمان رو بر حسب ثانيه به تابع delay_s بدين تا براتون تاخير x ثانيه اي دقيق توليد كنه ولي قبلش حتما بايد كريستالتون رو تو خط اول برنامه كه من 12 مگ تعريف كردم، تعريف كنيد .
من يه پيشنهاد دارم اونم اينكه به جاي اينكه از اين نوع كتابخونه ها استفاده كني كه اكثرا غيره اصولي نوشته ميشه و بيشتر تو پروژه هاي شخصي جواب ميدن، خودتون از تعريف تابع تو محيط برنامه نويسي خودتون استفاده كنيد اين جوري همه سورس دسته خودتونه .
موفق باشيد