关于51单片机输出可控制PWM波的问题

[复制链接]
查看11 | 回复1 | 2011-6-3 22:33:12 | 显示全部楼层 |阅读模式
我要实现功能是:5个按钮,对应管脚P3.2到p3.6分别为按钮1.到5
按钮3使1其余0即0x01,按钮4使p1口的倒数第二低位输出1其余0即0x02,按钮5,使P1全部为0。。。。。。在按 按钮3或4 后,在按P3.2按钮1(即INT0口)使输出PWM波 占空比增加,如果按P3.3即(INT1)口使输出PWM波 占空比减少。P2口输出波是为了控制场效应管导通来控制直流电机转速的,前面P1是控制正反转的。在按按钮3或4时,让P2口有波输出(即按按钮3或4后电机要转的),然后按按钮1或2来调节电机转动。下面是调节PWM代码,写入程序后单片机实验板蜂鸣器断续响了,但感觉频率低了,不能用场效应管驱动5V电机, 如果不对,麻烦改改。
#include
sbit key3=P3^4;
sbit key4=P3^5;
sbit key5=P3^6;
unsigned int a, b;
//------------------------------------------
void main()
{

TMOD = 0x01;
//T0定时方式1

TH0 = (65536-50000) / 256; //50ms@12MHz

TL0 = (65536-50000) % 256;

TR0 = 1;

ET0 = 1;

EX0 = 1; EX1 = 1;

IT0 = 1; IT1 = 1;

EA = 1;

a = 0;

b = 3;

while(1);

P3=0xff;

if(key3==0)

P1=0x01;

if(key4==0)

P1=0x02;

if(key5==0)

P1=0x00;


}
//------------------------------------------
void time0() interrupt 1
{

TL0 = (65536-50000) % 256;

TH0 = (65536-50000) / 256; //50ms@12MHz

a++;

if(a == 6) a = 0;
//在这里调整周期.

if(a5) b = 5;
//占空比等级最大为5
}
//------------------------------------------
void X1_INT() interrupt 2
{

b--;

if(b < 1) b = 1;
//占空比等级最小为1.
}
忘了2个括号{}
while(1);


P3=0xff;

if(key3==0)

P1=0x01;

if(key4==0)

P1=0x02;

if(key5==0)

P1=0x00;


回复

使用道具 举报

千问 | 2011-6-3 22:33:12 | 显示全部楼层
while后面的分号不要,去掉...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行