拿8051单片机帮我编个小程序 20
3个回答
展开全部
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
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
展开全部
#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;
}
}
#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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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 哪个是置位我望了,你自己试!
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 哪个是置位我望了,你自己试!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询