我正在尝试使用 8051 上的计时器创建短曲。我正在尝试发送具有指定频率的方波来创建音符。 然而,使用我当前的代码,我得到的只是一个无限的音符,永远不会停止播放。任何有关如何停止音符并创建持续时间函数的帮助将不胜感激。
#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;
}
最佳答案
我已经很长时间没有对 8051 的设备进行编程了,但我会这样做:
1.a。判断tone()是否永远不会退出
1.b。如果是,我会确保 while 循环确实在那里(请参阅tone() 的反汇编),如果不是,编译器会优化 check out ,并且需要修复(例如将 TF0 声明为 volatile )
1.c.查看检查是否正确(正确寄存器中的正确位等)
- 编写一个汇编例程来浪费 N 个 CPU 时钟,在循环中使用最慢的指令(MUL 或 DIV 是最慢的吗?)或简单地重复 M 次,这样你就会得到 10 毫秒的延迟或类似的东西,编写一个 C 函数根据需要多次调用该例程(例如 1 秒 100 次)。 (您可以在这里使用计时器,但这可能是最简单的)
关于c - 8051 上的声音持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34113435/