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

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

2013-02-20 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
当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
//和上面的程序,雷同,略。
// …………
}
}
一万光年MEGn0
2013-02-19 · TA获得超过3712个赞
知道大有可为答主
回答量:4602
采纳率:67%
帮助的人:1074万
展开全部
输出一组方波:
pause=0;

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

i=i;
pause=0;
i=i;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjj0814best
2013-02-19 · 超过19用户采纳过TA的回答
知道答主
回答量:129
采纳率:0%
帮助的人:55.6万
展开全部
#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的高电平,大概思路这样,楼主自己完善一下吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
simonlkx
2013-02-23 · TA获得超过3704个赞
知道大有可为答主
回答量:1.5万
采纳率:0%
帮助的人:3880万
展开全部
输出方波:
暂停= 0;

为(i = 0;我<C + +)
{
暂停= 1; BR />
I = I;
暂停= 0;
I = I;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
破烂王之死
2013-02-19
知道答主
回答量:28
采纳率:0%
帮助的人:6.3万
展开全部
至少得两个定时器把
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式