1樓:
這個運算是通過移位的方式,將一個十六進位制的資料做十進位制調整,這條指令djnz r7,loop執行完之後,bcd碼的百位在50h,十位和個位在51h。 mov a,#0fdh,0fdh是待轉換的十六進位制資料。最終通過這一段指令
inc r1
mov a,#00h
xchd a,@r1
mov 52h,a
mov a,@r1
swap a
mov @r1,a之後,50h,51h,52h就依次存放的是百十個位了
2樓:匿名使用者
這程式也寫的太複雜了!既然51微控制器有div指令,並且只是把a中的數字轉變為bcd,那就用div直接運算:
mov a,#0fdh
mov b,#100
div ab
mov 50h,a
mov a,b
mob b,#10
div ab
mov 51h,a
mov 52h,b
計算完成,這樣50h就是百位數,51h是十位數,52h是個位數
將給定的一個二進位制數轉換成bcd碼的微控制器程式及其實驗結果
3樓:生活如歌
binbcd: mov b, #100 (100作為除數送入b中)
div ab (十六進位制數除以100)mov r3, a (百位數送r3,餘數放入b中)mov a, #10 (分離十位數與個位數)xch a,b (餘數放入a中,除數放入b中)div ab (分離出十位在a中,個位在b中)swap a (十位數交換到a的高4位)add a,b (十位數與個位數相加送入 a中)end將a中的二進位制數(比如c9h)轉換為bcd碼為201h,其中百位存在r3中(r3=02h),十位個位壓縮方式存在a中(a=01h)
關於mcs-51微控制器是如何將單位元組二進位制數轉化為bcd碼的問題
4樓:匿名使用者
乘除法的時候可以不考慮進位制的,比如說 #0ffh這個十六進位制數 存放於a中,#100這個十進位制數放於b中 然後div ab 這時 a等於#02h b等於#37h等於55
在然後假設a中的數為 ffh
binbcd:
mov b, #100 (b=100,十進位制100,)
div ab (a等於#02h,b等於#37h等於55)
mov r3, a (a=02h)
mov a, #10 (a=10=0ah,b=55=37h)
xch a,b (a=55=37h, b=10=0ah)
div ab (a=05h=5 , b=5=05h)
swap a (a=50h,b=05h)
add a,b (a=55h,這時十位各位的bcd嗎已經求出來了,將
37h=55轉換為55h
end1 請問這個程式求解的思路是什麼?
思路就是對一個數求模和求於來分離百位十位和個位
例如168
168/100=1餘68
68/10=6餘8
8/1=8餘0
這樣就分離了百位十位和個位
2 該程式的第二句"div ab"的解釋是十六進位制數除以100,可是a中應該存放的是一個八位的二進位制數,這是怎麼回事?
這個是你沒理解cpu存資料的方式,a中存放的其實歸根結底說是二進位制數,機器只認識二進位制數,對這段程式編譯之後我們輸入的十進位制100也變成二進位制數了,我們通常說十六進位制數是因為十六進位制數和二進位制數有位上的對應關係,比如1100 0110b=c6h 也就是說二進位制數每4位一段各自寫成十六進位制數就把二進位制轉換成十六進位制了,
3 最後為什麼要十位數與個位數相加,不是要分離十位數與個位數嗎?
我想如果你清楚bcd碼的含義你就明白了
bcd碼就是用十六進位制數來表示十進位制的數
例如:45h是等於十進位制的69的,但如果你說他是bcd碼他就代表十進位制數45
這樣你就會發現不是每個十六進位制數都是bcd碼的,例如aah就不是bcd碼,因為沒有aa這樣的十進位制數
我最後總結一下,就是我們所說的十進位制數也好十六進位制數也好,歸根到底機器都是要把他變為二進位制數的,機器也只認識二進位制數,這樣你就好理解了,我們不會處理不同進位制數之間的運算,運算時必須要把他轉換同進位制的數,機器也是這樣,只不過我們擅長的是十進位制的運算,而機器擅長的是二進位制運算,二進位制數位數多不方便我們就找了一個幫手十六進位制數
希望你能看得懂
5樓:做而論道
單位元組二進位制數,寫成十進位制,就是0~255。
該程式的第二句div ab除以100之後,a中是商(0~2),b中是餘數(0~99)。
a中的商,就是百位數,存放到r3。
餘數除以10之後,a中商是10位(0~9),b中是個位(0~9)。
十位數交換到a的高4位,再加上個位數,那只是題目中要求的存放方法而已。
如何用51微控制器控制舵機的?怎樣編寫程式啊?大哥幫幫忙
舵機copy是一種位置伺服的驅動器,適用於那些需要角度不斷變化並可以保持的控制系統。其工作原理是 控制訊號由接收機的通道進入訊號調製晶片,獲得直流偏置電壓。它內部有一個基準電路,產生週期為20ms,寬度為1.5ms的基準訊號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最後,電壓差的正負...
關於微控制器中if,else if 的用法
if.else if.這是預處理語句。預處理就是在進行編譯的第一遍詞法掃描和語法分析之前所作的工作。說白了,就是對原始檔進行編譯前,先對預處理部分進行處理,然後對處理後的 進行編譯。這樣做的好處是,經過處理後的 將會變的很精短。在微控制器中屬於條件編譯,也就是說當滿足條件,就將 if後面的語句進行編...
急求用c8051微控制器組合語言編寫程式實現判斷
假如你要判斷的數在r0裡面,將它與2相除,shuwei是奇偶判斷位,自己可以隨意定義在哪 shuwei bit 20h.1 mov a,r0 mov b,2 div ab cjne b,00h,jishu clr shuwei jishu setb shuwei shuwei為0則為偶數 為1則為奇...