8051声音持续时间

时间:2015-12-06 02:49:35

标签: 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, 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;
}

1 个答案:

答案 0 :(得分:0)

我很久没有对8051的设备进行编程了,但这就是我要做的事情:

1.A。弄清楚它的音调()是否从未退出

1.B。如果是的话,我确保while循环确实在那里(参见tone()的反汇编,如果不是,编译器会优化结账并需要修复(例如声明) TF0为易变的)

1.C。查看检查是否正确(右侧寄存器中的右侧等)

  1. 编写一个汇编程序来浪费N个CPU时钟,在循环中使用最慢的指令(MUL或DIV最慢?)或者只是重复M次,这样你就得到了10毫秒的延迟等等,写一个C函数给根据需要多次调用该例程(例如,1秒100次)。 (你可以在这里使用计时器,但这可能是最简单的)