找回密码
 立即注册

QQ登录

只需一步,快速开始

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

占空比设置的50%方波出来的不对啊

[复制链接]
跳转到指定楼层
楼主
ID:906008 发表于 2021-4-15 00:50 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
求解惑

9475F061-AA06-4963-8D85-70F6F3B04436.jpeg (1.6 MB, 下载次数: 22)

9475F061-AA06-4963-8D85-70F6F3B04436.jpeg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:752974 发表于 2021-4-15 08:36 | 只看该作者
这种情况就是产生PWM的两个参数:周期和脉宽的参数设置的问题,仔细查一下看看。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:743654 发表于 2021-4-15 08:36 | 只看该作者
程序呢?
回复

使用道具 举报

地板
ID:844772 发表于 2021-4-15 08:41 | 只看该作者
没附程序,只能瞎猜,我估计你中断写的问题,中断写的不够简洁导致,你中断用自动重装模式会好很多。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:906008 发表于 2021-4-15 14:35 | 只看该作者
[code]void timer0() interrupt 1{         TH0=(65536-50000)/256;         
        TL0=(65536-50000)%256;                  
if(dang==0){w0=0;}                                  
if(dang==1){count1++;if(count1<=1){w0=1;}if(count1>1){w0=0;}if(count1==4){count1=0;}}  
if(dang==2){w0=1;}         
我是这样写的
回复

使用道具 举报

6#
ID:827243 发表于 2021-4-15 14:41 | 只看该作者
本帖最后由 daemondong 于 2021-4-15 14:48 编辑

这里改成

if(dang==1){count1++;if(count1<=2){w0=1;}if(count1>2){w0=0;}if(count1==4){count1=0;}}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:858964 发表于 2021-4-15 16:12 | 只看该作者
建议试用用定时器中断方式:

//主函数:
void main(void)
{
   EA=1;                  
   ET0=1;                  
   TMOD=0x01;              //使用定时器T0的模式1
   TH0=(65536-50000)/256;  
   TL0=(65536-50000)%256;
   TR0=1;            
   while(1)  //无限循环等待中断
       ;
}

// T0中断服务函数:
void Time1(void) interrupt 3 using 0 //“interrupt”
  WO =~ WO //输出引脚电平取反
  TH0=(65536-50000)/256;  
  TL0=(65536-50000)%256;
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:858964 发表于 2021-4-15 16:16 | 只看该作者
我在上面写的 “ T0中断服务函数” 漏了个花括号,应为:

// T0中断服务函数:
void Time1(void) interrupt 3 using 0 //“interrupt”
{
  WO =~ WO //输出引脚电平取反
  TH0=(65536-50000)/256;  
  TL0=(65536-50000)%256;
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:906008 发表于 2021-4-15 16:36 | 只看该作者
Kxuan163 发表于 2021-4-15 16:16
我在上面写的 “ T0中断服务函数” 漏了个花括号,应为:

// T0中断服务函数:

好的谢谢
回复

使用道具 举报

10#
ID:390416 发表于 2021-4-15 17:59 | 只看该作者
人人学会单片机,PWM程序 http://www.51hei.com/bbs/dpj-200820-1.html
回复

使用道具 举报

11#
ID:858964 发表于 2021-4-15 23:03 | 只看该作者

我在上面的解答,仍有个bug:
void Time1(void) interrupt 3 using 0 //“interrupt”  应改正为:


void Time0void) interrupt 3 using 0 //“interrupt”
{
  WO =~ WO //输出引脚电平取反
  TH0=(65536-50000)/256;  
  TL0=(65536-50000)%256;
}

回复

使用道具 举报

12#
ID:207421 发表于 2021-4-15 23:15 | 只看该作者
其实只要这样就是占空比50%了
while(1)
{
    P1=~P1;
    DELAYUS(100);
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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