① 單片機實驗 二進制到BCD轉換
51匯編不熟,給你寫個C的吧(轉非壓縮的BCD),加上注釋,你自己改成51匯編吧.
int i = 100; // i 用來做被除數,初值"100".
int idx = 0; // idx 用來確定存儲位置的偏移,初值"0".
while( i ) // 循環條件,被除數不為"0",則繼續循環.
{
Result[idx] = A / i; // Result 第 idx 偏移位置保存 A 整除 i 的值.
A -= Result[idx]*i; // A 的值 減 Result 第 idx 偏移位置 * i 的值.
i/=10; // 將 i 的值除以"10"
idx++; // Result的偏移值 加"1".
}
以上的思想是
A 整除 100 作為 百位上的BCD
(A-百位上的值) 整除 10 作為 十位上的BCD
(A-百位上的值和十位上的值) 作為個們上的BDC.
② 單片機的簡單實驗編程題
循環3次即可。
MOV R0, #20H ;加數1地址、和的地址
MOV R1, #30H ;加數2地址
CLR C
MOV R2, #3 ;循環3次
A_LOOP:
MOV A, @R0 ;取
ADDC A, @R1 ;加
MOV @R0, A ;存
INC R0
INC R1
DJNZ R2, A_LOOP
CLR A
ADDC A, #0 ;得到進位
MOV 23H, A ;保存
RET
③ 急求:單片機實驗
:
ORG 0030H
MOV 30H, #34H
MOV 31H, #56H
MOV 32H, #23H
MOV 33H, #90H
MOV 34H, #32H
MOV 35H, #68H
MOV 36H, #09H
MOV 37H, #75H
CALL SORT
SJMP $
;-----------------------------------------------------
SORT: ;最簡短、高效的排序程序.
MOV B, #7 ;第一輪排序時,比較7次.
S1: MOV R0, #30H ;數據區的起始地址.
MOV R7, B
CLR PSW.5 ;清除"交換"標志位.
S2: MOV A, @R0 ;取前一個數.
INC R0
CLR C
SUBB A, @R0 ;減後一個數,前<後時,Cy=1
S3: JC S4 ;有借位時,不用交換,轉移.
MOV A, @R0 ;取後一個數,准備交換.
DEC R0
XCH A, @R0 ;交換到前一個.
INC R0
XCH A, @R0 ;交換到後一個.
SETB PSW.5 ;設定"交換"標志位.
S4: DJNZ R7, S2 ;繼續本輪比較.
JNB PSW.5, ENDS ;如本輪沒有進行過交換,可提前結束.
DJNZ B, S1 ;下一輪,比較次數少一次.
ENDS:
RET
;-----------------------------------------------------
END
④ 16位單片機彩燈控制實驗,定時器2溢出中斷問題!
根據題目看 這里溢出中斷只是為了達到能讓人眼分辨出來的效果。 效果就像延時,但絕不等同延時。不管燈同亮同暗還是向左移動 都是採用一種不斷值行定時器2溢出中斷!也就是。一開始在main語句里 讓定時器2值行了溢出中斷,然後在中斷函數里值行相應的事情(如燈同亮同暗 向左移動)值行完後 他又給TCNT 這個值賦了相同的值,就他再值行一次中斷。
⑤ 51單片機實驗(關於定時器計數器)
6mz的晶振 可算出一個時鍾周期為2微秒,200毫秒去除一下2微秒就是10000,然後吧10000取16進制為 27A0 ,用 FFFF減27A0再加1 得 C860,用定時方式一,TL0 ,#60H
TH0, #C8H
⑥ 單片機定時/計數器實驗2-脈沖計數器
這是個簡易頻率計,程序如下:
;---------------------------------
ORG0000H
JMPSTART
ORG000BH
JMPT0_INT
;---------------------------------
START:
MOVTMOD,#51H;/*01010001T1計數,T0定時*/
MOVTH0,#HIGH(65536-50000);50ms@12MHz
MOVTL0,#LOW(65536-50000)
MOVTH1,#0
MOVTL1,#0
SETBTR0
SETBTR1
SETBET0
SETBEA
MOVR7,#20
SJMP$
;---------------------------------
T0_INT:;50ms執行一次
MOVTL0,#LOW(65536-50000);重新寫入初始值
MOVTH0,#HIGH(65536-50000);50ms@12MHz
DJNZR7,T0_END
MOVR7,#20
MOVP1,TL1
MOVP2,TH1
MOVTL1,#0
MOVTH1,#0
T0_END:
RETI
;---------------------------------
用PROTEUS模擬如下圖。
圖中信號的頻率是5000Hz,顯示的1388是16進制,這是題目中要求的形式。
⑦ 單片機實驗數碼轉換實驗代碼如何補充,補充過程及注釋解釋
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 位二進制整數存入R3R4 寄存器中,轉換為十進制整數,以組合BCD 形式存儲在
RAM 的20H、21H、22H 單元中。
2.2.4 實驗步驟
1. BCD 整數轉換為二進制整數
實驗參考常式:(Asm2-1.asm)
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R0, #20H ;BCD 存放高位地址
MOV R7, #03H ;BCD 碼0--255, 最多3 位
CLR A
MOV R4, A
LP1: MOV A, R4
MOV B, #0AH
MUL AB ;乘10
ADD A, @R0 ;加下一位的值
INC R0 ;指向下一單元
MOV R4, A ;結果存入R4
DJNZ R7, LP1 ;轉換未結束則繼續
SJMP MAIN ;設置斷點, 觀察實驗結果R4 中的內容
END
實驗步驟:
(1)輸入程序,檢查無誤後,編譯、鏈接程序,首先給系統復位,然後點擊命令進入
調試狀態;
(2)修改20H、21H、22H 單元的內容,如:00H,05H,08H;
(3)在SJMP MAIN 語句行設置斷點,然後運行程序;
(4)程序遇到斷點後停止程序運行,此時查看寄存器R4 的內容,應為3AH;
(5)重新修改20H、21H、22H 單元的內容,再次運行程序,驗證程序的正確性;
(6)實驗結束,按復位鍵將系統復位,點擊退出調試狀態。
2. 二進制整數轉換為十進制整數
圖2-2-1 程序流程圖
實驗參考常式:(Asm2-2.asm)
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R0, #22H ;轉換結果低位地址
MOV A, R0
PUSH ACC ;ACC 表示累加器A 的直接地址
MOV R7, #03H
CLR A
LP1: MOV @R0, A ;結果存儲地址清零
DEC R0
DJNZ R7, LP1
POP ACC
MOV R0, A
MOV R7, #16
LP2: PUSH ACC
CLR C
MOV A, R4 ;R4中為二進制數的低位
RLC A
MOV R4, A
MOV A, R3 ;R3中為二進制數的高位
RLC A
MOV R3, A
MOV B, #03H
LP3: MOV A, @R0
ADDC A, @R0 ;執行乘2 操作
DA A ;十進制調整
MOV @R0, A ;結果保存
DEC R0
DJNZ B, LP3
POP ACC
MOV R0, A
DJNZ R7, LP2
LJMP MAIN ;設置斷點觀察結果, 可進行下一次轉換
END
實驗步驟:
(1)編寫實驗程序,程序流程圖如圖2-2-1 所示,編譯、鏈接無誤後,進入調試狀態;
(2)修改R3R4 寄存器,例如A2H、FCH;
(3)在LJMP MAIN 語句行設置斷點,然後運行程序;
(4)程序停止後,查看存儲器20H 的內容,應為:04H、17H、24H;
(5)反復修改R3R4 寄存器的內容,運行實驗程序,驗證程序的正確性。
⑧ 8051單片機實驗。求助。
1,安裝KEIL C軟體
2,如果想軟體模擬的話,裝個DXP
3,如果是硬體上實踐的話,除了買單片機以及實驗需要的元器件,還要在電腦上下載個下載軟體用於把程序下載到單片機上。
4,這個實驗不需要看什麼書,直接去優酷看看相關流水燈視頻講解就可以了
⑨ 51單片機實驗:無符號雙位元組乘法運運算元程序
以前搞的子程序庫里的
(5) 標號: MULD 功能:雙位元組二進制無符號數乘法
入口條件:被乘數在R2、R3中,乘數在R6、R7中。
出口信息:乘積在R2、R3、R4、R5中。
影響資源:PSW、A、B、R2~R7 堆棧需求: 2位元組
MULD: MOV A,R3 ;計算R3乘R7
MOV B,R7
MUL AB
MOV R4,B ;暫存部分積
MOV R5,A
MOV A,R3 ;計算R3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;累加部分積
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;計算R2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;累加部分積
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;計算R2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;累加部分積
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET