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

[复制链接]
1514|7
 楼主| CY0904030105 发表于 2013-11-30 22:16 | 显示全部楼层 |阅读模式
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
方波在哪,没有看到啊

我的意思是利用一个GPIO先给高电平,采用采用延迟函数延迟一段时间(DelayUs(100)),在给GPIO低电平,在延迟一段时间(DelayUs(100)),分别采用上述两种延迟函数,采用第二个延迟函数得到的是方波,但是第一个得到的是高电平时间多余低电平时间
 楼主| CY0904030105 发表于 2013-12-3 19:54 | 显示全部楼层
huangxz 发表于 2013-12-1 11:32
如果不一致,那就是中断影响的。

没用中断,就是GPIO口先拉低,延迟一段时间,接着拉高,再延迟一短时间,如此循环反复.
ayb_ice 发表于 2013-12-4 08:12 | 显示全部楼层
可能你这两个函数延时时间本来就不一样,
同样的误差造成的感觉不一样罢了
 楼主| CY0904030105 发表于 2013-12-7 20:37 | 显示全部楼层
ayb_ice 发表于 2013-12-4 08:12
可能你这两个函数延时时间本来就不一样,
同样的误差造成的感觉不一样罢了 ...

什么意思,难道第一次使用DelayUs(10)和第二次使用DelayUs(10)产生的时间不一样
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

254

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部