機器人教程1:如何利用51單片機輸出PWM波
/**************定時0中斷處理******************/
void timer0_int() interrupt 1
{
TR0=0;//設置定時器初值期間,關閉定時器
TH0=(65536-10)/256;
TL0=(65536-10)%256;
TR0=1;
if(flag==1)//電機正轉(zhuǎn)
{
PWM1=0;
time++;
if(time PWM2=1; } else PWM2=0; if(time>=100) { time=0; } } else //電機反轉(zhuǎn) { PWM2=0; time++; if(time PWM1=1; } else PWM1=0; if(time>=100) { time=0; } } } 5、利用單片機輸出PWM簡單控制小車直行 相信通過上面的講解,大家已經(jīng)能夠很好的撐握如何利用51單片機產(chǎn)生PWM波下面給出一個程序,通過單片機兩個I/O口輸出PWM波,讓小車直行。 #include #define uint unsigned int #define uchar unsigned char sbit PWM1=P2^0;//接IN1控制正轉(zhuǎn) sbit PWM2=P2^1;//接IN2控制反轉(zhuǎn) sbit PWM3=P2^2;//接IN3控制正轉(zhuǎn) sbit PWM4=P2^3;//接IN4控制反轉(zhuǎn) sbit PWM5=P2^4;//接IN3控制正轉(zhuǎn) sbit PWM6=P2^5;//接IN4控制反轉(zhuǎn) sbit PWM7=P2^6;//接IN3控制正轉(zhuǎn) sbit PWM8=P2^7;//接IN4控制反轉(zhuǎn) 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; }
評論