单片机用汇编语言怎么写一个蜂鸣器程序?

单片机用汇编语言怎么写一个蜂鸣器程序?,第1张

如果是蜂鸣器的话,那么加一个电平信号就可以发声了。\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

假设P2.5控制蜂鸣器,低电平响。

启动入口

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11300655.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存