① 在單片機匯編語言中怎樣做除法運算(不用DIV指令)初步發現右移一次相當於除於2TKS!
可用移位、比較的方法實現任意位除法。右移一次相當於除於2,前提條件是原數必須是偶數。
② 單片機中帶進位的移位指令有什麼運算功能功能嗎
當我們進行數學運算時(10進制常規計算),5×10就是將5.0的小數點向右移動1位,也就是小數點不動,數字左移1位。除法同理,就是右移。
單片機的移位指令也一樣,不過,它是2進制的,乘除的是2而已。比如100b右移一位,變成10b,也就是4÷2=2。左移2位變成10000,也就是4×4=16。
移位的運算速度快,當我們用單片機系統進行運算時,如果想提高效率,使用這種方法是不錯的選擇。比如,我們為了提高精度,需要將一個整形數先乘一個系數,那麼2/4/8/16/32/64/128……都是不錯的選擇,而用10,100等就要差一些了。
拋磚頭,引美玉。
③ 8051單片機用匯編循環移位指令實現除法,被除數為2的倍數,怎麼編啊
很簡單呀,比如一個數除以4
MOV A,DAT
CLR C
RRC A
CLR C
RRC A
被除數是2的幾次方,就用一次右移指令。
④ 關於51單片機C語言除法的問題
需要使用'('和')'來代替'['和']', C語言中用()來確定運算優先順序, []是數學中的表達方式.
頭文件<math.h>是PC機編譯器C/C++里的頭文件, 需要確定51編譯器中是否有此頭文件.
/1024其實就是移位操作, 如果變數u的取值范圍足夠大, 可以使用移位操作, 即>>10來代替/1024. 像處理器這種東西, 最怕做的是除法, 代價很高, 速度很慢.
另外, 51單片機是8位處理器, double型和float型的取值范圍是一樣的.
-中國物聯網校企聯盟技術部
⑤ 單片機中怎樣利用移位法代替乘除法計算AD轉換結果
假設AD晶元的返回值為adate
則(zdate&0x0f)取十六進制低四位,
((zdate&0xf0)>>4)*10取十六進制高四位
相加轉化成十進制(dec);希望能幫到你!
⑥ 單片機 怎麼用位移的方法實現乘除法
因為在寄存器里的數都是二進制的,所以乘以2:左移一位;乘以4左移兩位;乘以8左移三位……依此類推(但要注意寄存器總共有多少位,防止溢出),除法用右移。
直接移位只能計算乘數(或除數)為2的n次方的乘(除)運算,對於一般的乘除法,還要配合加(減)法運算,比如a?9=a??3+a
實際上二進制數的基本運算即加,取反,移位等,通過變換來計算減,乘,除。
可以驗證,用單片機C語言編程計算乘數為2的n次方的乘法運算比乘數為一般數的乘法運算要快得多,就是因為前者只需直接移位,後者還需配合加法或經多步運算
⑦ 51單片機中12位雙位元組數(低12位)求平均數
;
MOV R0, #40H ;四個數據的起始地址
MOV R2, #4
MOV R3, #0 ;四個數據的和
MOV R4, #0
A_LOOP:
MOV A, R3
ADD A, @R0 ;加數據低位元組
MOV R3, A
INC R0
MOV A, R4
ADDC A, @R0 ;加數據高位元組
MOV R4, A
INC R0
DJNZ R2, A_LOOP ;
;-------------------------下面除以4,右移兩位即可
CLR C
MOV A, R4
RRC A ;先移高八位
MOV R4, A
MOV A, R3
RRC A ;後移低八位
MOV R3, A
CLR C ;再移動一次
MOV A, R4
RRC A
MOV R4, A
MOV A, R3
RRC A
MOV R3, A
;結果在 R4R3。
END
找出最大、最小,要比較雙位元組的數據。
全部循環一遍,所花費的時間,就太多了。
特別是多位元組的數據,特費時間。
不如,利用這些時間,多采樣幾個數據,累加後,取平均值。
用向右移位,代替除法,特別方便。
那麼,采樣數據的個數,宜取:4、8、16。
個數再多,好像也沒有必要了。
⑧ 單片機除法
單片機做除法,還是浮點? 你還真會想,這會讓單片機累死,最好先轉換成整形,用移位法,在用移位法代替除法,再移位得結構