Я пытаюсь создать короткую мелодию с использованием таймеров на 8051. Я пытаюсь отправить прямоугольную волну с заданной частотой для создания заметок. Однако, с моим текущим кодом, все, что я получаю, - это одна бесконечная нота, которая никогда не перестает играть. Любая помощь в выяснении того, как остановить заметку и создать функцию продолжительности, будет с благодарностью оценена.Продолжительность звука на 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;
}
сколько Гц частоты вы пытаетесь сгенерировать и что такое P1M1 и P1M2? Могу я это узнать? –
В основном цикле попробуйте (1) {speaker = ~ speaker; тон (0xC8, 0xF3); } удалить другие вещи из основного –
Почему 'main()' не содержит 'while (1)' loop (бесконечный цикл) ?? что, по-вашему, происходит, когда выполнение достигает конца основного? Разве вы не думаете, что 'tone()' будет выполняться только один раз и для генерации правильного тона, вам потребуется включить и выключить звуковой сигнал/динамик? Зачем писать процедуру опроса программного обеспечения для прерывания таймера и предпочитают не писать подпрограмму прерывания ??? _в преследовании, чтобы найти ответы на вышеуказанные вопросы, вы закончите как лучший программист 8051_ – madD7