機(jī)器人教程1:如何利用51單片機(jī)輸出PWM波
/**************定時(shí)0中斷處理******************/
void timer0_int() interrupt 1
{
TR0=0;//設(shè)置定時(shí)器初值期間,關(guān)閉定時(shí)器
TH0=(65536-10)/256;
TL0=(65536-10)%256;
TR0=1;
if(flag==1)//電機(jī)正轉(zhuǎn)
{
PWM1=0;
time++;
if(time PWM2=1; } else PWM2=0; if(time>=100) { time=0; } } else //電機(jī)反轉(zhuǎn) { PWM2=0; time++; if(time PWM1=1; } else PWM1=0; if(time>=100) { time=0; } } } 5、利用單片機(jī)輸出PWM簡(jiǎn)單控制小車(chē)直行 相信通過(guò)上面的講解,大家已經(jīng)能夠很好的撐握如何利用51單片機(jī)產(chǎn)生PWM波下面給出一個(gè)程序,通過(guò)單片機(jī)兩個(gè)I/O口輸出PWM波,讓小車(chē)直行。 #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;//定時(shí)器0工作方式1 TH0=0xff;//(65536-10)/256;//賦初值定時(shí) TL0=0xf7;//(65536-10)%256;//0.01ms EA=1;//開(kāi)總中斷 ET0=1;//開(kāi)定時(shí)器0中斷 TR0=1;//啟動(dòng)定時(shí)器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;//賦初值時(shí),關(guān)閉定時(shí)器 TH0=0xff;//(65536-10)/256;//賦初值定時(shí) TL0=0xf7;//(65536-10)%256;//0.01ms TR0=1;//打開(kāi)定時(shí)器 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; }
評(píng)論