音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網
技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng)
驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe

關于pic在c語言中乘除法的問題 請高人指點

作者:w2004 欄目:單片機
關于pic在c語言中乘除法的問題 請高人指點
關于pic乘除法的問題 請高人指點
小弟最近剛學pic單片機 看到pic系列大部分都沒乘法器 得知可以用左移和右移及加減法來解決
但我準備用c編程
請問c中關于乘除法的部分是直接寫(比如a×b)還是要編一段專用的乘除法子程序呢

2樓: >>參與討論
hotpower
既然是C肯定就不需多操心了
 
3樓: >>參與討論
computer00
看來樓主對C不熟……
 
4樓: >>參與討論
hotpower
00又來搞PICC了???
 
5樓: >>參與討論
jimmy shi
:)
即使用C寫程序也可以優(yōu)化,這里有寫經驗
1/. 乘法...盡量用2的"權", 比如乘法,可以乘2,4,6,8,16,32,64....編譯器會自動優(yōu)化成左右移,而不用太多代碼. 當然你也可以乘7,9...任何不是2的"權"值,各位知道該怎么做,而代碼不至于太大嗎?
2/. 除法...參考1/. 相信各位已經明白怎么做了 :)


6樓: >>參與討論
computer00
沒有啊,以前搞過一段時間,16FX那些,不好玩……
發(fā)現(xiàn)51是最容易玩的,嘿嘿…………


PS:PICC——中國人民保險公司?

7樓: >>參與討論
jimmy shi
代碼,速度優(yōu)化
另外,假如你有很多循環(huán)指令,希望大家不要用
for( i=0, i<100,i++) 之類的指令,最好是
for(i=100,i=0,i--)之類代替之,這樣一來代碼會小很多,而且速度快多了,有知道是為什么的嗎?


8樓: >>參與討論
sunmoongm
結束條件的判斷,不明白的用匯編寫一下
 
9樓: >>參與討論
systemchip
Jimmy的問題很好
我的理解是:

第一種遞增的方法:如果是判斷其是否小于100時候,反匯編時候的指令應該是
用INCF后,還要加入判斷跳轉(是否小于100).
第二種遞減的方法:遞減而且判斷其是否為零的指令有DECFSZ,這樣判斷跳轉會比上面的方法節(jié)省指令.

從這兩種方法延伸:如果我判斷其循環(huán)是否為一百次.循環(huán)為:

for (i=156,i=0,i++)
也可用for (i=100,i=0,i--)

在這樣兩種用法下:生成的代碼是一樣的.
如果理解不對的話,請指正!

10樓: >>參與討論
jimmy shi
GOOD!
需要補充的是,使用遞減的方法速度更快!可以用STOPWATCH跑跑。。。


11樓: >>參與討論
jimmy shi
上面關于遇到乘法,而乘數(shù)不是2的權值的時候?
1/。 如何處理呢?比如乘以9,可以先乘以8 ,然后再加一次
     比如 A x 9  = A x 8 + A
1/。遇到除法呢?
     比如 A / 9 = A / 8 - A     對不?
     這樣做會很快,而且代碼小,不比匯編差。。。
結論:假如要用好C語言,先了解架構和匯編集。

12樓: >>參與討論
systemchip
奧妙在哪里?
請教jimmy, 如果同樣循環(huán),用遞增和遞減的方法,如果反匯編出來的語句一樣,而且所用指令的周期一樣,那么為什么會遞減的速度會快呢?

如:1.
AAA:
   MOVLW 0x0FF
   MOVWF WORK1
   NOP
   INCFSZ  WORK1
   BNZ    AAA
   NOP
2.

AAA:
   MOVLW 0X01
   MOVWF WORK1
   NOP
   DECFSZ WORK1
   BNZ   AAA
   NOP

如果第二個循環(huán)比第一個快的話,她的奧妙在哪里呢?

13樓: >>參與討論
jimmy shi
兄弟,你覺得PIC16有INCFSZ指令嗎?  :)
 
14樓: >>參與討論
jimmy shi
另外,你的匯編寫的不是很好!
 for(i=0;i<250;i++) do_func();
      //執(zhí)行 250 次,耗費 3251 cy
      1617 01B8 clrf 0x38
      1618 260F call 0x60F
      1619 0AB8 incf 0x38
      161A 3008 movlw 0xFA
      161B 0238 subwf 0x38,W
      161C 1C03 btfss 0x3,0x0
      161D 2E18 goto 0x618

      for(i=250;i!=0;i--) do_func();
      //執(zhí)行 250 次,耗費 2502 cy
      1621 3008 movlw 0xFA
      1622 00B8 movwf 0x38
      1623 260F call 0x60F
      1624 0BB8 decfsz 0x38
      1625 2E23 goto 0x623 

