用51的两个定时器,T0控制频率,T1控制脉宽,实现载波比N=150的SPWM,用的是规则采样法,在T0的中断里查表计算T1的计数值来改变脉宽,现在遇到的问题是,我感觉算法没问题,因为如果只查表的话,输出波形没问题,但是加入计算的话,输出波形就不对了,就这一句,T1CNT=(M*sin[i]+10000)*T0CNT/2/10000 ;这句转换成汇编的话,我看了下要40句,应该是这条语句拖住了单片机,应高手指点一下怎么办
核心程序:
void timer0_ISR(void) interrupt 1 //频率控制
{
spwm1=~spwm1;
spwm2=~spwm1;
TH0=T0_high;
TL0=T0_low;
T1CNT=(M*sin[i]+10000)*T0CNT/2/10000 ; //规则采样法公式简化
T1CNT=65535-T1CNT; //note
TH1=T1CNT>>8;
TL1=T1CNT%256;
TR1=1;
i++;
if(i==150)
i=0;
}
void timer1_ISR(void) interrupt 3 //脉宽控制
{
spwm1=~spwm1;
spwm2=~spwm1;
TR1=0;
}