8051 中的二進位制到 BCD 轉換
在這個問題中,我們將學習如何將一個 8 位二進位制數轉換為其等值的 BCD 數。二進位制數儲存在位置 20H 處。轉換完成後,結果將儲存在 30H 和 31H 處。30H 處儲存 MS 部分,31H 處儲存 LS 部分。
因此,我們假設資料是 D5H。程式將 D5H 的二進位制值轉換為 BCD 值 213D。
地址 | 值 |
---|---|
. . . | |
20H | D5 |
21H | |
. . . |
程式
MOVR1,#20H;Takethe address 20H into R1 MOVA,@R1;Takethe data into Acc MOVB,#0AH;LoadB with AH = 10D DIVAB ;DivideA with B MOVR5,B;Storethe remainder MOVB,#0AH;LoadB with AH = 10D DIVAB ;DivideA with B MOVR1,#30H;Loaddestination address MOV@R1,A;Storethe MS portion MOVA,B;LoadB content to A SWAPA;Swapthe nibbles ADDA,R5;Addstored remainder with A INCR1;Increasethe address MOV@R1,A HALT: SJMPHALT
這裡,我們只是將二進位制數放入了累加器。然後除以累加器的 0AH(10D)的內容。因此,餘數部分儲存在一個單獨的暫存器中。稍後將它相加。再次使用 0AH 除數商,並生成 MS 位。儲存 MS 位後,將暫存器 B 中的數字獲取到累加器中。交換累加器的半位元組以在 LS 位生成四個零。然後將先前儲存的餘數相加以生成結果。
輸出
地址 | 值 |
---|---|
. . . | |
20H | D5 |
21H | |
. . . | |
30H | 02 |
31H | 13 |
. . . |
廣告