Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
|
||||
---|---|---|---|---|
新會員
|
那麼要怎麼做才能提高FOSC呢?振盪器頻率是可以調的嗎?我不會組合語言,在C上有辦法改進嗎?萬分感激你的回覆
發表於: 2009/10/24 20:22
|
|||
|
請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
|
||||
---|---|---|---|---|
新會員
|
不同的語句statement算作不同的move型instructions,在執行時都要花費Tcy,設適當的delay,以期達到需要的頻率。下麵寫的是一個為DAC提供三角波型號的program,在執行時想要達到1,2,4,8kHz的信號。使用的是PIC18LF4520,FOSC是10MHz。
delay語句參數是按照理論計算得出的,但在安裝上DAC以後發現頻率偏差較大,具體說是太慢,程式效率低。怎樣才能實現更高的頻率呢?這個程式沒有delay時最高能達到4kHz,每個子while語句怎樣簡化程式才能實現8kHz甚至更高呢? #include<p18f4520.h> #include<delays.h> void main(void) { int value; ADCON1=0x0F; TRISA=0x0f; TRISD=0xE0; LATD=0x00; while(1) { while(PORTA==0x01) { for(value=0;value<32;value++) { LATD=value; Delay10TCYx(4); } for(;value>1;value--) { LATD=value-2; Delay10TCYx(4); } } while(PORTA==0x02) { for(value=0;value<32;value++) { LATD=value; Delay10TCYx(2); } for(;value>1;value--) { LATD=value-2; Delay10TCYx(2); } } while(PORTA==0x04) { for(value=0;value<32;value++) { LATD=value; Delay10TCYx(1); } for(;value>1;value--) { LATD=value-2; Delay10TCYx(1); } } while(PORTA==0x08) { for(value=0;value<32;value++) { LATD=value; Delay1TCY(); Delay1TCY(); Delay1TCY(); Delay1TCY(); Delay1TCY(); } for(;value>1;value--) { LATD=value-2; Delay1TCY(); Delay1TCY(); Delay1TCY(); Delay1TCY(); Delay1TCY(); } } } }
發表於: 2009/10/23 4:27
|
|||
|