xzx0x
fory500y0y
voidtim0i
terrupt1
TR00赋初值时,关闭定时器TH00xff6553610256赋初值定时TL00xf76553610256001msTR01打开定时器
timeiftime100time01khziftime20PWM10点空比80elsePWM11PWM20程序说明:1、关于频率的确定:对于110592M晶振,PWM输出频率为1KHZ此时设定时器001ms中断一次,时中断次数100次即为1KHZ001ms1001ms,即为1000HZ此时,定时器计数器赋初值为TH0FFTL0F7。2、关于占空比的确定:此时我们将来time的值从0-100之间进行改变,就可以将占空比从0-100之间进行变化,上面程序中time20时PWM10elsePWM11意思就是20的时间输出低电平,80的时间输出高电平,即占空比为80。如需得到其它占空比,如60,只需将time的值改为40即可。(程序为iftime40PWM10elsePWM11)当然编写程序时也可以定义一个标志位如flag,根据flag的状态决定输出高平还是低电平,假设定义flag1的时候输出高电平,用一个变量去记录定
f时器中断的次数,每次中断就让记录中断次数的变量1,在中断程序里面判断这个变量的值是否到了
,如果到了说明高电平的时间够了,那么就改变flag为0,输出低电平,同时记录中断变量的值清零,每次中断的时候依旧1,根据flag0的情况跳去判断记录变量的值是否到了
如果到了,说明PWM的低电平时间够了,那么就改flag1,输出改高电平,同时记录次数变量清零,重新开始,如此循环便可得到你想要的PWM波形,这种方法我们这里不在举例,请自己去试着书写。
3、程序2,使用单片机IO口输出PWM波,并能通过按键控制正反转在程序中我们通常需要控制电机的正反转,如通过一个按键控制正反转,
此时我们也可以设置一个标志位如flag。在主程序中当按键每次被按下时,flag相应取反。然后在子程序中当flag为1时,进行正转程序,当flag为0时执行反转程序。
下面的程序功能为单片机IO口P20、P21输出1000HZ,占空比为50,并能过P37按键控制正电机的正反转。程序名:PWM直流电机调速晶振:1100592MHzCPU型号:STC89C52功能:直流电机的PWM波控制,可以通过按键控制正反转i
cludereg52h
defi
eui
tu
sig
edi
tdefi
eucharu
sig
edchar
uchartimecou
t50flag1低电平的占空比
sbitPWM1P20PWM通道1,反转脉冲sbitPWM2P21PWM通道2,正转脉冲
fsbitkey_tur
P37电机换向
函数声明voiddelayxmsui
tzvoidMotor_tr