我們用單片機一般都會用到自定義的delay函數(shù),很多時候我們都要去網(wǎng)上找別人現(xiàn)成寫好的delay函數(shù),當然,還要晶振的頻率和別人的板子一樣才行。有時候我們也想自己寫一個準確的delay()函數(shù),但是里面的i和j參數(shù)到底取什么值,這個自己慢慢調(diào)試挺費時間的,還要單片機支持仿真才行。我自己琢磨了一下,想到了利用單片機的定時器外設(shè)來確定i和j參數(shù)。我們知道單片機的定時器外設(shè)都比較精準。現(xiàn)在我們來用定時器中斷來自己寫一個1ms的delay函數(shù)。首先寫一個delay函數(shù),參數(shù)為指針i和指針j。還有一個timer_init();//定時1ms初始化,使能中斷。void Delay_ms(int *i, int *j)//延時函數(shù),但是i和j未知
{
_nop_();
_nop_();
do
{while(--*j)}while(--*i)}
timer_interrupt_service//1ms中斷入口函數(shù)
{
printf(“a = %d\n”,*a);
printf(“b = %d\n”,*b);
}
int main(void)
{
int *a=500;
int *b=300;
timer_init();
while(1)
{
Delay_ms(&a, &b);//死循環(huán)執(zhí)行delay函數(shù)
}
}
這樣,1ms后,第一次進入定時器中斷函數(shù)后,會打印a和b的值,那么就可以確定delay函數(shù)中i和j的值了,從而可以實現(xiàn)自定義1ms的延時函數(shù)。
|