C
Cleong
Guest
Ниже приведены коды Хемминга кода в MPLAB
Может кто-то говорить кратко объяснить мне, что означают коды
(в theorythically Я могу понять, как это работает, но когда его в исходный код, то я полностью Blur ..)
Генератор кода Хемминга
;
; Поскольку наши связи является одним способом, мы будем использовать прямое исправление ошибок
; обнаруживать одиночные ошибки бита.Для этого мы добавляем код биты нашими
; десять разрядных результатов в общей сложности на 14 бита.Эти коды будут биты в бит
; позиции 13, 12, 11 и 10.
; Битный код P1 будет находиться в положении D13 и будет исключительным "ИЛИ":
; P1 = D9 d8 D6 D5 D3 D1
; Битный код P2 будет находиться в положении D12 и будет эксклюзивным ИЛИ:
; P2 D9 = D7 D6 D4 D3 D0
; Битный код P4 будет находиться в положении D11 и будет исключительным "ИЛИ":
; P4 = d8 D7 D6 D2 D1 D0
; Битный код P8 будет находиться в положении D10 и будет эксклюзивным ИЛИ:
; P8 = D5 D4 D3 D2 D1 D0
; Данные будут упакованы: P1 P2 P4 P8 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
;************************************************* ***********************
(Передатчик ЧАСТЬ)
HammCode
clrf HCREG, посчитать первую разрядный код
MOVLW 0x20; P1 = D9 D8 D5 D6 D1 D3
btfsc ACCH, 1
incf HCREG, F
btfsc ACCH, 0
incf HCREG, F
btfsc ACCL, 6
incf HCREG, F
btfsc ACCL, 5
incf HCREG, F
btfsc ACCL, 3
incf HCREG, F
btfsc ACCL, 1
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
iorwf ACCH, F; набора кода С1-1
clrf HCREG, посчитать второго разрядный код
MOVLW 0x10; P2 D9 = D7 D6 D4 D3 D0
btfsc ACCH, 1
incf HCREG, F
btfsc ACCL, 7
incf HCREG, F
btfsc ACCL, 6
incf HCREG, F
btfsc ACCL, 4
incf HCREG, F
btfsc ACCL, 3
incf HCREG, F
btfsc ACCL, 0
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
iorwf ACCH, F; набора кода P2 к 1
clrf HCREG, посчитать третий разрядный код
MOVLW 0x08; P4 = d8 D7 D6 D2 D1 D0
btfsc ACCH, 0
incf HCREG, F
btfsc ACCL, 7
incf HCREG, F
btfsc ACCL, 6
incf HCREG, F
btfsc ACCL, 2
incf HCREG, F
btfsc ACCL, 1
incf HCREG, F
btfsc ACCL, 0
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
iorwf ACCH, F; набора кода 4 до 1
clrf HCREG, посчитать четвертое разрядный код
MOVLW 0x04; P8 = D5 D4 D3 D2 D1 D0
btfsc ACCL, 5
incf HCREG, F
btfsc ACCL, 4
incf HCREG, F
btfsc ACCL, 3
incf HCREG, F
btfsc ACCL, 2
incf HCREG, F
btfsc ACCL, 1
incf HCREG, F
btfsc ACCL, 0
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
iorwf ACCH, F; набора кода P8 к 1
возвращение
(Приемник ЧАСТЬ)
hamm_decode
clrf HCVECT; четкого вектора зарегистрироваться
clrf HCREG, посчитать первую разрядный код
; P1 = D9 D6 D8 D3 D5 D1 P1
btfsc BUFF_HIGH, 5
incf HCREG, F
btfsc BUFF_HIGH, 1
incf HCREG, F
btfsc BUFF_HIGH, 0
incf HCREG, F
btfsc BUFF_LOW, 6
incf HCREG, F
btfsc BUFF_LOW, 5
incf HCREG, F
btfsc BUFF_LOW, 3
incf HCREG, F
btfsc BUFF_LOW, 1
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
BSF HCVECT, 0; установить разрядного вектора от 0 до 1
clrf HCREG, посчитать второго разрядный код
; P2 D9 = D7 D6 D4 D3 D0 P2
btfsc BUFF_HIGH, 4
incf HCREG, F
btfsc BUFF_HIGH, 1
incf HCREG, F
btfsc BUFF_LOW, 7
incf HCREG, F
btfsc BUFF_LOW, 6
incf HCREG, F
btfsc BUFF_LOW, 4
incf HCREG, F
btfsc BUFF_LOW, 3
incf HCREG, F
btfsc BUFF_LOW, 0
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
BSF HCVECT, 1; набор векторных бит 1 в 1
clrf HCREG, посчитать третий разрядный код
; P4 = d8 D7 D6 D2 D1 D0 P4
btfsc BUFF_HIGH, 3
incf HCREG, F
btfsc BUFF_HIGH, 0
incf HCREG, F
btfsc BUFF_LOW, 7
incf HCREG, F
btfsc BUFF_LOW, 6
incf HCREG, F
btfsc BUFF_LOW, 2
incf HCREG, F
btfsc BUFF_LOW, 1
incf HCREG, F
btfsc BUFF_LOW, 0
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
BSF HCVECT, 2; набор векторных бит 2 в 1
clrf HCREG, посчитать четвертое разрядный код
; P8 = D5 D4 D3 D2 D1 D0 P8
btfsc BUFF_HIGH, 2
incf HCREG, F
btfsc BUFF_LOW, 5
incf HCREG, F
btfsc BUFF_LOW, 4
incf HCREG, F
btfsc BUFF_LOW, 3
incf HCREG, F
btfsc BUFF_LOW, 2
incf HCREG, F
btfsc BUFF_LOW, 1
incf HCREG, F
btfsc BUFF_LOW, 0
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
BSF HCVECT, 3; набор векторных бит 3 в 1
movf HCVECT, F; испытание вектора
btfsc STATUS, Z; если нулю, то ошибки нет - в противном случае, флип-разрядный
возвращение
movf HCVECT, W; получить Хемминга вектора
hcode_shuffle вызова; переназначить кода
MOVWF HCVECT
clrf MASKH; инициализировать регистры маски
clrf MASKL;
BSF STATUS, C
Может кто-то говорить кратко объяснить мне, что означают коды
(в theorythically Я могу понять, как это работает, но когда его в исходный код, то я полностью Blur ..)
Генератор кода Хемминга
;
; Поскольку наши связи является одним способом, мы будем использовать прямое исправление ошибок
; обнаруживать одиночные ошибки бита.Для этого мы добавляем код биты нашими
; десять разрядных результатов в общей сложности на 14 бита.Эти коды будут биты в бит
; позиции 13, 12, 11 и 10.
; Битный код P1 будет находиться в положении D13 и будет исключительным "ИЛИ":
; P1 = D9 d8 D6 D5 D3 D1
; Битный код P2 будет находиться в положении D12 и будет эксклюзивным ИЛИ:
; P2 D9 = D7 D6 D4 D3 D0
; Битный код P4 будет находиться в положении D11 и будет исключительным "ИЛИ":
; P4 = d8 D7 D6 D2 D1 D0
; Битный код P8 будет находиться в положении D10 и будет эксклюзивным ИЛИ:
; P8 = D5 D4 D3 D2 D1 D0
; Данные будут упакованы: P1 P2 P4 P8 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
;************************************************* ***********************
(Передатчик ЧАСТЬ)
HammCode
clrf HCREG, посчитать первую разрядный код
MOVLW 0x20; P1 = D9 D8 D5 D6 D1 D3
btfsc ACCH, 1
incf HCREG, F
btfsc ACCH, 0
incf HCREG, F
btfsc ACCL, 6
incf HCREG, F
btfsc ACCL, 5
incf HCREG, F
btfsc ACCL, 3
incf HCREG, F
btfsc ACCL, 1
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
iorwf ACCH, F; набора кода С1-1
clrf HCREG, посчитать второго разрядный код
MOVLW 0x10; P2 D9 = D7 D6 D4 D3 D0
btfsc ACCH, 1
incf HCREG, F
btfsc ACCL, 7
incf HCREG, F
btfsc ACCL, 6
incf HCREG, F
btfsc ACCL, 4
incf HCREG, F
btfsc ACCL, 3
incf HCREG, F
btfsc ACCL, 0
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
iorwf ACCH, F; набора кода P2 к 1
clrf HCREG, посчитать третий разрядный код
MOVLW 0x08; P4 = d8 D7 D6 D2 D1 D0
btfsc ACCH, 0
incf HCREG, F
btfsc ACCL, 7
incf HCREG, F
btfsc ACCL, 6
incf HCREG, F
btfsc ACCL, 2
incf HCREG, F
btfsc ACCL, 1
incf HCREG, F
btfsc ACCL, 0
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
iorwf ACCH, F; набора кода 4 до 1
clrf HCREG, посчитать четвертое разрядный код
MOVLW 0x04; P8 = D5 D4 D3 D2 D1 D0
btfsc ACCL, 5
incf HCREG, F
btfsc ACCL, 4
incf HCREG, F
btfsc ACCL, 3
incf HCREG, F
btfsc ACCL, 2
incf HCREG, F
btfsc ACCL, 1
incf HCREG, F
btfsc ACCL, 0
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
iorwf ACCH, F; набора кода P8 к 1
возвращение
(Приемник ЧАСТЬ)
hamm_decode
clrf HCVECT; четкого вектора зарегистрироваться
clrf HCREG, посчитать первую разрядный код
; P1 = D9 D6 D8 D3 D5 D1 P1
btfsc BUFF_HIGH, 5
incf HCREG, F
btfsc BUFF_HIGH, 1
incf HCREG, F
btfsc BUFF_HIGH, 0
incf HCREG, F
btfsc BUFF_LOW, 6
incf HCREG, F
btfsc BUFF_LOW, 5
incf HCREG, F
btfsc BUFF_LOW, 3
incf HCREG, F
btfsc BUFF_LOW, 1
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
BSF HCVECT, 0; установить разрядного вектора от 0 до 1
clrf HCREG, посчитать второго разрядный код
; P2 D9 = D7 D6 D4 D3 D0 P2
btfsc BUFF_HIGH, 4
incf HCREG, F
btfsc BUFF_HIGH, 1
incf HCREG, F
btfsc BUFF_LOW, 7
incf HCREG, F
btfsc BUFF_LOW, 6
incf HCREG, F
btfsc BUFF_LOW, 4
incf HCREG, F
btfsc BUFF_LOW, 3
incf HCREG, F
btfsc BUFF_LOW, 0
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
BSF HCVECT, 1; набор векторных бит 1 в 1
clrf HCREG, посчитать третий разрядный код
; P4 = d8 D7 D6 D2 D1 D0 P4
btfsc BUFF_HIGH, 3
incf HCREG, F
btfsc BUFF_HIGH, 0
incf HCREG, F
btfsc BUFF_LOW, 7
incf HCREG, F
btfsc BUFF_LOW, 6
incf HCREG, F
btfsc BUFF_LOW, 2
incf HCREG, F
btfsc BUFF_LOW, 1
incf HCREG, F
btfsc BUFF_LOW, 0
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
BSF HCVECT, 2; набор векторных бит 2 в 1
clrf HCREG, посчитать четвертое разрядный код
; P8 = D5 D4 D3 D2 D1 D0 P8
btfsc BUFF_HIGH, 2
incf HCREG, F
btfsc BUFF_LOW, 5
incf HCREG, F
btfsc BUFF_LOW, 4
incf HCREG, F
btfsc BUFF_LOW, 3
incf HCREG, F
btfsc BUFF_LOW, 2
incf HCREG, F
btfsc BUFF_LOW, 1
incf HCREG, F
btfsc BUFF_LOW, 0
incf HCREG, F
СБР HCREG, F
btfsc STATUS, C; при суммировании результатов в нечетные числа
BSF HCVECT, 3; набор векторных бит 3 в 1
movf HCVECT, F; испытание вектора
btfsc STATUS, Z; если нулю, то ошибки нет - в противном случае, флип-разрядный
возвращение
movf HCVECT, W; получить Хемминга вектора
hcode_shuffle вызова; переназначить кода
MOVWF HCVECT
clrf MASKH; инициализировать регистры маски
clrf MASKL;
BSF STATUS, C