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

如题所述

采用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++;
}

温馨提示:答案为网友推荐,仅供参考
相似回答