STC12C5A60S2的PWM输出频率

yangjinCK 2010-10-18 09:09:59

让这个单片机4秒一次不停的输出一个频率f=0.125Hz
这个该怎么做呢
小弟刚刚才学
不懂啊
这个用其他型号的单片机来做是不是一样的啊
请大侠们指教啊
...全文
1655 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
LabVIEW解题 2010-11-14
  • 打赏
  • 举报
回复
/*STC89C52RC 12M晶振。
让STC89C52的P1口8路输出多路的PWM脉冲输出
程序采集快速循环方式,频率200-300hz,占空比0-100%。把200到300分为10个等级步进,如210hz.占空比为1%步进。
要根据频率与占空比计算出P1某个引脚的高电平时间和低电平时间。
一秒300个脉冲,每个脉冲是用了3mS. 在单片机中整个程序是100uS转一圈
可是最终的仿真结果是330uS左右转一圈,PWM频率只有30多hz.失败。
*/
#include <reg52.h>
char code SST516[3] _at_ 0x003b; //仿真器使用
unsigned int clock,delay; //delay and counter
//定义一路PWM输出所须要的变量
unsigned int frequency1,dutycycle1,cycle100us1,remained1,dutyover1,starttime1;
bit cyclestart1; //开始标致位
sbit output1=P1^7; //输出引脚

//定义第二路PWM输出所须要的变量
unsigned int frequency2,dutycycle2,cycle100us2,remained2,dutyover2,starttime2;
bit cyclestart2; //开始标致位
sbit output2=P1^6; //输出引脚

void outputpwm1 (void)
{
///*
frequency1=200;
dutycycle1=10;
//*/
cycle100us1=10000/frequency1;
if (clock%cycle100us1==0) //一个脉冲的开始
{
output1=0; //0,开始输出
starttime1=clock; //开始初值
}
else
{
if (clock>(dutycycle1*cycle100us1/100+starttime1))
{
output1=1; //1,输出停止
}
}
}

void outputpwm2 (void)
{
///*
frequency2=300;
dutycycle2=70;
//*/
cycle100us2=10000/frequency2;
if (clock%cycle100us2==0) //一个脉冲的开始
{
output2=0; //0,开始输出
starttime2=clock; //开始初值
}
else
{
if (clock>(dutycycle2*cycle100us2/100+starttime2))
{
output2=1; //1,输出停止
}
}
}

void main()
{
//WDT_CONTR = 0x3c; //STC看门狗
while(1)
{
//for(delay=10;delay>0;delay--); //实现100us延时 delay的原始值为50,为了调试方便,加长到50000.
clock++; //实现计数
outputpwm1 ();
outputpwm2 ();
//WDT_CONTR = 0x3c; //STC看门狗
}
}


liuweixiaocainiao 2010-10-20
  • 打赏
  • 举报
回复
4s定时中断一下,执行中断操作咯
yangjinCK 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 a691662 的回复:]
看你用什么单片机了啊
51就用代码写
像那种高级一点例如飞思卡尔16位的都用脉宽调制系统的 操作一下寄存器即可 具体请看相应Datasheet
[/Quote]
我用的STC89C58RD+
请教哈怎么写这个程序啊
a691662 2010-10-18
  • 打赏
  • 举报
回复
看你用什么单片机了啊
51就用代码写
像那种高级一点例如飞思卡尔16位的都用脉宽调制系统的 操作一下寄存器即可 具体请看相应Datasheet
klplgh 2010-10-18
  • 打赏
  • 举报
回复
在程序中用个循环啊,计时效果
yangjinCK 2010-10-18
  • 打赏
  • 举报
回复
.....来个指定指点的啊
yangminghua6 2010-10-18
  • 打赏
  • 举报
回复
STC12C5A60S2这种单片机有专门脚输出频率,改变内部寄存器设置就行了。
a691662 2010-10-18
  • 打赏
  • 举报
回复
用定时器实现
a691662 2010-10-18
  • 打赏
  • 举报
回复
51单片机 pwm代码

自己搜一下吧
yangjinCK 2010-10-18
  • 打赏
  • 举报
回复
好清静啊
来两个人顶啊

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