来都来了,凑个热闹再走 :-)
想问下,8位 mcu编程,有一个 2 字节组成的数字,想拆分出个、十、百、千、万位。
目前是这样做的:
低 8 位,先除以 100,余数再除以10,这样就把低 8 位表示的数字分离出个、十、百位了;
高 8 位,如果不为0,那就循环它:
每轮循环依次给分离出来的个、十、百位,分别加6、5、2.从个位开始加,大于等于10,则向前一位进位。
接下来是实现。其中PASSEDSECONDSLOW和PASSEDSECONDSHIGH存储的是组成16位二进制的低、高8位;SECONDSDIGITS、SECONDSDIGITS +1、SECONDSDIGITS + 2、SECONDSDIGITS + 3和SECONDSDIGITS + 4存储分离出来的个、十、百、千和万位上不超过十进制9的数字:
- COMPSECONDSDIGITS:
- MOV A, PASSEDSECONDSLOW
- MOV B, #100D
- DIV AB
- MOV SECONDSDIGITS + 2, A
-
- MOV A, B
- MOV B, #10D
- DIV AB
- MOV SECONDSDIGITS + 1, A
- MOV SECONDSDIGITS, B
-
- MOV R7, PASSEDSECONDSHIGH
- CJNE R7, #00H, COMPSECONDSDIGITSLOOPL1
- JMP COMPSECONDSDIGITSEND
- COMPSECONDSDIGITSLOOPL1:
- MOV A, #6D
- ADD A, SECONDSDIGITS
- MOV B, #10D
- DIV AB
- MOV SECONDSDIGITS, B
- ADD A, SECONDSDIGITS + 1
- MOV SECONDSDIGITS + 1, A
-
- MOV A, #5D
- ADD A, SECONDSDIGITS + 1
- MOV B, #10D
- DIV AB
- MOV SECONDSDIGITS + 1, B
- ADD A, SECONDSDIGITS + 2
- MOV SECONDSDIGITS + 2, A
-
- MOV SECONDSDIGITS + 3, #00H
- MOV A, #2D
- ADD A, SECONDSDIGITS + 2
- MOV B, #10D
- DIV AB
- MOV SECONDSDIGITS + 2, B
- ADD A, SECONDSDIGITS + 3
- MOV SECONDSDIGITS + 3, A
-
- MOV SECONDSDIGITS + 4, #00H
- MOV A, SECONDSDIGITS + 3
- MOV B, #10D
- DIV AB
- MOV SECONDSDIGITS + 3, B
- MOV SECONDSDIGITS + 4, A
- DJNZ R7, COMPSECONDSDIGITSLOOPL1
- COMPSECONDSDIGITSEND:
- RET
复制代码
|