标题: 求助!用51单片机计时器产生方波,可是改变不了占空比。 [打印本页]

作者: a997181870    时间: 2019-6-11 20:00
标题: 求助!用51单片机计时器产生方波,可是改变不了占空比。
用C语言实现方波占空比的改变,占空比有5挡,循环5次,每次100ms,比如在x=3时,P1口先高电平300ms,然后低电平200ms。用外部中断0让x+1,外部中断x-1。可是,仿真时无论如何占空比都是1:1,就是高电平和低电平的时间是一样的,除了x=0和x=5的时候是一条直线。求助大佬帮忙看下,这是为什么。

2019-06-11_195054.png (44.18 KB, 下载次数: 46)

源程序

源程序

原理图.png (24.21 KB, 下载次数: 42)

原理图

原理图

作者: yzwzfyz    时间: 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,这很容易吧。

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

作者: xianfajushi    时间: 2019-6-12 09:10
https://blog.csdn.net/xianfajushi/article/details/81331101
作者: lwh999995    时间: 2019-6-12 14:24
你这是不了解什么叫占空比吧, 百度一下吧, 多看看别人怎么写的
作者: 问青天磕大地    时间: 2019-6-12 16:44
好像没有外部中断触发源,怎么触发中断???




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1