用51的兩個(gè)定時(shí)器,T0控制頻率,T1控制脈寬,實(shí)現(xiàn)載波比N=150的SPWM,用的是規(guī)則采樣法,在T0的中斷里查表計(jì)算T1的計(jì)數(shù)值來改變脈寬,現(xiàn)在遇到的問題是,我感覺算法沒問題,因?yàn)槿绻徊楸淼脑挘敵霾ㄐ螞]問題,但是加入計(jì)算的話,輸出波形就不對(duì)了,就這一句,T1CNT=(M*sin[i]+10000)*T0CNT/2/10000 ;這句轉(zhuǎn)換成匯編的話,我看了下要40句,應(yīng)該是這條語句拖住了單片機(jī),應(yīng)高手指點(diǎn)一下怎么辦
核心程序:
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;
}