用89c51单片机输出pwm波形来改变电机转速的程序

 我来答
逍123遥33
2014-10-19
知道答主
回答量:23
采纳率:0%
帮助的人:11.2万
展开全部
采用pwm啊,就是在固定周期里高电平与低电平占的比例,例如周期为1s,高电平占0.7s低电平占0.3,如果高电平占的时间越长速度就越快啊
#include “reg51.h”
#define T 10 //T为周期
#define t 7 //0<=t<=10 t越大越快
sbit p0_0 = P0^0;
Delay(int t)
{
int i;
while(t--)

for(i = 0;i < 123;i++);
}

main()
{
int i;

for(i = 0; i < 500;i++)

{
p0_0 = 1;

Delay(t);

p0_0 = 0

Delay(T-t);

}
}
追问
用定时器怎么用呢?
追答
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define uchar unsigned char
#define uint unsigned int
#define T 10 //T=10ms为周期
#define t1 7 //0<=t<=10 t越大越快
sbit p0_0 = P0^0;
uint t = 0;
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer1(void)
{
TMOD |= 0x10; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH1=(65536-20000)/256; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
TL1=(65536-20000)%256; //定时20微秒
EA=1; //总中断打开
ET1=1; //定时器中断打开
// TR1=1; //定时器开关打开
}
main()
{
Init_Timer1();
while(1);
{
p0_0 = 1;

TR1=1;
while(t <= (t1*50*20)); //延时t1毫秒
TR1=0;//定时器关掉
t = 0;

p0_0 = 0;
TR1=1;
while(t <= ((T-t1)*50*20));//延时T-t1毫秒
TR1=0;//定时器关掉
t = 0;

}
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer1_isr(void) interrupt 3 using 1
{
TH1=(65536-20000)/256;
TL1=(65536-20000)%256;

t++;
}
艾普斯
2024-07-18 广告
稳频稳压电源哪家好?艾普斯电源(苏州)有限公司开始专业研发、制造及营销交流稳压电源,满足全球电子及信息业对电源设备日益蓬勃的市场需求。迄今为止,业已发展成为交流不间断电源、稳压电源、变频电源、中频航空- 军事专用电源、直流电源、逆变电源等产... 点击进入详情页
本回答由艾普斯提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式