Bin10bitBCD Code

Дорогие друзья, Привет!
Алгоритм на предыдущей записи реализован в программный  код, MpLab v.4.05 и встроенный ассемблер MPassemb 5.76  под эту версию. Это очень важно.
Текст — кода — ниже, комментарии — на английском… Контроллер  Pic16F(L)1855. Код без изменений ляжет под 76 контроллер — 40 ног, тот же выпуск по дата_шит. Config Word — Debud mode. Закомментированные строки — отмечены впереди (;) — точкой с запятой. — они из программы Микрочип — AN526  с косяками… — Это был сложный проект, самое актуальное преобразование в измерениях аналогового мира…  Мои комментарии на английском — взбодрят продвинутых юзеров, а также их родителей ( песенка из м-ф Еролаш — Мальчишки и Девчонки, а также их родители…))). Счастья, друзья!!!

Итак, код из  Notepad++:


;RES_VECT CODE 0x0000 ; processor reset vector
; GOTO START ; go to beginning of program


;MAIN_PROG CODE ; let linker place main program


; GOTO $ ; loop forever

list p = 16f18855

; CONFIG1 for p16f1509
; __config 0x1A4
; __config 0x19FF

; __config 0xD7EC
; __config 0xF7FE
; __config 0xC89F
; __config 0xDFFF
; __config 0xFFFF

UDATA 0x20;Specify RAM
Temp_N res 1; Counter loop
delcntr2 res 1
delcntr3 res 1; counter for 1,625 sec delay
d1cc res 1; RA0? digit common anode drives
d2cc res 1; RA1
d3cc res 1; RA2
dc1 res 1;binary d1cc
dc2 res 1;binary d2cc
dc3 res 1;binary d3cc
CountB res 1;
temp res 1;equ 17
H_byte res 1; equ 10
L_byte res 1; equ 11
R0 res 1; equ 12 ; RAM Assignments
R1 res 1; equ 13
R2 res 1; equ 14
;Port B
;d4cc res 1; set 0
; Block termo variables
PointerB res 1; 0x26 address
DGcnt res 1;
BIN_TEMP res 1;
;HEX_TEMP res 1;
; Block ADC variables
PhaseL res 1;
PhaseH res 1;
Count res 1; counter delay for Tacq
;section of Hex to Decimal convertion
NUME res 1 ;EQU 0x40;15 ; Memory Cell for temp divident prev m.cell for PIC18
QU res 1 ;EQU 0x41;20 ; Memory Cell for quotient
;RMMD_L res 1;EQU 0x42 Low digit -d3cc
;RMMD_M res 1;EQU 0x43 Middle digit -d2cc
;RMMD_H res 1;EQU 0x44 High digit — d1cc
;MYNUM res 2;EQU 0xFD Turget number in hex. BIN_TEMP// FDh = 253 (decimal)
MYDEN res 1;EQU D’10’ ; 253/10 My divider is 10

; code start from here

org 0x0000 ; processor reset vector
GOTO START ; go to beginning of program

;org 0x0004
Interrupt CODE; 0x04

MAIN_PROG CODE ; let linker place main program

; movlw B’01000001′

; p.153 opt_reg//b.7 weak-up DSBL//enbl;b.6 itrp on rising
;b.5 Intern instr cycle Fosc/4; b.2-0 Prsc 1/4;
; movwf OPTION_REG;

banksel STATUS
movlw B’00011000′
movwf STATUS

;movlw B’00000000′; AN4 unimplements 1// 1- input
;movwf ANSELA
movlw B’00001000′ ;set «0» port bits outp, b4 — input
movwf TRISA

; LIST P = 16C54, n = 66
; Binary To BCD Conversion Routine
; This routine converts a 16 Bit binary Number to a 5 Digit
; BCD Number. This routine is useful since PIC16C55 & PIC16C57
; have two 8 bit ports and one 4 bit port ( total of 5 BCD digits)
; The 16 bit binary number is input in locations H_byte and
; L_byte with the high byte in H_byte.
; The 5 digit BCD number is returned in R0, R1 and R2 with R0
; containing the MSD in its right most nibble.
; Performance :
; Program Memory : 35
; Clock Cycles : 885
; Program: B16TOBCD.ASM
; Revision Date:
; 1-13-97 Compatibility with MPASMWIN 1.40
;count equ 16
;temp equ 17
;H_byte equ 10
;L_byte equ 11
;R0 equ 12 ; RAM Assignments
;R1 equ 13
;R2 equ 14
; include «»
B2_BCD bcf STATUS,0 ; clear the carry bit
movlw .10
movwf CountB
clrf R0
clrf R1
clrf R2

