找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1485|回复: 4
收起左侧

求助!用51单片机计时器产生方波,可是改变不了占空比。

[复制链接]
ID:560268 发表于 2019-6-11 20:00 | 显示全部楼层 |阅读模式
用C语言实现方波占空比的改变,占空比有5挡,循环5次,每次100ms,比如在x=3时,P1口先高电平300ms,然后低电平200ms。用外部中断0让x+1,外部中断x-1。可是,仿真时无论如何占空比都是1:1,就是高电平和低电平的时间是一样的,除了x=0和x=5的时候是一条直线。求助大佬帮忙看下,这是为什么。

源程序

源程序

原理图

原理图
回复

使用道具 举报

ID:123289 发表于 2019-6-12 08:54 | 显示全部楼层
本帖最后由 yzwzfyz 于 2019-6-13 08:22 编辑

1、用定时器做一个1T中断。
2、设置一个周期寄存器C,假设你需要的周期是100T,你就让C=100。
3、设置一个占空比寄存器P,假设你需要的占空比是70,你就让P=70。
关键点(方案):
定时器每次中断后将C-1,如果P<>0,再将P-1,否则P不动!
1、当C-1=0时,让IO口置1,同时将C复成100、将P复成70;否则不处理。
2、当P-1=0时,让IO口清0;否则不处理。
这样IO口的输出就如你所愿了。

更高级一点做成活的。
再增设两个寄存器M,N,将程序中的100用M替代、70用N替代。

这样你只要改变M、N的值就可以任意改变周期与占空比了。而且随时改变!不过要保证M>N,这很容易吧。

关键不是看你的程序,而是看你的构思!你的程序有什么看头。
如果你能理解并认为我的方案可行,你就试着写写程序。
回复

使用道具 举报

ID:332444 发表于 2019-6-12 09:10 | 显示全部楼层
回复

使用道具 举报

ID:207421 发表于 2019-6-12 14:24 | 显示全部楼层
你这是不了解什么叫占空比吧, 百度一下吧, 多看看别人怎么写的
回复

使用道具 举报

ID:541189 发表于 2019-6-12 16:44 来自手机 | 显示全部楼层
好像没有外部中断触发源,怎么触发中断???
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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