хмм... Забавно... Как ты собираешься число 255 на двух разрядах показывать? Придется вычисления с плавающей точкой юзать...
Просто преобразовать двоичный в двоично - десятичный код:
Код:
|
;binary_to_bcd - 8-bits
;
;Input
; bin - 8-bit binary number
; A1*16+A0
;Outputs
; hundreds - the hundreds digit of the BCD conversion
; tens_and_ones - the tens and ones digits of the BCD conversion
binary_to_bcd:
CLRF hundreds
SWAPF bin, W ;w = A0*16+A1
ADDWF bin, W ;w = A0+A1
ANDLW 00001111b ;w = A0+A1 % 16
SKPNDC ;if A0+A1 › 16
ADDLW 0x16 ; w += 16
SKPNDC ;if w % 16 › 10
ADDLW 0x06 ; w += 6
ADDLW 0x06 ;w += 6
SKPDC ;if w ‹ 10
ADDLW -0x06 ; w -= 6
BTFSC bin,4
ADDLW 0x16 - 1 + 0x6
SKPDC
ADDLW -0x06
BTFSC bin, 5
ADDLW 0x30
BTFSC bin, 6
ADDLW 0x60
BTFSC bin, 7
ADDLW 0x20
ADDLW 0x60
RLF hundreds, F
BTFSS hundreds, 0
ADDLW -0x60
MOVWF tens_and_ones
BTFSC bin,7
INCF hundreds, F |
А чтоб не париться со всякой мурой и алгоритмами - кто мешает табличку забить? И через retlw выбирать? Не так уж и много... Тем более что младший разряд АЦП можно выкинуть принципиально - он только вредит
Типа, незначащий. Итого 128 значений всего.
Код:
|
00 00 00 00000000
01 01 01 00000001
02 02 02 00000010
03 03 02 00000010
04 04 03 00000011
05 05 04 00000100
06 06 05 00000101
07 07 05 00000101
08 08 06 00000110
09 09 07 00000111
0A 10 08 00001000
0B 11 09 00001001
0C 12 09 00001001
0D 13 10 00010000
0E 14 11 00010001
0F 15 12 00010010
10 16 12 00010010
11 17 13 00010011
12 18 14 00010100
13 19 15 00010101
14 20 16 00010110
15 21 16 00010110
16 22 17 00010111
17 23 18 00011000
18 24 19 00011001
19 25 19 00011001
1A 26 20 00100000
1B 27 21 00100001
1C 28 22 00100010
1D 29 23 00100011
1E 30 23 00100011
1F 31 24 00100100
20 32 25 00100101
21 33 26 00100110
22 34 27 00100111
23 35 27 00100111
24 36 28 00101000
25 37 29 00101001
26 38 30 00110000
27 39 30 00110000
28 40 31 00110001
29 41 32 00110010
2A 42 33 00110011
2B 43 34 00110100
2C 44 34 00110100
2D 45 35 00110101
2E 46 36 00110110
2F 47 37 00110111
30 48 37 00110111
31 49 38 00111000
32 50 39 00111001
33 51 40 01000000
34 52 41 01000001
35 53 41 01000001
36 54 42 01000010
37 55 43 01000011
38 56 44 01000100
39 57 44 01000100
3A 58 45 01000101
3B 59 46 01000110
3C 60 47 01000111
3D 61 48 01001000
3E 62 48 01001000
3F 63 49 01001001
40 64 50 01010000
41 65 51 01010001
42 66 51 01010001
43 67 52 01010010
44 68 53 01010011
45 69 54 01010100
46 70 55 01010101
47 71 55 01010101
48 72 56 01010110
49 73 57 01010111
4A 74 58 01011000
4B 75 58 01011000
4C 76 59 01011001
4D 77 60 01100000
4E 78 61 01100001
4F 79 62 01100010
50 80 62 01100010
51 81 63 01100011
52 82 64 01100100
53 83 65 01100101
54 84 65 01100101
55 85 66 01100110
56 86 67 01100111
57 87 68 01101000
58 88 69 01101001
59 89 69 01101001
5A 90 70 01110000
5B 91 71 01110001
5C 92 72 01110010
5D 93 72 01110010
5E 94 73 01110011
5F 95 74 01110100
60 96 75 01110101
61 97 76 01110110
62 98 76 01110110
63 99 77 01110111
64 100 78 01111000
65 101 79 01111001
66 102 80 10000000
67 103 80 10000000
68 104 81 10000001
69 105 82 10000010
6A 106 83 10000011
6B 107 83 10000011
6C 108 84 10000100
6D 109 85 10000101
6E 110 86 10000110
6F 111 87 10000111
70 112 87 10000111
71 113 88 10001000
72 114 89 10001001
73 115 90 10010000
74 116 90 10010000
75 117 91 10010001
76 118 92 10010010
77 119 93 10010011
78 120 94 10010100
79 121 94 10010100
7A 122 95 10010101
7B 123 96 10010110
7C 124 97 10010111
7D 125 97 10010111
7E 126 98 10011000
7F 127 99 10011001 |
А на выход прицепляешь два дешифратора типа 514ИД2 и все