机器人教程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; }
评论