• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
  • slider image 488
  • slider image 491
:::

論壇索引


Board index » All Posts (redyounger)




Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#1
新會員
新會員


參照:

Beee 寫道:
參照:

redyounger 寫道:
那麼要怎麼做才能提高FOSC呢?振盪器頻率是可以調的嗎?我不會組合語言,在C上有辦法改進嗎?萬分感激你的回覆


換石英振盪器, 振盪器頻率不可調 , 可以換
不會組語那就從頭學 , C 絕對比 組語 慢 三倍以上 , 想要發揮 MCU 的極限 只有組語

你的述求 , PIC24 , dsPIC 應該都能輕鬆達成
你的程式 跟本無認任何輸出 , 你要求的輸出到底是 :

0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0,1 .......

OR

0 , 1 , 2 , 4 , 8 , 4 , 2 , 1 , 0 , 1 ......



首先,應該道歉,我的這篇應當發在8-bit上,寫在16-bit里是弄錯了,pic18f4520是8-bit,先前沒有弄清。

組合語言,也就是彙編語言,我沒有學過,對於一個搞這個的人,在要用的時候應該盡其學,而不應有任何藉口推脫,所以我已經在找英國同學問他們學assembly language的資料了,希望能儘快有所領悟。

對於PIC24,dsPIC,我是不瞭解的。

我的程式要求就是輸出一個從0至31再至0的5-bit周波信號,要盡可能提高無delay的頻率,并在可以達到的範圍內,從輸入端選擇,1,2,4,8khz四種信號輸出。

關於振盪器,據我看到的c18 libraries說明書里是有選擇頻率的,最高可以到25MHz,但是我不知道怎麼調整,目前我選擇的是HS晶振模式,如果選擇HS-PLL可以達到 40MHz。但是如果通過調整振盪器來實現結果,雖然可行,但這樣一來就不能鍛煉programer的編程能力。所以在這裡,最好是能夠通過對code的改進來實現更高效率。

發表於: 2009/10/26 19:41
頂部


Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#2
新會員
新會員


那麼要怎麼做才能提高FOSC呢?振盪器頻率是可以調的嗎?我不會組合語言,在C上有辦法改進嗎?萬分感激你的回覆

發表於: 2009/10/24 20:22
頂部


請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
#3
新會員
新會員


不同的語句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
頂部






:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------