1、2、程序1,使单片机的I/O口输出固定频率的PWM波下面按上面的思路给出一个具体程序:/*/* 程序名:单片机输出固定频率的PWM波*/* 晶振:11.00592 MHz CPU型号:STC89C52 */* 功能:P20口输出周期为1ms(1000HZ),占空比为%80的PWM波*/*/#include#define uint unsigned int#define uchar unsigned charsbit PWM1=P20;/接IN1 控制正转sbit PWM2=P21;/接IN2 控制反转uchar time;void main() TMOD=0x01;/定时器0工作方式1 TH0
2、=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;x0;x-) for(y=500;yy-);void tim0() interrupt 1 TR0=0;/赋初值时,关闭定时器/打开定时器 time+; if(time=100) time=0;/1khz if(time=20) PWM1=0;/点空比%80 else PWM1=1; PWM2=0;程序
3、说明:1、关于频率的确定:对于11.0592M晶振, PWM输出频率为1KHZ,此时设定时器0.01ms中断一次,时中断次数100次即为1KHZ( 0.01ms*100=1ms,即为1000HZ)此时, 定时器计数器赋初值为TH0=FF,TL0=F7。2、关于占空比的确定:此时我们将来time的值从0100之间进行改变,就可以将占空比从%0%100之间进行变化,上面程序中time=20时 PWM1=0;意思就是%20的时间输出低电平,%80的时间输出高电平,即占空比为%80。如需得到其它占空比,如%60,只需将time的值改为40即可。(程序为if(time count=0;key_add);
4、void Motor_dec()/电机加减速 if(key_dec=0) count-=5;key_dec);void timer0_init()void timer0_int() interrupt 15、利用单片机输出PWM简单控制小车直行相信通过上面的讲解,大家已经能够很好的撑握如何利用51单片机产生PWM波下面给出一个程序,通过单片机两个I/O口输出PWM波,让小车直行。sbit PWM3=P22;/接IN3 控制正转sbit PWM4=P23;/接IN4 控制反转sbit PWM5=P24;sbit PWM6=P25;sbit PWM7=P26;sbit PWM8=P27; PWM4=0;=75) PWM1=1; else PWM1=0;=80) PWM3=1; else PWM3=0; PWM6=0; PWM8=0;=50) PWM5=1; else PWM5=0;=50) PWM7=1; else PWM7=0;