作者MasterChang (我爱ASM)
看板ASM
标题Re: [问题] 请问各位先进一个组合bit的问题
时间Wed Jul 11 01:10:08 2007
※ 引述《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)
1F:推 nosql:其实他有更正…在他之後出的书里面= = 10/26 23:49