拿8051单片机帮我编个小程序 20

不断检测P1.0其置一时叫P2.0置一1分钟一分钟后恢复初始状态继续不断检测... 不断检测P1.0
其置一时叫P2.0置一1分钟
一分钟后 恢复初始状态
继续不断检测
展开
 我来答
做而论道
高能答主

2010-06-05 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
ORG 0000H
START:
CLR P2.0 ;初始状态时,P2.0为0
JNB P1.0, $ ;P1.0为0就原地转移.
SETB P2.0 ;为1就把P2.0置1
CALL DELAY ;延时1分钟.
SJMP START ;从头开始.

DELAY: ;延时60s@12MHz
MOV R4, #60
L1: MOV R5, #100
L2: MOV R6, #100
L3: MOV R7, #100
DJNZ R7, $
DJNZ R6, L3
DJNZ R5, L2
DJNZ R4, L1
RET
lzz506
2010-06-15
知道答主
回答量:14
采纳率:0%
帮助的人:7.6万
展开全部
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar TIMER_FLAG; //定时器标志
uint count;
sbit IN_PORT=P1^0;
sbit OUT_PORT=P2^0;
void Delay()
{
uchar i;
for(i=0;i<100;i++);
}
void Init()
{
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
TMOD=0X01;/*定时器0,工作模式1*/
TL0=0XB0; /*定时50ms*/
TH0=0X3C; //12M晶振
IN_PORT=0;// 检测1先写0
OUT_PORT=0;
EA=1;
TIMER_FLAG=1;
}

main()
{
Init();
while(1)
{
if(IN_PORT&&TIMER_FLAG)
{
Delay();
if(IN_PORT&&TIMER_FLAG)
{
TL0=0XB0;
TH0=0X3C;
ET0=1;
TR0=1;
OUT_PORT=1;
TIMER_FLAG=0;
count=0;
}
}
}
}

void timer0() interrupt 1 using 1
{

TL0=0XB0;
TH0=0X3C;
count++;
if(count>=1200)
{
ET0=0;
TR0=0;
OUT_PORT=0;
TIMER_FLAG=1;
count=0;

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
轻睿三农
2010-06-05 · TA获得超过791个赞
知道小有建树答主
回答量:485
采纳率:0%
帮助的人:153万
展开全部
X0 BIT P1.0
Y0 BIT P2.0
START: JNB X0,look;
jmp start;
look: SETB Y0;
LCALL Li;
CLR Y0;
JMP START;

li: mov r5,#50 一微秒
l2: mov r6,#100 一微秒
l3: mov r7,#100 一微秒
djnz r7 ,$ 两微秒
djnz r6,l3 两微秒
djnz r5,l2 两微秒
ret 两微秒
以上是1秒的时间,修改阐述#后值可延长时间,但最大植不能超过255,你可多调几次子程序LI,来延长时间,大概程序就这样,SETB,CLR 哪个是置位我望了,你自己试!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式