打印

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

[复制链接]
1164|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 | 只看该作者
方波在哪,没有看到啊

使用特权

评论回复
5
CY0904030105|  楼主 | 2013-12-3 19:53 | 只看该作者
ayb_ice 发表于 2013-12-2 10:54
方波在哪,没有看到啊

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

使用特权

评论回复
6
CY0904030105|  楼主 | 2013-12-3 19:54 | 只看该作者
huangxz 发表于 2013-12-1 11:32
如果不一致,那就是中断影响的。

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

使用特权

评论回复
7
ayb_ice| | 2013-12-4 08:12 | 只看该作者
可能你这两个函数延时时间本来就不一样,
同样的误差造成的感觉不一样罢了

使用特权

评论回复
8
CY0904030105|  楼主 | 2013-12-7 20:37 | 只看该作者
ayb_ice 发表于 2013-12-4 08:12
可能你这两个函数延时时间本来就不一样,
同样的误差造成的感觉不一样罢了 ...

什么意思,难道第一次使用DelayUs(10)和第二次使用DelayUs(10)产生的时间不一样

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

254

帖子

5

粉丝