启动入口
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
ORG 0000HSTAR:
JB P1.0,$ p1.0作为开关 打开程序才能继续下去
CALL DI 发音200ms
CALL NO_DI 静音200ms
CALL DI
CALL NO_DI
CALL DI
CALL NO_DI
SJMP STAR继续从头执行程序
-------------------
DI:
MOV R1,#100 发音200ms
D2:
CLR P1.7
LCALL DEL 约1ms
SETB P1.7
LCALL DEL设置蜂鸣声音的频率高低
DJNZ R1, D2
RET
-------------------
NO_DI:
MOV R1,#100 静音200ms
ND2:
CLR P1.7
LCALL DEL 约1ms
SETB P1.7
LCALL DEL设置蜂鸣声音的频率高低
DJNZ R1, ND2
RET
-------------------
DEL: 约1ms
MOV R7,#5
DLY1:
MOV R6,#100
DJNZ R6,$
DJNZ R7,DLY1
RET
END
如果是蜂鸣器的话,那么加一个电平信号就可以发声了。\x0d\x0aFMQ EQU P1.0\x0d\x0aORG 0000H\x0d\x0aLJMP MAIN\x0d\x0aORG 0030H\x0d\x0aMAIN:\x0d\x0aCPL FMQ\x0d\x0aLCALL DELAY\x0d\x0aSJMP MAIN\x0d\x0aDELAY:\x0d\x0aMOV R2,#200\x0d\x0aDLY:\x0d\x0aMOV R3,#250\x0d\x0aDJNZ R3,$\x0d\x0aDJNZ R2,DLY\x0d\x0aRET\x0d\x0aEND欢迎分享,转载请注明来源:内存溢出
评论列表(0条)