我们用单片机一般都会用到自定义的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的延时函数。