Re: [問題] 請問各位先進一個組合bit的問題
※ 引述《ck1362 (單晶片控制)》之銘言:
: 接著把計時的時間(TH0與TL0)給輸出至七段顯示器
[略]
: → ck1362:恩...我的意思是我現在可能有一筆16bit的資料,但是8051的暫 07/10 23:09
: → ck1362:器是8bit,這樣我無法使用一些邏輯運算或是搬移的指令,我是 07/10 23:11
: → ck1362:有想過自定義出一個16bit的暫存器,可是我無法使用指令來處 07/10 23:12
: → ck1362:理這筆資料了XD 07/10 23:14
: → ck1362:恩,8051只能處理8bit的資料,而我現在要把TH0與TL0兩個8bit 07/11 00:11
: → ck1362:的值給組合成16Bit的值,但是我又必須對這16bit的值作處理 07/11 00:12
: → ck1362:所以不知道該如何下手@@ 07/11 00:14
你應該是想說把TH0和TL0存在RAM 空間上,然後透過四則運算
去算出每個七段的值。我不知道你的七段顯示有幾位。不過除
非是當場邊算邊顯示,不然每個七段顯示的值都應會佔到至少
4個bits,或是偷懶直接用8bits存。那你的四則運算就要自己
寫。
例如32位元除法:你可以改成16位元版本,意思是一樣的....
這是之前參考8051單晶片 徹底研究--基礎篇 後面的程式碼,
不過很不幸書上的code有錯,下面是後來自己修正過的,雖然
有Mail給旗標請他們勘誤,不過新刷的書還是沒修正...XD
裡面還會呼叫一個SUB32,他是一個32位元減法的副程式,減法
比較簡單我就不PO了....
;32bits Divide
;BUF:12Bytes
;BUF[3]BUF[2]BUF[1]BUF[0] = BUF[3]BUF[2]BUF[1]BUF[0] / BUF[11]BUF[10]BUF[9]BUF[8]
;Work Area:BUF[7]BUF[6]BUF[5]BUF[4]
;Using reg R0,R1,R2,R3
DIV32:
MOV R1,#(BUF+4)
CALL CIDM4 ;清除Work Area
MOV R3,#32 ;SHIFT COUNT
CLR C
F6: MOV R1,#BUF
MOV R2,#(BUF+4)
F7: MOV A,@R1
RLC A
MOV @R1,A
DJNZ R2,F7
MOV R0,#(BUF+7)
MOV R1,#(BUF+11)
MOV R2,#BUF
CALL IDC
JC F8
MOV R0,#(BUF+4)
MOV R1,#(BUF+8)
CALL SUB32
F8: CPL C
DJNZ R3,F6
MOV R1,#BUF
MOV R2,#BUF
F9: MOV A,@R1
INC R1
DJNZ R2,F9
RET
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.132.23.74
※ 編輯: MasterChang 來自: 140.132.23.74 (07/11 01:14)
推
10/26 23:49, , 1F
10/26 23:49, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 5 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章