C 8051上的声音持续时间
我正在尝试用8051上的定时器制作一首短曲。我试图发送一个指定频率的方波来创建音符。 然而,在我当前的代码中,我得到的只是一个无限音符,它从未停止播放。如果您能帮助您确定如何停止便笺并创建持续时间函数,我们将不胜感激C 8051上的声音持续时间,c,frequency,8051,C,Frequency,8051,我正在尝试用8051上的定时器制作一首短曲。我试图发送一个指定频率的方波来创建音符。 然而,在我当前的代码中,我得到的只是一个无限音符,它从未停止播放。如果您能帮助您确定如何停止便笺并创建持续时间函数,我们将不胜感激 #include<reg932.h> sbit speaker=P1^7; void tone(unsigned char, unsigned char); void main() { P1M1 = 0; P1M2 = 0; tone(0xC8,
#include<reg932.h>
sbit speaker=P1^7;
void tone(unsigned char, unsigned char);
void main()
{
P1M1 = 0;
P1M2 = 0;
tone(0xC8, 0xF3);
}
void tone(unsigned char highval, unsigned char lowval)
{
TMOD=0x01;
TL0=lowval;
TH0=highval;
TR0=1;
while(TF0==0);
speaker=0;
TR0=0;
TF0=0;
}
#包括
sbit扬声器=P1^7;
无效音调(无符号字符、无符号字符);
void main()
{
P1M1=0;
P1M2=0;
音调(0xC8,0xF3);
}
无效音调(无符号字符高值,无符号字符低值)
{
TMOD=0x01;
TL0=低值;
TH0=高值;
TR0=1;
而(TF0==0);
扬声器=0;
TR0=0;
TF0=0;
}
我已经很久没有为8051的设备编程了,但我要做的是:
1.a。找出是不是tone()永远不存在
1.b。如果是,我将确保while循环确实在那里(请参阅tone()的反汇编),如果不是,编译器将优化签出并需要修复(例如,将TF0声明为volatile)
1.c。查看检查是否正确(正确寄存器中的正确位等)
你想产生多少赫兹的频率,P1M1和P1M2是什么?我可以知道吗?在主循环中尝试while(1){speaker=~speaker;tone(0xC8,0xF3);}从main中删除其他内容为什么
main()
不包含while(1)
loop(无限循环)??你认为当执行到主程序的末尾时会发生什么??您不认为tone()
只执行一次,要生成正确的音调,您需要打开和关闭蜂鸣器/扬声器??为什么要为定时器中断编写轮询软件例程,而不编写中断子程序???为了找到上述问题的答案,您最终将成为一名更好的8051程序员