机器人教程1:如何利用51单片机输出PWM波
/**************定时0中断处理******************/
void timer0_int() interrupt 1
{
TR0=0;//设置定时器初值期间,关闭定时器
TH0=(65536-10)/256;
TL0=(65536-10)%256;
TR0=1;
if(flag==1)//电机正转
{
PWM1=0;
time++;
if(time
PWM2=1;
}
else
PWM2=0;
if(time>=100)
{
time=0;
}
}
else //电机反转
{
PWM2=0;
time++;
if(time
PWM1=1;
}
else
PWM1=0;
if(time>=100)
{
time=0;
}
}
}
5、利用单片机输出PWM简单控制小车直行
相信通过上面的讲解,大家已经能够很好的撑握如何利用51单片机产生PWM波下面给出一个程序,通过单片机两个I/O口输出PWM波,让小车直行。
#include
#define uint unsigned int
#define uchar unsigned char
sbit PWM1=P2^0;//接IN1控制正转
sbit PWM2=P2^1;//接IN2控制反转
sbit PWM3=P2^2;//接IN3控制正转
sbit PWM4=P2^3;//接IN4控制反转
sbit PWM5=P2^4;//接IN3控制正转
sbit PWM6=P2^5;//接IN4控制反转
sbit PWM7=P2^6;//接IN3控制正转
sbit PWM8=P2^7;//接IN4控制反转
uchar time;
void main()
{
TMOD=0x01;//定时器0工作方式1
TH0=0xff;//(65536-10)/256;//赋初值定时
TL0=0xf7;//(65536-10)%256;//0.01ms
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=500;y>0;y--);
}
void tim0() interrupt 1
{
TR0=0;//赋初值时,关闭定时器
TH0=0xff;//(65536-10)/256;//赋初值定时
TL0=0xf7;//(65536-10)%256;//0.01ms
TR0=1;//打开定时器
time++;
if(time>=100) time=0;//1khz
PWM2=0;
PWM4=0;
if(time<=75) PWM1=1;
else PWM1=0;
if(time<=80) PWM3=1;
else PWM3=0;
PWM6=0;
PWM8=0;
if(time<=50) PWM5=1;
else PWM5=0;
if(time<=50) PWM7=1;
else PWM7=0;
}
评论