AT89C51单片机汇编程序
我有一个传感器,是有信号时输出高电平,我要把它连在51单片机上,单片机的另外一个引脚接一个LED灯,怎么编写程序,使得当有高电平送入单片机的时候,点亮LED,并使LED亮...
我有一个传感器,是有信号时输出高电平,我要把它连在51单片机上,单片机的另外一个引脚接一个LED灯,怎么编写程序,使得当有高电平送入单片机的时候,点亮LED,并使LED亮10s
展开
8个回答
展开全部
P1.0接传感器,有信号时为高电平;
P1.1接LED,输出低电平时发光。
ORG 0000H
LOOP:
SETB P1.0 ;设置为输入状态.
SETB P1.1 ;关闭LED
JNB P1.0, $ ;低电平时原地转移.
CALL DL10ms ;高电平时就稍稍延时.
JNB P1.0, LOOP ;如果是低电平,就是干扰,转移到前面.
CLR P1.1 ;开灯
CALL DL10S
JMP LOOP ;继续去查看传感器.
;------------------------------------------------------
DL10ms:
MOV R6, #20
MOV R7, #250
DJNZ R7, $
DJNZ R6, $ - 2
RET
;------------------------------------------------------
DL1s:
MOV R5, #100
D1: CALL DL10ms
DJNZ R5, D1
RET
;------------------------------------------------------
DL10s:
MOV R4, #10
D2: CALL DL1s
DJNZ R4, D2
RET
;------------------------------------------------------
END
P1.1接LED,输出低电平时发光。
ORG 0000H
LOOP:
SETB P1.0 ;设置为输入状态.
SETB P1.1 ;关闭LED
JNB P1.0, $ ;低电平时原地转移.
CALL DL10ms ;高电平时就稍稍延时.
JNB P1.0, LOOP ;如果是低电平,就是干扰,转移到前面.
CLR P1.1 ;开灯
CALL DL10S
JMP LOOP ;继续去查看传感器.
;------------------------------------------------------
DL10ms:
MOV R6, #20
MOV R7, #250
DJNZ R7, $
DJNZ R6, $ - 2
RET
;------------------------------------------------------
DL1s:
MOV R5, #100
D1: CALL DL10ms
DJNZ R5, D1
RET
;------------------------------------------------------
DL10s:
MOV R4, #10
D2: CALL DL1s
DJNZ R4, D2
RET
;------------------------------------------------------
END
展开全部
P3.2接传感器,P3.3接LED,LED低电平点亮。
ORG 0H
STAR:SETB P3.3 ;这个是初始化
MAIN:JNB P3.2,MAIN ;这里扫描信号,有高电平信号就执行下面的程序
CLR P3.3 ;点亮LED
LCALL RELAY ;调用延迟子程序,这个子程序延迟没有10S,估计有3秒左右,可以自己修改下延迟子程序的数字,添加NOP,可以达到10S。(主要我忘了指令的机器周期了)
LCALL MAIN ;返回主程序
RELAY:MOV R1,#100 ;延时子程序
L: MOV R2,#100
L1:MOV R3,#100
L2:DJNZ R3,L2
DJNZ R2,L1
DJNZ R1,L
RET
END
ORG 0H
STAR:SETB P3.3 ;这个是初始化
MAIN:JNB P3.2,MAIN ;这里扫描信号,有高电平信号就执行下面的程序
CLR P3.3 ;点亮LED
LCALL RELAY ;调用延迟子程序,这个子程序延迟没有10S,估计有3秒左右,可以自己修改下延迟子程序的数字,添加NOP,可以达到10S。(主要我忘了指令的机器周期了)
LCALL MAIN ;返回主程序
RELAY:MOV R1,#100 ;延时子程序
L: MOV R2,#100
L1:MOV R3,#100
L2:DJNZ R3,L2
DJNZ R2,L1
DJNZ R1,L
RET
END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你需要掌握的有IO操作:数字量输入检测及控制输出,这是最基本的。
第二就是延时操作,延时操作一般有指令延时及定时器延时两种方式,也是最基础的,尤其是定时器操作,要用好单片机,必须掌握。
第二就是延时操作,延时操作一般有指令延时及定时器延时两种方式,也是最基础的,尤其是定时器操作,要用好单片机,必须掌握。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
确实比较基础,方法一:你可以在主程序中做一个扫描,不停的扫面你接地那个I/O口的信号,然后当扫描到有信号输入时,跳转子程序,在子程序中可以把信号脚的状态取反赋值给LED脚(LED低电平点亮时),也可以直接直接赋值0,然后做一个10秒的延时,也可以用定时器。
方法二:信号也可以接在P3.3中断上,有信号产生,直接进入中断服务子程序,子程序如方法一。中断是低电平或下降沿,你得弄个反相器
你可以自己写程序,自己动手进步才快!
方法二:信号也可以接在P3.3中断上,有信号产生,直接进入中断服务子程序,子程序如方法一。中断是低电平或下降沿,你得弄个反相器
你可以自己写程序,自己动手进步才快!
追问
我写了的! 只是不是那么理想,想请你帮我写一个,我参考一下 也学习一下你们的思路
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用汇编简单一点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是最基础的程序,自己慢慢写吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询