帮忙编写一个51单片机的程序

来源:百度知道 编辑:UC知道 时间:2024/05/29 12:18:59
从P1.1口有脉冲电压输入。
首先每隔1ms检测P1.1口是否输入为低电平,若不是,则重复检测,只到检测到出现低电平,这时翻转P1.0口电平(P1.0口作输出端口),并开始1s的定时,1s定时完毕后,再次翻转P1.0口电平。同时回到每隔1ms检测P1.1口是否有低电平输入的程序上,如此循环运行。
该程序自己写过一次,但效果不理想,想看看还有什么别的想法。

注明:程序应该仿真通过了,只是你说的是低电平动作,那样你从高电平到低电平的瞬间,马上再打到高电平,不然很快1S过去,又会检测到低电平。
ORG 0000H
SJMP MAIN
ORG 000BH
SJMP T0_PRO
ORG 001BH
SJMP T1_PRO
MAIN:
SETB EA ;CPU中断开放
SETB ET1 ;定时器1中断允许
MOV TMOD,#11H ;方式1和0定时
MOV TH1,#0FCH
MOV TL1,#18H ;扫描P1.1时间间隔为1ms
MOV TH0,#03CH
MOV TL0,#0B0H ;50ms定时
SETB TR1 ;启动定时器1
MOV R7,#0
SJMP $ ;虚拟主程序,等待中断

T1_PRO:
JNB P1.1,loop ;如果P1.1口为输入低电平,则转移到loop,否则继续执行下一步
MOV TH1,#0FCH
MOV TL1,#18H ;重置扫描P1.0时间间隔为1ms
RETI ;中断返回

loop:
CPL P1.0 ;翻转电平
SETB ET0 ;定时器0中断允许
SETB TR0 ;定时器0开始运行
CLR ET1
CLR TR1
RETI

T0_PRO:
INC R7
CJNE R7,#20,RETURN
CPL P1.0 ;R0为0后翻转,输出方波
MOV R7,#0
CLR TR0
CLR ET0