微控制器實驗

2023-01-22 10:48:02 字數 2979 閱讀 4289

數碼轉換實驗

學號: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亮,再...