⑴ 求單片機高手回答~RAM中有130個位元組,起始地址為500H,找出中間的最大值,放在600H中,試編
ORG 0000H
MOV R7,#00H
MOV R6,#130
MOV DPTR,#0500H
LOOP:MOVX A,@DPTR
CJNE A,R7,L1
L1:JC L2
MOV R7,A
L2:INC DPTR
DJNZ R6,LOOP
MOV DPTR,#0600H
MOV A,R7
MOVX @DPTR,A
SJMP $
END
⑵ 單片機收到的字元串中取中間字元,長度固定
接收的時候將字元轉存入數組,取長度一半的序數那個數組元素就是。比如7個,接收到R[0]-R[6],R[3]裡面就是你要的中間字元
⑶ 我給單片機用串口發送「A」「B」「C」三個數據,但是我想單獨提取其中一個該怎麼辦
串口向單片機發送數據,不論發送多少個,單片機也是一個一個接收的,如果單片機的串口設置成中斷方式,則每接收一個數據都會中斷一次,這樣,在中斷程序中按順序接收並保存在一個數組中,要先定義一個數組。假如,串口發送3個數據,那定義數組就3個元素。當接收完3個數據後,再從數組中逐個判斷所要的字元就行了。
⑷ 如何迅速取0至10000中間數
如果你要是取了數字單,那就是1萬1萬÷2就可以了,那也就是5000,所以說5000了,就是他們中間數字就這首位相加除以二就可以了
⑸ 我想把51單片機程序運行中的一個中間數據(變數n的值)存儲起來,使之掉電不丟失,重新上電後,
現在多數51單片機里都帶eeprom存儲空間的,例如:at89s系列和stc89c52,查找晶元手冊直接調用相關函數讀寫就可以了。如果51晶元不帶eeprom可以使用at24c02晶元,通過i2c和單片機通信,也是很簡單的。單片機的flash空間只是用來存儲程序的,一般單片機指令是不能直接修改自己的flash空間的。
⑹ 51單片機怎樣從一個非常大的數字裡面提取個十百千萬位等......
下面舉例說明萬千百十個的表示方法。其實很簡單,用除法取余就行。
i=a/b ;//取商
i=a%b;//取余
方法很多,以下是一例:
unsigned int wan,qian,,shi ,ge,
wan=i/10000;//除一萬取商,是萬位。
qian=(i/1000)%10;//先除1000,取商,商的個位是千位,所以再除10 取余。
=(i%100)/10%10;//先除100,取商,商的個位是百位,所以再除10 取余。
shi=(i%100)/10;//先除100,取余,商再除10 取余。
ge==(i%10;//除10取余。
不過閣下要知道整形量最大是65535,假如你的數據達到999999,你就要定義長整形量了。
unsigned long int i=999999;
如當I<10的時候 P0=table[i/10]; 個位
這樣的演算法 我寫的不行 ,請高手寫下 ,我看下我的出錯在什麼地方
i/10是取商啊,怎麼可能是個位呢?是十位。I<10的話,一定是0了。
移位的方法不行,移位是2進制運算。你這個是十進制。
⑺ 51單片機串口接收到一串16進制的數據,怎樣能取出中間的一個位元組然後做處理呢
這里和幾進制的數據沒關系,不管是16進制,還是10進制,還是二進制,它所存儲的數值,都是不變的。要處理接到數據,必須做協議,否則,你不知道這一串數據,哪個是第一個位元組,哪個又是中間位元組。
⑻ 在單片機中通常將一些中間計算結果放在什麼地一萬
單片機中,計算的中間結果一般放在自己定義的變數中,放置位置根據變數的數據類型而定
DATA型數據,放置位置為內部寄存器。
XDATA型數據,放置位置為擴展的外部數據存儲器。
⑼ 單片機串口向電腦串口調試助手發送一組數字,取這組數的前兩位給a中間3位給b最後兩個給c : 用C語言編程
程序太大,這里字數有限
我也曾為此懊惱很久,查閱大量資料
後來還是自己研究出來的,有效的解決辦法
如果你真想研究這個,我倒是可以幫你研究研究
我的資料裡面有我的群號,你可以加進來
⑽ 怎麼取數組的中間值
已知數組 a[N],目前我想到兩種方法:
先排序(一般使用快排 qsort),時間為 O(nlogn),取中間數 a[N/2]
利用選擇排序,或冒泡排序,控制循環次數為 N/2 即可。因為這些排序每趟都能得到一個當前最大或最小值,所以執行完 N/2 趟後,就能取得中間數。時間為 O(N^2)