求大侠。。。帮忙解答哈单片机编程的题!!!求详细答案

编程实现以下逻辑功能。1:Q=(C+B)+D2:2s延时程序上面两大题,就详细的解题过程,谢谢,。。。对大题都不会做,最好有点讲解嘛,谢谢。。。求大侠~!~~~~要汇编语... 编程实现以下逻辑功能。
1: Q=(C+B)+D

2: 2s 延时程序

上面两大题,就详细的解题过程,谢谢,。。。对大题都不会做,最好有点讲解嘛,谢谢。。。
求大侠~!~~~~要汇编语言
展开
 我来答
chenge12190
2010-12-07 · 超过29用户采纳过TA的回答
知道答主
回答量:100
采纳率:100%
帮助的人:42.8万
展开全部
1、如果B、C、D、Q是51单片机四个管脚的话就很简单啦,可以给B、C、D三个管脚输入不同的电平,再测量Q管脚的电平变化,可以这样:
#include<reg51.h>
sbit Q = P1^0;
sbit B = P1^1;
sbit C = P1^2;
sbit D = P1^3;
void delayms(unsigned int z)
{
unsigned int x,y;
for(x = z;x > 0;x--)
for(y = 0;y < 110;y++);
}
void main()
{
while(1)
{
Q = B|C|D;//改成Q = B + C + D;也行
delayms(10);
}
}
2、可以使用单片机的定时器中断,直接数数就行了
主要程序:
unsigned int count;//用于计数
void main()
{
TMOD = 0x01;//定义定时器0为工作方式1
TH0 = (65536 - 5000) / 256; //5ms延时
TL0 = (65536 - 5000) % 256;
ET0 = 1;//开定时器0中断
TR0 = 1;//打开定时器
EA = 1;//开全局中断
while(1)
{
if(count == 200)
{
count = 0;//计数清零,重新开始
P0 = ~P0;//P0口发光二极管闪烁
}
}
}
void Timer0(void) interrupt 1
{
TH0 = (65536 - 5000) / 256; //重新置初值
TL0 = (65536 - 5000) % 256;
count++;//每5ms加1
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式