數碼轉換實驗
學號:1042402025姓名:張炎峰專業:電氣工程與自動化
2.2.1、實驗目的
1、掌握不同進製數及編碼相互轉換的方法,加深對數碼轉換的理解;
2、熟悉keil c51整合開發環境的操作及程式除錯方法。
2.2.2、實驗裝置
pc機一台,td-nmc+教學實驗系統、或「td-pit++教學實驗系統+td-51系統平台」、或「td-pite教學實驗系統+td-51系統平台」
2.2.3、實驗內容
1、將bcd碼整數0~255存入片內ram的20h\21h\22h中,然後轉換為二進位制整數00h~ffh,儲存到暫存器r4中。
2、將16位二進位制整數存入r3、r4暫存器中,轉換為10進製整數,以組合bcd形式儲存在ram的20h\21h\22h單元中。
2.2.4、實驗步驟
1、二進位制整數轉換為十進位制整數
實驗參考例程:
org 0000h
ljmp main 程式初始清零
org 0100h
main: mov r0,#22h //轉換結果低位位址存入r0
mov a,r0將轉換結果低位位址壓入堆疊
push acc
mov r7,#03h
clr a
lp1: mov @r0,a
dec r0暫存器a中此時為零,通過將他賦值給20h、21h
djnz r7,lp1 22h將他們三個暫存器清零
pop acc將22h賦值給r0,既轉換結果低位位址賦值給r0
mov r0,a
mov r7,#16 用於作為控制16位二進位制數轉換的迴圈控制數
lp2: push acc儲存轉換結果地位位址
clr c將進製標誌位清零,在下面對r4的迴圈左移中將r4
低位賦值為零
mov a,r4首先對r4進行迴圈左移,並將其r4最高位存到
rlc a進製標誌位,r4最低位賦值為0,然後將r3迴圈
mov r4,a左移,並將r4的最高位賦值給r3的最低位,
mov a,r3達到16位二進位制數整體左移一位並將16位二進
rlc a制數的最高位儲存到進製標誌位
mov r3,a
mov b,#03h十進位制數有六位,需占用三個儲存單元,用來作為迴圈控制數
lp3: mov a,@r0這幾行的目的是為了進行r0*2的操作,沒有
addc a,@r0採用乘法運算是為了通過進製標誌位傳遞進製,避免
da a使用乘法程式帶來的進製的問題,使得程式簡單
mov @r0,a 把十進位制數存入儲存單元中
dec r0位址自減,指向高位位址
djnz b,lp3迴圈計算六位二進位制數,完成一位二進位制數的轉換
pop acc再將轉換結果的低位位址賦值給r0
mov r0,a
djnz r7,lp2迴圈載入16位二進位制數,以完成轉換工作
ljmp main
end(1)、編寫實驗程式,程式流程圖如圖所示,編譯鏈結無誤後,進入除錯狀態。
我的是實驗程式如下:
(2)、修改r3、r4暫存器,例如:a2h、fch;
(3)、在ljmp main 語句行設定斷點,然後執行程式;
(4)、程式停止後,檢視暫存器20h的內容,應為:04h、17h、24h;
(5)、反覆修改r3、r4暫存器的內容,執行試驗程式,驗證程式的正確性。
(6)實驗程式分析
二進位制轉換為十進位制的計算過程:
a2fc(h)= 41724(d)
a2fc(h)=1010 0010 1111 1100(b)
41724(d)=1×2^15+0×2^14+1×2^13+0×2^12+0×2^11+0×2^10
+1×2^9+0×2^8+1×2^7+1×2^6+1×2^5+1×2^4
+1×2^3+1×2^2+0×2^1+0×2^0
實驗參考例程的計算過程:
首先,儲存轉換結果地位位址;然後,結果儲存位址清零;然後,復位進製標誌,對二進位制數(a2fc)進行迴圈左移一位,取出最高位(此時為1),放入到進製標誌位中,此時,r3r4中剩下的是0100 0101 1111 1000(b)(45f8(h));然後是將結果位址中的數(初值為0)×2,再加上進製標誌位(即二進位制數最高位),進行十進位制調整(此時,×2計算與十進位制調整不會同時產生進製,因為任意乙個十六進製制的兩位數×2+1 ,若產生進製,則剩下的兩位16進製制數進行十進位制調整必定不會產生進製);接下來是對原二進位制數的第二位的進行計算;二進位制數總共有16位,所以迴圈次數設為16。
假設結果儲存位址中的十進位制數是 a i ;16位二進位制數的每一位的值是 b i
初始值a0 =0
第一次迴圈 a1 = a0×2+b15
第二次迴圈 a2 = a1×2+b14=(a0×2+ b15)×2+b14
= b15×2+ b14×2^0;
第三次迴圈 a3 = a2×2+b13=(b15×2+ b14)×2+b13
= b15×2^2+b14×2^1+b13×2^0
第四次迴圈 a4 = a3×2+b12=(b15×2^2+b14×2+b13)×2+b12
b15×2^3+ b14×2^2+ b13×2^1+ b12×2^0
以此類推……
第十六次迴圈 a16 = a15×2+b0
=b15×2^15+b14×2^14+b13×2^13+……+b1×2^1+ b0×2^0
=1×2^15+0×2^14+1×2^13+0×2^12+0×2^11
+0×2^10+1×2^9+0×2^8+1×2^7+1×2^6
+1×2^5+1×2^4+1×2^3+1×2^2+0×2^1+0×2^0
=41724(d)
由於該程式在每一次迴圈(即每一次計算)時都進行了一次十進位制調整,所以十六次迴圈計算可以用最後乙個總的表示式進行十進位制計算。
微控制器實驗
實驗一實驗環境的建立 實驗目的 學習建立實驗所需的 工作環境。實驗內容 1 進行proteus軟體的安裝 2 進行keilc51 uvision4軟體的安裝 3 掌握keilc51 uvision4和proteus聯調的方法。實驗背景知識 1 proteus軟體簡介。proteus isis是英國l...
微控制器實驗
實驗五 外部器件應用實驗 學院物理與機電工程學院 專業電子科學與技術 班級2014級2班 學號201410530227 姓名舒小飛 指導老師柳妮 實驗五 外部器件應用實驗 一 實驗目的 1.學習ms 51微控制器內部的定時 計數器的使用和程式設計方法 2.熟練編寫定時器,計數器的定時程式和中斷程式 ...
微控制器實驗總結
微控制器實驗1 實驗2 實驗1 流水燈 主函式 aa 0xfe while 1 錯誤 從燈1跳到燈2的時間過短,在燈2處,不在迴圈。改正 while 1 注意 void delay uint 放置定義下 void delay uint xms 舉一反三 左移主程式 燈1亮,過0.5s,燈1 2亮,再...