无源蜂鸣器高低响的程序问题
时间:10-02
整理:3721RD
点击:
这个程序是使无源蜂鸣器高低响的程序,没有用到定时计数器
ORG 0000H
MOV R0,#10
TURN_ON:
MOV SFRPAGE,#0FH
JB P5.5,$
MOV SFRPAGE,#00H ;对P5.5口页面设置使用
TOP: CLR P1.0
LCALL DELAY
SETB P1.0
LCALL DELAY ;使蜂鸣器高音震动
DJNZ R0,TOP
LOWS:
CLR P1.0
LCALL DELAY_L
SETB P1.0
LCALL DELAY_L ;使蜂鸣器低音震动
DJNZ R0,LOWS
LJMP TURN_ON
DELAY: MOV R6,#20
D1: MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
RET ;高音震动程序
DELAY_L: MOV R2,#20
D4: MOV R1,#50
DJNZ R1,$
DJNZ R2,D4
RET ;低音震动程序
END
那个DJNZ R0,TOP和DJNZ R0,LOWS 这两条语句根本就没有起到延时的作用
R0中的数也不递减,,。是逻辑错误么。
ORG 0000H
MOV R0,#10
TURN_ON:
MOV SFRPAGE,#0FH
JB P5.5,$
MOV SFRPAGE,#00H ;对P5.5口页面设置使用
TOP: CLR P1.0
LCALL DELAY
SETB P1.0
LCALL DELAY ;使蜂鸣器高音震动
DJNZ R0,TOP
LOWS:
CLR P1.0
LCALL DELAY_L
SETB P1.0
LCALL DELAY_L ;使蜂鸣器低音震动
DJNZ R0,LOWS
LJMP TURN_ON
DELAY: MOV R6,#20
D1: MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
RET ;高音震动程序
DELAY_L: MOV R2,#20
D4: MOV R1,#50
DJNZ R1,$
DJNZ R2,D4
RET ;低音震动程序
END
那个DJNZ R0,TOP和DJNZ R0,LOWS 这两条语句根本就没有起到延时的作用
R0中的数也不递减,,。是逻辑错误么。
程序没有运行到DJNZ R0,TOP 在LCALL DELAY 已经跳转了
你的R0值调大些试试,是不是延时太短?
还有那个这个延时程序参数可以调整下
有一点看不懂啊
刚才调试了一下,发现DJNZ R0,TOP和DJNZ R0,LOWS能正常运行。不过小编程序有点问题。就是top,和low片段了都应经加一句R0设置初值的语句。运行到lows的时候R0等于0了,则lows运行256次。再次返回turn-on的时候R0的值还是0.
程序没有运行到DJNZ R0,TOP 在LCALL DELAY 已经跳转了
怎米用。
谢谢,你找到问题的本质了。
你说的很对,。