有关PWM 程序!求救

来源:百度知道 编辑:UC知道 时间:2024/07/02 12:14:47
真的很抱歉, 我想问问大家我这个程序究竟问题在哪里?
我真的想了很久都想不到. 谢谢大哥帮个忙!1
以下是我的程序, 每次它运行的时候在IF ELSE哪边都出问题, 无论a是1还是0, 它都不跳. 希望真的有人帮忙.在下永世不忘!
#include <reg51.h>
sbit wave=P0^0;
r0=0x0E0;
r1=0x0B1;
sbit a=P0^1;
void Timer0(void) interrupt 1
{
TR0=0;
wave=~wave;
a=~a;
if (a)
{
TL0=0x05;
TH0=0xc9;
TR0=1;
}

else
{
TL0=0x90;
TH0=0xE8;
TR0=1;
}
}
void main (void)
{
a=0;
wave=1;
TMOD=0x01;
TL0=0x90;
TH0=0xE8;
IT0=1;
EX0=1;
TR0=1;
ET0=1;
EA=1;

while(1)
{
}
}

是两路输出吗?
最好不要直接if(a)
可以定义一个bit flag;让flag和a是同种状态,再执行if(flag),应该就没问题了。
因为a毕竟是I/O口,既读又写容易出错.

修改后:
#include <reg51.h>

sbit wave=P0^0;
r0=0x0E0; //这两句不知道是什么意思...
r1=0x0B1;
sbit a=P0^1;

void Timer0(void) interrupt 1
{
TR0=0;
wave=~wave;
a=~a;
flag = ~flag;

if (flag)
{
TL0=0x05;
TH0=0xc9;
TR0=1;
}
else
{
TL0=0x90;
TH0=0xE8;
TR0=1;
}
}

void main (void)
{
bit flag = 0;

a=0;
wave=1;
TMOD=0x01;
TL0=0x90;
TH0=0xE8;
IT0=1;
EX0=1;
TR0=1;
ET0=1;
EA=1;

while(1)
{
}
}