问答

汇集网友智慧,解决技术难题

21ic问答首页 - 求助大家一个问题,还望各位大佬帮忙解答,感谢

LED 51单片机 DM hz IDMA

求助大家一个问题,还望各位大佬帮忙解答,感谢

大圣02020-09-09
最近开始接触51单片机,想问大家一个关于led延时的问题,用的是11.0592MHz的晶振,下面是我的程序代码,
#include<reg51.h>

sbit led = P1^0;

unsigned int i,j;

void main()
{
        while(1)
        {
                led = 0;
                        for(i=0;i<1000;i++)
                        for(j=0;j<110;j++);
                led = 1;
                        for(i=0;i<1000;i++)
                        for(j=0;j<110;j++);
        }
}
实现的功能是亮1秒,再灭1秒。我不太明白,还望大家指点一下,感谢!
回答 +关注 18
1071人浏览 5人回答问题 分享 举报
5 个回答
  • 这个可以用仿真工具调试一下,就明白了是怎么回事了!
  • 大圣0 发表于 2020-9-9 17:26
    兄弟,那个9us,是1/f?,那也是0.09us呀





    大圣0 2020-9-10 08:42 回复TA
    非常感谢 
  • tyw 发表于 2020-9-9 17:04
    #include

    sbit led = P1^0;

    兄弟,那个9us,是1/f?,那也是0.09us呀
    tyw 2020-9-9 17:32 回复TA
    汇编语言能精确计算共几条指令,耗时多少,C语言就算勿清爽了,哈哈 
    tyw 2020-9-9 17:29 回复TA
    for(i=0;i<1000;i++) 语句执行需要好几个时钟周期,我这里是估算的. 
  • keil是不是有个软件模拟功能,看以看运行了多长时间,好久不用,不知还有没有
  • 本帖最后由 tyw 于 2020-9-9 17:25 编辑

    #include<reg51.h>

    sbit led = P1^0;

    unsigned int i,j;

    void main()
    {
            while(1)
            {
                    led = 0;                                  ;开灯
                            for(i=0;i<1000;i++)       ;内循环 i+1 1000次, 每次9us, 1000次=9ms   9us由系统时钟决定
                            for(j=0;j<110;j++);       ;外循环j+1 110次, 每次9ms, 110次=1s
                    led = 1;                                  ;关灯
                            for(i=0;i<1000;i++)       ;内循环 i+1 1000次, 每次9us, 1000次=9ms   9us由系统时钟决定
                            for(j=0;j<110;j++);       ;外循环j+1 110次, 每次9ms, 110次=1s
            }
    }

您需要登录后才可以回复 登录 | 注册