51单片机做信号发生器,怎样才能提高频率?

想要通过定时器溢出向DAC发送转换的数据。数据是查表法的正弦值。
晶振是30MHz,DAC是TLC5615.
以下是中断函数,8位自动重装,用最大 的初值正弦波也不到80Hz,怎样才能提高?
void Timer0Init(void) //0.1微秒@30.000MHz
{
TMOD = 0x02; //设置定时器模式
TL0 = 0xff; //设置定时初始值
TH0 = 0xff; //设置定时重载值
TF0 = 0; //清除TF0标志
TR0=1;
}
timer0() interrupt 1
{
DAC(sin[i]);
if (++i > 256)
i = 0;
}

第1个回答  2021-07-06
罗辑混乱,定时器只定时0.1us,而向DAC传送数据要花时间远大于0.1us.
应该定时时间大于DAC(sin[i])的时间。
理论上可产生几百HZ的正弦波。
一次转换需12.5us,假设20US更新一次,把一个正弦波分成256份。
那么产生的正弦波频率可达195HZ。本回答被提问者采纳
第2个回答  2021-07-06
定时器中断内的语句要优化,i改为unsigned char应全局变量,然后中断里后两行删掉,因为完全是废话。
第3个回答  2021-07-06
0.1us定时都才只产生80Hz的波形,显然不是定时器本身的问题,要优化的是你的DAC函数
显然是DA生成模拟信号过慢的问题本回答被网友采纳
相似回答