完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 gm***r 于 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 |
|
相关推荐
11个回答
|
|
|
|
|
|
可是同样的程序结构,我改初值到250us定时,这样可以的话只用一个循环就可以搞定的,就不用2 个循环了,就因为子程序返回后跟cpl beep会长响,所以只能用2个循环,也尝试在这个语句前后加了两个nop语句,也是一样不停的响,郁闷啊
|
|
|
|
nop语句很短,所以听起来像是连续响也是可能的。 |
|
|
|
这个设计是25ms后就停止的,现在是开20分钟还是一样的长响。加NOP空操作指令让各个指令间多点时间,以免有实际的电平传输延迟,导致寄存器读数据错误 |
|
|
|
SJMP $ END 应该这样结束的,你是否少了死循环那一句。所以单片机完成后,自动复位,然后程序又重新开始跑了。 |
|
|
|
也考虑过这个问题,不过没想到用这个语句来让PC停止,我试试看
|
|
|
|
还是一样,死循环
|
|
|
|
你把程序重新整理一遍,加上注释,最好画一个流程图。 因为你可以看到现象和调试,应该是最好发现问题的。 别放弃,还不行,把完整程序发上来。 |
|
|
|
我再详细看下STC的定时器和复位的相关手册,因为这算是个很简单的程序,这个程序我是先用长延时控制LED灯OK以后才把延时调小用来控制蜂鸣器的,我再研究研究,还不行准备自己做硬件电路试,我现在用的是豆子的开发板
|
|
|
|
蜂鸣器的工作原理要注意一下: 分两种:一是有源蜂鸣器(内带振荡源),只要通电,就可以响。 另一种是无源蜂鸣器,一直通电是不会响的,要给脉冲信号才会响,而所给的脉冲频率不同,就可以发出不同的声音。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
494 浏览 0 评论
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
1050 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1151 浏览 0 评论
887 浏览 0 评论
928 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11846 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 18:05 , Processed in 1.000994 second(s), Total 67, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号