movlw 0xA0;
movwf FSR0; open indeirect bank 0xA0,0xA1,0xA2
movlw 0x0F
movwf INDF0 ; Data inR0 — cell N0
movlw 0x10
movwf INDF0 ;FSR0 Data in R1 — ctll N1
movlw 0x11
movwf INDF0 ; Data in R2- cell N2

Loop10 rlf H_byte,1
btfsc STATUS,C
incf R0,1;+1 MSD
;lslf L_byte; shift left B’11011100′ after B’10111000′

;STEP N 2 for R0
lslf R0,1;
rlf H_byte,1
btfsc STATUS,C
incf R0,1; +1 MSD

;STEP N3-0 for R0=B’0000 0101′ L_byte=B’1011 1000′
; Low byte
rlf R0,1;
rlf L_byte,1; shift left low byte — after B’0111 0000′
btfsc STATUS,C
incf R0,1
;Check low L_tetrada R0 for =>5

;STEP N 3-1
; rlf R0,1

movlw 3
btfsc R0,2
addwf R0,1 ; if L_T=5 of R0 then R0+3
; R0= B’1000′
;xxxxxxxxxxx—check farther code — !!!!!!!!!!!!!!

;STEP N4 — after Step n3 R0=B’0000 1000′ L_byte=B’1011 1000′
;R0=B’0001 0001′; L_byte=B’0111 0000′

rlf R0,1;
rlf L_byte,1; shift left low byte — after B’0111 0000′
btfsc STATUS,C
incf R0,1

;STEP N5 After Stp R0=B’0010 0010′ L_byte B’1110 0000′

lslf R0,1;
rlf L_byte,1; shift left L_byte — after B’0111 0000′
btfsc STATUS,C
incf R0,1

; STEP N6(0) After step R0=B’0100 0101′ L_byte B’1100 0000′
rlf R0,1;
rlf L_byte,1; shift left low byte — after B’0111 0000′
btfsc STATUS,C
incf R0,1 ; code — right — o.k.

;STEP N6(1) Adding to L_byte (B’0101′) + 3 (B’0011′)
;After step R0=B’0100 1000′ L_byte B’1100 0000′

movlw 3
btfsc R0,2
addwf R0,1 ; if L_T=5 of R0 then R0+3
; R0= B’1000′

;STEP N7 After Stp R0=B’1001 0001′ L_byte B’1000 0000′
rlf R0,1;
rlf L_byte,1; shift left low byte — after B’1000 0000′
btfsc STATUS,C
incf R0,1 ; code — right — o.k.

;STEP N7-1 Add Hx30=B’0011 0000′ to R0 B’1001 0001′
;After Stp R0=B’1100 0001′ L_byte B’1000 0000′ — the same
movlw 30
btfsc R0,7
addwf R0,1 ; if L_T=5 of R0 then R0+3
; R0= B’1000′

;STEP N8 Add R1 to calculation; shiflt left L_byte
;control R0 — bit7 (btfsc R0,7) — if b7=1, then incrf R1
; farther shifting only R0 and R1

rlf R0 ; we shall lost oupper bit?
btfsc STATUS,C
incf R1,1
rlf L_byte,1
btfsc STATUS,0
incf R0,1 ; B’1100 0010′
;rlf R0,1 ;b’1000 0101′ -low tetrada uncorrect
;btfsc R0,7
;incf R1,1 ; if L_T=5 of R0 then R0+3
; R0= B’1000′ R1 B’0001′

;STEP N8 Add Hx30 to R0=B’1011 0011′ — after stepN8
movlw 30
btfsc R0,7
addwf R0,1 ; if L_T=5 of R0 then R0+3
; R0= B’1000′

