#define uchar unsigned char
uchar pwm=50,cnt
sbit pluse=P1^0
sbit keyu=P1^4
sbit keyd=P1^5
void t0isr() interrupt 1
{
TH0=(65536-100)/256
TL0=(65536-100)%256
cnt++
if(pwm>0)
{
if(cnt>旅滑100)cnt=0
if(cnt<=pwm)pluse=1
else pluse=0
}
else pluse=0
}
main()
{
TMOD=0x01
TH0=(65536-100)/256
TL0=(65536-100)%256
TR0=1
ET0=1
EA=1
while(1)
{
if(keyu==0)
{
while(keyu==0)
pwm++
if(pwm>100)pwm=100
}
if(keyd==0)
{
while(keyd==0)
if(pwm>0)pwm--
}
}
}
用定时器产生败态圆程序如察塌下:unsigned
int
a=0
,b=10
void
main()
{
tmod=0x01
th0=(65536-50000)/256
tl0=(65536-50000)%256
ea=1
et0=1
tr0=1
}
void
pwm()
interrupt
1
{
th0=(65536-50000)/256
tl0=(65536-50000)%256
a++
p1^1=0
if(a=20)
{
a=0
}
if(a=b)
{
p1^1=1
}
}
调节a
,b的值即可调节占空比,程闭激序框架就是这样,具体自己改吧
1、用定时器+编程2、51系侍宽告列单片机无PWM输出功能,可以采用定时器配合软件的方法输出。对精度要求不高的场合,非常实用
3、思路:定义巧晌一个静态变量,程序每次进入定时器的中断函数中时判断是否满足你老明说要求的占空比,没达到就继续对变量值进行累加直到满足条件后使输出PWM波的那个引脚电平反转
4、具体详见http://wenku.baidu.com/link?url=u82FHU5L-zBFUrFMKix0QW1dQehrRK7aO3ksEIbtPmLdEuFcMT44aBNpBOfuGG-ZvMAabY2JKxCEajqxn_f5GPMl5GQRgrnji3hAGRBq11e
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)