|
我們用單片機(jī)一般都會(huì)用到自定義的delay函數(shù),很多時(shí)候我們都要去網(wǎng)上找別人現(xiàn)成寫好的delay函數(shù),當(dāng)然,還要晶振的頻率和別人的板子一樣才行。有時(shí)候我們也想自己寫一個(gè)準(zhǔn)確的delay()函數(shù),但是里面的i和j參數(shù)到底取什么值,這個(gè)自己慢慢調(diào)試挺費(fèi)時(shí)間的,還要單片機(jī)支持仿真才行。我自己琢磨了一下,想到了利用單片機(jī)的定時(shí)器外設(shè)來(lái)確定i和j參數(shù)。我們知道單片機(jī)的定時(shí)器外設(shè)都比較精準(zhǔn)。現(xiàn)在我們來(lái)用定時(shí)器中斷來(lái)自己寫一個(gè)1ms的delay函數(shù)。首先寫一個(gè)delay函數(shù),參數(shù)為指針i和指針j。還有一個(gè)timer_init();//定時(shí)1ms初始化,使能中斷。void Delay_ms(int *i, int *j)//延時(shí)函數(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后,第一次進(jìn)入定時(shí)器中斷函數(shù)后,會(huì)打印a和b的值,那么就可以確定delay函數(shù)中i和j的值了,從而可以實(shí)現(xiàn)自定義1ms的延時(shí)函數(shù)。
|
評(píng)分
-
查看全部評(píng)分
|