;STEP N9 After step R0=B’0110 0110′ R1=B’0000 0011′
rlf R1,1;
rlf R0,1; shift left low byte — after B’1000 0000′
btfsc STATUS,C
incf R1,1 ; code — right — o.k.?

;next step — add Hx33
;STEP N9-1 After Step R0=B’1001 1001′ r1 — the same b’0011′
movlw 33
btfss R0,7; check msb for Zerro, if Z then add Hx33
addwf R0,1 ; if L_T=5 of R0 then R0+3
; R0= B’1001 1001′

;last Step
;Step N10
rlf R1,1;
rlf R0,1; shift left low byte — after B’1000 0000′
btfsc STATUS,C
incf R1,1 ; code — right — o.k.?

nop; CORRECT — ALL RIGHT — then next sbrt will send data to DEC to 7si
; Result BDC = 7 B’0111′ (R1) BCD 3 = B’0011′ BCD 2 = B’0010’== D732
; Binary B’0111′ =Hx07 and B’0010 0010′ = Hx32; We shall mask upper and then low
; tetrades for separate 32 to digits 3 and 2
return ; go back to main — test BCD
;xxxxxxxxxx — STOP — STOP — STOP -xxxxxxxxxxxxxxxxxx
;xxxxxxxxxx chec code uper — code below — has mistake AN 526
;xxxxxxxxxx it`s saved for trainning of indirect addressin to save and load
;data through RGP memory — linear part See <Window> -> (Pic Memory views) ->
;-> Liniear Data. Can You make my programm 10bit B2BCD in FSR ( indirect) mode?
;Thank You for Join !!!))) //date 04.09.21 msc 15:24
lslf H_byte, 1;F
rlf R2, 1;0;1;F; where stored result? F or W ?
rlf R1, 1;0;1;F
rlf R0, 1;0;1;F

decfsz CountB, F
goto adjDEC
adjDEC movlw 0xA0;- first bank /R2
MOVWF FSR0;movwi ++FSR0; load new address bank 0xA3 =++FSR0 i ++FSR0;INDF0;FSR0;movwf FSR
movfw R2
movwf INDF0
;movwf temp
;movwf ++FSR0L;INDF0; memory cell A2???
;movf INDF0,1
call adjBCD
movfw R1
movwf INDF0
;movwf —FSR0L; i FSR0++;INDF1;FSR1;movwf FSR
call adjBCD
movfw R0
movwf INDF0
;movwi FSR0++;INDF1+1;FSR1+ ;movwf FSR
call adjBCD
goto Loop10
adjBCD movlw 3
addwf INDF0,0;FSR0L,0;INDF0,1;R2,0;W;R2;0,W
;movf FSR0L,0;INDF1
movwf temp
btfsc temp,3 ; test if result > 7 (b’1000’=Hx08 carry from 7 to 8 = B’0111′ to B’1000′
movwf INDF0;FSR0L;INDF0;R2;0
movlw 30 ;B’0011 0000′
addwf INDF0,0;FSR0L;INDF0;R2,0;0,W
;movf FSR0L;INDF1,0
movwf temp
btfsc temp,7 ; test if result > 7 bit=H 0x40 =D64
movwf INDF0 ;FSR0L;R2;0 ; save as MSD
; Test Program
movlw 0x02;
movwf H_byte
SWAPF H_byte,1
rlf H_byte,1
rlf H_byte,1
movlw 0xDC;0xDC
movwf L_byte ; The 16 bit binary number = FFFF
call B2_BCD ; After conversion the Decimal Number
; ; in R0,R1,R2 = 06,55,35
;self goto self
;org 1FF
goto mainbcd
; Binary To BCD Conversion Routine
; This routine converts the 8 bit binary number in the W Register
; to a 2 digit BCD number.
; The least significant digit is returned in location LSD and
; the most significant digit is returned in location MSD.
; Performance :
; Program Memory : 10
; Clock Cycles : 81 (worst case when W = 63 Hex )
; ( i.e max Decimal number 99 )
; Program: BIN8BCD.ASM
; Revision Date:
; 1-13-97 Compatibility with MPASMWIN 1.40
;LSD equ 10
;MSD equ 11
;Bin8BCD clrf MSD ; AN526
; movwf LSD
;gtenth movlw .10
; subwf LSD,W
; goto over
; movwf LSD
; incf MSD, F
; goto gtenth
;over retlw 0
;main movlw 63 ; W reg = 63 Hex
; call Bin8BCD ; after conversion, MSD = 9 & LSD = 9
;self goto self ; ( 63 Hex = 99 Decimal )
; org 1FF
; goto main




Binary10 bit to BCD

Десятиразрядное число  — результат АДК (аналого-цифровой конвертации). При опорном напряжении 1,024в, итоговый результат будет определяться – 1 мв – один шаг дискретизации. Т.е. – прямо в милливольтах. Атмел и Микрочип в своих AVR204 и AN526 приводят этот же алгоритм для 16-битных чисел. К средней тетраде – прибавляют 30 – в формате 8-битового числа. Косвенная адресация в PIC16  требует определенных корректировок кода Mid Range to Enhanced  инструкция MOVF FSR -> MOVWI FSR  и обратно MOVIW FSR.  Пример кода в d_s PIC16F1509 (page16  надо разобраться  пошагово в отладке с чтением регистров). Для PIC24/32 предпочтителен код из AVR204 –  косвенной адресации с указанием регистров.  FSR —  регистров нет.     Переход по числу 5 – этот статус регистр – переход из младшей тетрады в старшую в байте – бит 1 – DC btfsc Status,1  или  Status, DC; переполнение старшей тетрады  бит 0 – параметр С  btfsc Status, 0  или Status,C.  При C/DC =1, выполняется команда  ADDWF (W=3 или 0x30). Код опубликую по-позже. Всем хорошего дня!!! – День знаний – как полагается – с арифметики начинаем!) 01.09.2021

Цитата по источнику.

Алгоритм 2.1. Перевод целого двоичного числа в 2/10 число (2/10 арифметика) последовательным умножением на 2 в 2/10 арифметике. Умножение осуществляется как 2А = А + А с использованием 2/10 сумматора (по алгоритму сложения 2/10 чисел). Может использоваться алгоритм BIDEC (binary to decimal).

BIDEC — один из существующих алгоритмов перевода двоичного числа в двоично-десятичное.

Для каждого двоичного разряда:

  1. производится сдвиг влево исходного двоичного числа и числа, хранящего результат. Старший разряд двоичного числа переносится в младший разряд результата.
  2. Для каждой тетрады результата: если больше или равна 5, прибавляется три.


Пример для числа 73210 = 10110111002.

такт результат           двоичное число         комментарий

0 0000 0000 0000      1011011100               начальная установка

1 0000 0000 0001      0110111000               первый сдвиг влево

2 0000 0000 0010      1101110000               второй сдвиг влево


3 0000 0000 0101      1011100000              сдвиг  B’0101’ =D5; B’0011’=D3;5+3=8

3’ 0000 0000 1000                                         младшая тетрада результата +3


4 0000 0001 0001      0111000000 сдвиг

5 0000 0010 0010      1110000000 сдвиг

6 0000 0100 0101      1100000000 сдвиг

мл. тетрада +3//B’0101’+ B’0011’ =D8 (B’1000’)

6’ 0000 0100 1000

7 0000 1001 0001      1000000000 сдвиг

7’ 0000 1100 0001     первая   средняя тетрада +3 //B’1001’D9

Это 0х30 (B’0011 0000) ADDWF

B’1001 0001’ H91(D145)+B’0011 0000’H30 (D48)=  B’1100 0001’ C1(D193)


8 0001 1000 0011      0000000000 сдвиг

8’ 0001 1011 0011     первая средняя  тетрада +3 (1000 +0011 = 1011) D11


9 0011 0110 0110      0000000000 сдвиг

9’ 0011 1001 1001     0 и 1 тетрады +3 (B’0 110’D6 +B’0011D3 = B’1001’ D9)

10 0111 0011 0010    0000000000 последний сдвиг, коррекция не требуется

Спасибо авторам :

Арифметические и логические основы вычислительной техники. ВШИССТ СПбПУ 2020

BIDEC – A Binary-to-Decimal or Decimal-to-Binary Converter, J. F. Couleur, IRE Transactions on Electronic Computers, Vol. EC-7, pp. 313-316, IRE, 1958.алгоритмы-двоично-десятичного-преоб/


STM32 + PiC16

Трудимся… Дип Трейс — подарил учебник и мозг — напряг — до 500 пинов… на плате… Но это к лучшему — пик-тэил… Так же… Тем более на Кэно Пиксма можно на  CD-Tray  нарисовать именнооо -ооо)))  пик- тэил… Картинки — потом… Люблю Вас… Как Христос — всех любил, как Солнце — всех согреет… ПРОРВЕМСЯ! БРАТ, ПРОРВЕМСЯ!


Фундамент русского мира

— Это учение о троице – русский ренессанс и возрождение, антропоцентризм Андрея Рублева.

-Это бескрайнее богатство – учение о свободе. О свободе Духа святого, о Сыне и Отце, — ученее о православном семейном укладе, о великих символах – ВЕРЫ, НАДЕЖДЫ, ЛЮБВИ.

-Где водораздел? – Где граница рационального европейского  и иррационального русского?
-Любовь… Любовь всегда иррациональна.

-Ренессанс в Европе был придавлен плитой догматизма католицизма, протестантства – запретом на изображение запретом на изображение Бога. Сына его. – Это разрушило учение о Троице и послужило гибелью европейского антропоцентризма.

— Так что же черпает запад, перечитывая Толстого, Достоевского, Бунина, Чехова, слушая Чайковского, Рахманинова, Шостаковича?!
— Черпает надежду в величии духа, в божественной роли человека – по образу и подобию.

-Где же граница мировозpрений?
-Рядом. Украина…
-Приверженцы ОУН УПА, СС Галичина ( запрещенных организаций), — это приверженцы греко-католической церкви. Им чужд ренессанс и антропоцентризм Рублева, чужды русские православные иконы, как и сама православная церковь.
-Ответ  — просто на глазах. Русские – это не коренной народ Украины.
— Выход Украины  из православия – состоялся.

… Русская армия – всегда была миссионерской, даруя освобожденным народам право и свободу на их веру.

— Почему я не вижу на приемах офицеров в Кремле  — духовенства со словами  о миссии русской армии, — нести свободу веры и спасение угнетенным народам?!

Учение об Отце, Сыне и Духе Святом – живое, в этом русский ренессанс. В этом победа добра над злом. В  этом свобода…

Только ради одного этого дня – откровений свыше, — стоит помиловать заключенных, раскаявшихся и подарить им милость по решению Госдумы и по благословению Патриарха РПЦ. Добрые дела должно и нужно благословлять, это не нарушает принцип независимости церкви, и не отвращает ее от государства.

Мы, Русские люди, как государственно образующий народ, имеем на это право.    03.07.21 (ночь)

ПС. – А мир ждет ответа – где граница добра и зла. – Заблудились люди…

Привет, Друзья!

После долгого перерыва — снова с Вами.

Много изменилось Будем заниматься творчеством.

Секрет… Все потихоньку. Хорошего вечера!

С праздником!

с Днем Российской адвокатуры — спасибо за за поздравления Президенту АП СПб — Евгению Васильевичу! Крепкого здоровья и Успехов!!!

Новость которую пропустили аналитики

  • Создание Центрального банка ЕАЭС, создание электронной расчетной единицы на основе золотого стандарта. Памятные монеты каждая весом 1 кг — золота — были — предоставлены членам Совета его Председателем  Нурсултаном Назырбаевым. Это Праздник — создание такого органа как Совет ЕАЭС, — это шаг к современному федеративному союзу наших стран. 29 мая 2019 года будет государственным праздником — в скором времени
  • Пора приходить к этим решениям — они назрели давным давно. Иначе невозможно будет осуществлять международные расчеты, — только привязываясь к доллару — это абсурд. Это в перспективе касается расчетов с Китаем в национальных валютах по кросс-курсу к золоту.
  • Маленькая революция в финансовом мире может породить землетрясения в биржевом мире валют, делайте свои ставки, Господа)))

Прощальное письмо Зеленскому — про холокост 

Там очень подробно — про ваших земляков с Украины , и про ваших кровных братьев — евреев — про их убийства. Обратите внимание на последнюю фотографию — сделайте ей памятник — к стыду своих земляков — к стыду Яроша и Ляшка, к гордости своих единокровных братьев… — К своему стыду. В старости будете подводить итог — самое главное — это свобода совести. — Вы нарушили этот завет, исправляйтесь. И БОЛЬШЕ — не говорите о России, Вы не достойны ее… Потому что ценой невероятных жертв — Мы, Россия, предотвратили убийство матерей, жен, отцов — как на этом фото. Памятник — этой женщине — мир ждет от Вас — она была убита на Вашей украинской земле. Вы обязаны нести груз репатриаций перед евреями, так же как Польша. — Так кто Вы, клоун или трагик? — этот ответ- как у Керенского, который предал народы великой России, актуален в вечности… — и мы пришли за ответом . Мы это люди новой эпохи и новой цивилизации. Храмы и тюрьмы разрушаются за три дня… — Как Нотердам де Пари. Помните, почему…


Продвигаем Медведчука — забираем 73% у Зе)

Все, Мистер Зе — потерпел фиаско, люди это быстро понимают…
В Раду — большинством голосов может пройти Медведчук. Для этого мы, Россия, должны помочь партии Мира — стать правительством Украины. Что это значит, — предвыборные лозунги Медведчука:
— Нормализация отношений с РФ, возрождение заказов в космической отрасли, востребованность ракет Зенит у РФ уже в этом году, отстранение олигархов-казнокрадов от властной кормушки ( рекомендации Джулиани), повышение пенсий, снижение тарифов на коммуналку, введение золотого стандарта для электронной гривны и котировка электронной гривны по цене тройной унции золота, повышение поэтапно пенсий на 100-200 долларов.

Медведчук — только он может сказать о себе, — когда я пройду в Раду большинством голосов — я смогу вернуть украинских моряков и пленных ВСУ на Донбасе. Я смогу приехать в ДНР и ЛНР и провести прямые переговоры с местными властями. Зеленский не дееспособен в принятии самостоятельных политических решений. Голосуйте за сильных — тех, кто держит слово.
Украина — Это часть единого государства — СНГ — это значит что природные богатства России по ценам России для Украины, это значит МИР, это значит 10млн. трудовых мигрантов — вернутся в страну и будут повышать ВВП Украины, строить заводы, осваивать земли, развивать электронику.

-Нам в России, лично мне это очень важно — важен мир и добрососедские отношения с Украиной.Это может сделать только Медведчук и Путин, и наши народы. Фейковый президент Зе  — со своей фейковой программой — может выступать в Шоу в Квартал 95, а нам друзья надо строить мир и счастливое будущее наших стран — одной большой страны СНГ.

Все будет ХОРОШО!


Как президент мира стал президентом войны

-Очень просто — приехал Зеленский на передовую в Луганск. Булат Акуджава — об этом в старинной солдатской песне:

Спите себе братцы, все придет опять.
Новые родятся командиры.
-Новые солдаты будут получать
-Вечные казенные квартиры 

А нам надо готовится к внезапному прорыву. Такие инспекции совершают для проверки боевого духа — готовности солдат и командиров — отдать свои жизни…
-Все же о состоянии войны с Украиной — это следует из взаимной позиции сторон по Керченскому инциденту. Агрессивный прорыв границы территориального моря России воинскими подразделениями Украины. — Мира они не хотят. Хотят реванша, хотят поражения России. — Пусть хотят, лишь бы «хотелка не заболела»…
Так что, черное будем называть черным , белое — белым. Война — так война. Порошенко виновен в начале этой войны. Подлежит аресту как военный преступник, из-за него томятся в тюрьме простые украинские моряки.

Вот такой расклад. Эта позиция понятна. Будем жить по ПРАВДЕ — жизнь будет лучше. ВСЕ будет ХОРОШО!