51单片机C语言编程 如果我想完成以下要求,该如何编程:

首先P0^0,P0^1两个端口可以接收信号,输入信号为高低电平,P1^0负责输出信号
当P0^0接收到信号时,每接收a个高电平,P1^0输出一组方波,为c个脉冲;
当P0^1接收到信号时,每接收b个高电平,P1^0输出一组方波,为c个脉冲。
方波的频率可以先不考虑,a,b,c均为常数,求程序

当P0^0接收到信号时,每接收a个高电平,P1^0输出一组方波,为c个脉冲;
当P0^1接收到信号时,每接收b个高电平,P1^0输出一组方波,为c个脉冲。
方波的频率可以先不考虑,a,b,c均为常数

#include <reg51.h>

sbit P0^0 = P00;
sbit P0^1 = P01;
sbit P1^0 = P10;

void P10_OUT(void)
{
char c = 20;
while(c) {
P10 = 0; DELAY();
P10 = 1; DELAY();
c--;
}
}

void main(void)
{
char a = 0, b = 0;
bit P00H = 0, P01H = 0;
while(1) {
//下面检测 P00
if (P00) P00H = 1; //信号是高电平, 就记录下来

else { //信号是低电平

if (P00H) { //如果上次是高电平,
a++; //这就是收到了一个信号
if(a == 100) { //到了100 ?
P10_OUT();//就输出
a = 0;
}
}
P00H = 0;
} //上面的,实际上是检测 P00 输入下降沿的个数

//下面检测 P01
//和上面的程序,雷同,略。
// …………
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-02-19
输出一组方波:
pause=0;

for(i=0;i<c;i++)
{
pause=1;

i=i;
pause=0;
i=i;
}本回答被网友采纳
第2个回答  2013-02-19
#include <stdio.h>
#include <reg51.h>
sbit P0^0 = P00;
sbit P0^1 = P01;
sbit P1^0 = P10;
void Signscan()
{
if(P00 == 1)
{
delayms(50);
if(P00 == 1)
i++;//计数高电平
while(P00 != 1)
}
}

void main()
{
while(1)
{
if(i == a)
OutPut();
else if(i == b);
OutPut();

}
}

只有计数a的高电平,大概思路这样,楼主自己完善一下吧
第3个回答  2013-02-23
输出方波:
暂停= 0;

为(i = 0;我<C + +)
{
暂停= 1; BR />
I = I;
暂停= 0;
I = I;
}
第4个回答  2013-02-19
至少得两个定时器把
相似回答