本帖最后由 gmsbr 于 2011-7-12 23:48 编辑
用着AT的片子,现在想用STC15F的,写了个蜂鸣器嘀一声的汇编程序,可是搞了两天,不管是用STC的89C52RC还是15F104,还有AT89S52,搞出来都是上电一直响,不能停止,今天不断改变代码结构,总算是能达到目的了,可是不明白为什么会这样,希望朋友们能告知一二,下面是程序代码:
COUNT1 EQU #64H ;循环100次数
COUNT2 EQU #5H
MOV TMOD,#00H ;STC的16位自动装载定时器0工作方式0,时钟6MHZ
DELAY_500MS: MOV R7,COUNT1 ;250US循环100次则是25MS后停止输出
R7LOOP: MOV R6,COUNT2 ;50微秒周期*5=250US
R6LOOP: LCALL DELAY1
;CPL BEEP 语句放在此处则会不停响,为什么呢?
DJNZ R6,R6LOOP
CPL BEEP ;改放在此处则能够正常计数,按设定的次数倒计时完成输出后停止
DJNZ R7,R7LOOP
SETB BEEP
;------------------------50US延时子程序------------------------------------------
;MOV TMOD,#00H ;16位自动装载定时器0工作方式0
DELAY1: MOV TH1,#FFH ;装50US初值
MOV TL1,#E7H
SETB TR1 ;启动定时器1
DELAY2: JBC TF1,DELAY3 ;查询计数溢出转delay3,返回
AJMP DELAY2
DELAY3: RET
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
SJMP $
END
应该这样结束的,你是否少了死循环那一句。所以单片机完成后,自动复位,然后程序又重新开始跑了。
一周热门 更多>