启动入口
ORG 0000H 复位启动
LJMP START
ORG 000BH T0中断
LJMP T0INT
ORG 0100H
LJMP START
主控程序
START: MOV SP,#80H 初始堆栈值
MOV TMOD,#01H 定时器0工作于方式1
MOV TH0,#03CH 定时器0定时时间=50mS
MOV TL0,#0B0H
CLR P2.5 蜂鸣器响
MOV YSJS,#200 200*50mS=10000mS
SETB TR0 定时器0启动,开始定时
JMP $ 死循环
定时器0中断服务程序
T0INT: DJNZ YSJS,QT0 不到1秒跳转
SETB P2.5 关闭蜂鸣器
CLR TR0
QT0: MOV TH0,#03CH 定时器0定时时间=50mS
MOV TL0,#0B0H
RETI
YSJS EQU 30H
END
延时时间是用指令周期和晶振频率计算来的,信号是用CPL BEEP来的,对BEEP去反,高变低,低变高,形成方波。这个时间是个人的想法,我不知道为什么这么做,如果有时间有限制的话,我会选择用定时器做
这个程序的计时是靠晶振频率计算的,用R3做循环49次可能是30ms,要看晶振频率了,然后R2循环10次就是300ms了,方波一个周期包含一个高电平,一个低电平,所以周期是1230,那半个周期就是615
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)