CY0904030105 发表于 2013-11-30 22:16

延时函数,占空比不是50%

void DelayUs(uint32 iDly)
{
        int32 i;
        for( ; iDly>0; --iDly)
               for(i=4;i>0;--i);
                       __asm                     //C语言中嵌入汇编格式
                {
                        NOP
                        NOP
                        NOP
                        NOP
                        NOP
                }
       
}
*/

void DelayUs(uint32 iDly)
{
        int32 i;
        iDly-=1;
        while(iDly--)
        {
                for(i=6;i>0;i--);       
                __asm
                {
                        NOP
                        NOP
                        NOP
                }
                       
        }
        for(i=1;i>0;i--);
/*        __asm
        {
                NOP
        }*/
}
分别用上述两个延迟函数产生方波,第一个延迟函数产生的不是占空比位50%的方波,高电平时间多于低电平时间,第二个延迟函数产生的是50%的方波;刚开始以为都是50%占空比,请高手指点

戈卫东 发表于 2013-12-1 10:48

看不出来你的方波是怎么产生的.

huangxz 发表于 2013-12-1 11:32

如果不一致,那就是中断影响的。

ayb_ice 发表于 2013-12-2 10:54

方波在哪,没有看到啊

CY0904030105 发表于 2013-12-3 19:53

ayb_ice 发表于 2013-12-2 10:54 static/image/common/back.gif
方波在哪,没有看到啊

我的意思是利用一个GPIO先给高电平,采用采用延迟函数延迟一段时间(DelayUs(100)),在给GPIO低电平,在延迟一段时间(DelayUs(100)),分别采用上述两种延迟函数,采用第二个延迟函数得到的是方波,但是第一个得到的是高电平时间多余低电平时间

CY0904030105 发表于 2013-12-3 19:54

huangxz 发表于 2013-12-1 11:32 static/image/common/back.gif
如果不一致,那就是中断影响的。

没用中断,就是GPIO口先拉低,延迟一段时间,接着拉高,再延迟一短时间,如此循环反复.

ayb_ice 发表于 2013-12-4 08:12

可能你这两个函数延时时间本来就不一样,
同样的误差造成的感觉不一样罢了

CY0904030105 发表于 2013-12-7 20:37

ayb_ice 发表于 2013-12-4 08:12 static/image/common/back.gif
可能你这两个函数延时时间本来就不一样,
同样的误差造成的感觉不一样罢了 ...

什么意思,难道第一次使用DelayUs(10)和第二次使用DelayUs(10)产生的时间不一样
页: [1]
查看完整版本: 延时函数,占空比不是50%