15樓: >>參與討論
systemchip
好, JIMMY寫得非常清楚! :)
 
16樓: >>參與討論
jimmy shi
其實用C語言做事還是很有效率的
 1/。 可以使用混合編程來實現(xiàn)速度與結構的優(yōu)化。有些地方可以直接給寄存器賦值的時候可以直接。。。比如 ADCON1 = 0X55;(這樣做和匯編沒什么大區(qū)別,可讀性不好,可移植性差,但是效率高)
2/。 但是按照C語言提供的庫函數(shù),可以寫成:OpenADC( , , , ,....)會生成很多BSF。。。BCF。。。指令。 (但是可移植好,易理解)對于高端芯片無所謂,對于低端MCU 就要對有限的FLASH精打細算,細水長流。

17樓: >>參與討論
child_hood
除法怎樣解決呢
A/10=?            A / 9 = A / 8 - A ?不對吧

18樓: >>參與討論
w2004
遇到已知乘除法時可以解決但遇到x×y呢
 
19樓: >>參與討論
laden
很難的!
尤其是多字節(jié)的除法。
這玩意沒有帶位位的加減法指令,在做多字節(jié)的四則運算時很麻煩的。
PIC的指令確實沒有51的指令方便!

20樓: >>參與討論
w2004
總覺得硬件乘法器和功耗有關
總覺得硬件乘法器和功耗有關 以低功耗為賣點的彈片機都沒硬件乘法器
像pic MSP430
不知哪位大俠可以解釋一下

21樓: >>參與討論
jimmy shi
恐怕是成本原因!
 
22樓: >>參與討論
小馬
硬件乘除法用的門比較多,執(zhí)行所用時鐘數(shù)較多,不便統(tǒng)一。
本來簡單單片機用的RISC,面向控制較多,誰又用它做對速度要求較高的數(shù)值計算呢,慢一點的模擬算法絕大多數(shù)情況并不影響實際設計和應用。

23樓: >>參與討論
ximeng
PIC有的芯片是帶C的加減!
TO:laden
PIC16系列的的確沒有帶進位位的加減法,但并以為著PIC芯片就沒有這條指令,18系列的就有。再說每種芯片都有其各自的優(yōu)點,都有其自身的長處,要如你老兄所說的估計MICROCHIP早關門了,也不會占有這么大的市場份額了,呵呵!


* - 本貼最后修改時間:2005-12-28 9:38:25 修改者:ximeng

24樓: >>參與討論
大狗_lwl
確實要進行優(yōu)化處理
學到東西了

25樓: >>參與討論
eeproom
不對吧,樓上兄弟
  MSP430有乘法器喲。

26樓: >>參與討論
libin5337
pic子程序庫
在這本書里面有現(xiàn)成的程序參考!
采用數(shù)據結構的原理。

27樓: >>參與討論
laixiang
便攜式串口分析儀
 我們公司有一個產品--便攜式串口分析儀,串行數(shù)據的調試工具.具有如下特點:
1、用LCD顯示接收發(fā)的數(shù)據.
2、可以設計串口的參數(shù)
3、能夠分析485,232,TTL傳行數(shù)據
4、用表筆的方式探測信號。
   

                          有意者請聯(lián)系:
                                   QQ :4829913
                                   郵箱:laixianglin@sina.com
                                   電話:01062105882-615
                                   聯(lián)系人:賴先生


28樓: >>參與討論
RobertJ
交給編譯器就行了
 
29樓: >>參與討論
wuzhiyi
致jimmy shi
拜讀大俠在此帖中的跟帖,你對PIC單片機太熟了!
想和你聯(lián)系,如果你愿意,可以把你的E-mail發(fā)給我,以后定有合作機會,我的E-mail是:

      wuzhiyishanghai@yahoo.com.cn

30樓: >>參與討論
陳雙君
北大
北大,我想加分

31樓: >>參與討論
lwen1999
是否有必要優(yōu)化
我們用C的目的是什么?不就是為了結構化,易移植嗎?如果為了節(jié)省些空間或運行時間而做一些所謂的優(yōu)化,使程序結構不好,不易讀,不易移植,那用C還有什么好處?比如:X*9一定有搞成X*8+X,我覺得太過勉強。如果MCU的空間真的很寶貴,那為何不直接用匯編。同意for(;x>0;x--)的用法,但這種用法用時x一定得是無符號數(shù),有符號數(shù)的話只能到127,用時要小心。

參與討論
昵稱:
討論內容:
 
 
相關帖子
幫忙看看我的ICD2哪兒有問題?
在ICD2硬件調試時,發(fā)現(xiàn)堆棧觀察器不能用,是原來就是這樣!
請教PIC16C54C的程序問題
軟件調試問題,標志位己經是1但不跳轉!!
求助:一個很簡單的單片機語句
免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號