用51的兩個定時器,T0控制頻率,T1控制脈寬,實現(xiàn)載波比N=150的SPWM,用的是規(guī)則采樣法,在T0的中斷里查表計算T1的計數(shù)值來改變脈寬,現(xiàn)在遇到的問題是,我感覺算法沒問題,因為如果只查表的話,輸出波形沒問題,但是加入計算的話,輸出波形就不對了,就這一句,T1CNT=(M*sin[i]+10000)*T0CNT/2/10000 ;這句轉(zhuǎn)換成匯編的話,我看了下要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 ; //規(guī)則采樣法公式簡化
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;
}