登录|立即注册|使用QQ帐号登录
论坛 > 51单片机
发帖|
看3281|回2|收藏
楼主 ID:351097 只看他
2019-8-5 11:25
我们用单片机一般都会用到自定义的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的延时函数。
沙发 ID:66287 只看他
2019-8-14 10:06
很巧妙,赞一个!
板凳 ID:371895 只看他
2019-8-16 18:49
有一个辅助软件可以直接得出的

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版