找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2776|回复: 2
打印 上一主题 下一主题
收起左侧

巧用单片机定时器中断,求解delay函数中i和j的值

[复制链接]
跳转到指定楼层
楼主
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的延时函数。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:66287 发表于 2019-8-14 10:06 | 只看该作者
很巧妙,赞一个!
回复

使用道具 举报

板凳
ID:371895 发表于 2019-8-16 18:49 来自手机 | 只看该作者
有一个辅助软件可以直接得出的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表