用定时器中断做
定时器是16格2进制的
模拟救火车声音,先262HZ,然后350HZ(这个可能不对,就用350HZ做)
急~谢谢
8051单片机的最简单的程序 报警器 用定时器溢出中断做 急~谢谢
答案:2 悬赏:50 手机版
解决时间 2021-02-17 13:28
- 提问者网友:龅牙恐龙妹
- 2021-02-17 10:40
最佳答案
- 五星知识达人网友:孤独入客枕
- 2021-02-17 10:48
;350Hz对应溢出时间2857US
TH EQU #0F4H
TL EQU #0D6H
SP BIT P1.0 ;350Hz输出
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIME
ORG 0030H
MAIN: MOV SP,#70H
MOV TH0,#TH
MOV TL0,#TL
SETB ET0
SETB TR0
SETB EA
AJMP $
TIME: MOV TH0,#TH
MOV TL0,#TL
JNB SP,T_S1
CLR SP
AJMP T_END
T_S1: SETB SP
T_END: RETI
END
TH EQU #0F4H
TL EQU #0D6H
SP BIT P1.0 ;350Hz输出
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIME
ORG 0030H
MAIN: MOV SP,#70H
MOV TH0,#TH
MOV TL0,#TL
SETB ET0
SETB TR0
SETB EA
AJMP $
TIME: MOV TH0,#TH
MOV TL0,#TL
JNB SP,T_S1
CLR SP
AJMP T_END
T_S1: SETB SP
T_END: RETI
END
全部回答
- 1楼网友:轮獄道
- 2021-02-17 11:24
那为什么要 每隔 5ms 判断一次呢?直接在主函数判断不行吗?
void main()
{
while(flag)
{
//……继续的内容
}
while(1);//这就是不继续的结果,死在这里,不执行任何东西。当然,定时器还是会工作。
}
这还涉及到另一个问题,如果 这个 变量,一会 0,一会 1,一会又 0,一会 又 1,你想咋整啊?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