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