C
Cleong
Guest
По-долу са кода на Хеминг код в MPLAB
Може ли някой да го обясня накратко за мен това, което означава код
(в theorythically мога да разбера как тя работи, но когато в изходния код тогава аз тотално размазване ..)
Хеминг код генератор
;
; Тъй като нашата комуникация е един начин, ние ще използваме напред корекция грешка
; за откриване на грешки при едно малко.За да направите това, ние ще добавим код бита на нашите
; десет малко резултати за общо 14 бита.Тези код бита ще бъде в малко
; позиции 13, 12, 11 и 10.
; Код Р1 малко ще бъде в състояние 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
;************************************************* ***********************
(TRANSMITTER част)
HammCode
clrf HCREG; Изчислете първото късче код
movlw 0x20; P1 = D9 D8 D6 D5 D3 D1
btfsc ACCH, 1
incf HCREG, е
btfsc ACCH, 0
incf HCREG, е
btfsc ACCL, 6
incf HCREG, е
btfsc ACCL, 5
incf HCREG, е
btfsc ACCL, 3
incf HCREG, е
btfsc ACCL, 1
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
iorwf ACCH, F, поставете код Р1 до 1
clrf HCREG; Изчислете второ късче код
movlw 0x10; P2 = D9 D7 D6 D4 D3 D0
btfsc ACCH, 1
incf HCREG, е
btfsc ACCL, 7
incf HCREG, е
btfsc ACCL, 6
incf HCREG, е
btfsc ACCL, 4
incf HCREG, е
btfsc ACCL, 3
incf HCREG, е
btfsc ACCL, 0
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
iorwf ACCH, F, поставете кода P2 до 1
clrf HCREG; Изчислете трети малко код
movlw 0x08; P4 = D8 D7 D6 D2 D1 D0
btfsc ACCH, 0
incf HCREG, е
btfsc ACCL, 7
incf HCREG, е
btfsc ACCL, 6
incf HCREG, е
btfsc ACCL, 2
incf HCREG, е
btfsc ACCL, 1
incf HCREG, е
btfsc ACCL, 0
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
iorwf ACCH, F, поставете кода P4 до 1
clrf HCREG; Изчислете четвърти късче код
movlw 0x04; P8 = D5 D4 D3 D2 D1 D0
btfsc ACCL, 5
incf HCREG, е
btfsc ACCL, 4
incf HCREG, е
btfsc ACCL, 3
incf HCREG, е
btfsc ACCL, 2
incf HCREG, е
btfsc ACCL, 1
incf HCREG, е
btfsc ACCL, 0
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
iorwf ACCH, F, поставете кода P8 до 1
връщане
(Получател част)
hamm_decode
clrf HCVECT; ясно вектор регистър
clrf HCREG; Изчислете първото късче код
; P1 = D9 D8 D6 D5 D3 D1 P1
btfsc BUFF_HIGH, 5
incf HCREG, е
btfsc BUFF_HIGH, 1
incf HCREG, е
btfsc BUFF_HIGH, 0
incf HCREG, е
btfsc BUFF_LOW, 6
incf HCREG, е
btfsc BUFF_LOW, 5
incf HCREG, е
btfsc BUFF_LOW, 3
incf HCREG, е
btfsc BUFF_LOW, 1
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
BSF HCVECT, 0, поставете малко вектор 0 до 1
clrf HCREG; Изчислете второ късче код
; P2 = D9 D7 D6 D4 D3 D0 P2
btfsc BUFF_HIGH, 4
incf HCREG, е
btfsc BUFF_HIGH, 1
incf HCREG, е
btfsc BUFF_LOW, 7
incf HCREG, е
btfsc BUFF_LOW, 6
incf HCREG, е
btfsc BUFF_LOW, 4
incf HCREG, е
btfsc BUFF_LOW, 3
incf HCREG, е
btfsc BUFF_LOW, 0
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
BSF HCVECT, 1, поставете вектор Bit 1 до 1
clrf HCREG; Изчислете трети малко код
; P4 = D8 D7 D6 D2 D1 D0 P4
btfsc BUFF_HIGH, 3
incf HCREG, е
btfsc BUFF_HIGH, 0
incf HCREG, е
btfsc BUFF_LOW, 7
incf HCREG, е
btfsc BUFF_LOW, 6
incf HCREG, е
btfsc BUFF_LOW, 2
incf HCREG, е
btfsc BUFF_LOW, 1
incf HCREG, е
btfsc BUFF_LOW, 0
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
BSF HCVECT, 2; определени вектор малко 2 до 1
clrf HCREG; Изчислете четвърти късче код
; P8 = D5 D4 D3 D2 D1 D0 P8
btfsc BUFF_HIGH, 2
incf HCREG, е
btfsc BUFF_LOW, 5
incf HCREG, е
btfsc BUFF_LOW, 4
incf HCREG, е
btfsc BUFF_LOW, 3
incf HCREG, е
btfsc BUFF_LOW, 2
incf HCREG, е
btfsc BUFF_LOW, 1
incf HCREG, е
btfsc BUFF_LOW, 0
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
BSF HCVECT, 3; определени вектор малко 3 в 1
movf HCVECT, F; тест вектор
btfsc СТАТУС, Z; нула, ако след това няма грешки - в противен случай, флип малко
връщане
movf HCVECT, W; получите вектор Хеминг
повикване hcode_shuffle; оставам код
movwf HCVECT
clrf MASKH; първоначален маска регистри
clrf MASKL;
BSF СТАТУТ, С
Може ли някой да го обясня накратко за мен това, което означава код
(в theorythically мога да разбера как тя работи, но когато в изходния код тогава аз тотално размазване ..)
Хеминг код генератор
;
; Тъй като нашата комуникация е един начин, ние ще използваме напред корекция грешка
; за откриване на грешки при едно малко.За да направите това, ние ще добавим код бита на нашите
; десет малко резултати за общо 14 бита.Тези код бита ще бъде в малко
; позиции 13, 12, 11 и 10.
; Код Р1 малко ще бъде в състояние 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
;************************************************* ***********************
(TRANSMITTER част)
HammCode
clrf HCREG; Изчислете първото късче код
movlw 0x20; P1 = D9 D8 D6 D5 D3 D1
btfsc ACCH, 1
incf HCREG, е
btfsc ACCH, 0
incf HCREG, е
btfsc ACCL, 6
incf HCREG, е
btfsc ACCL, 5
incf HCREG, е
btfsc ACCL, 3
incf HCREG, е
btfsc ACCL, 1
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
iorwf ACCH, F, поставете код Р1 до 1
clrf HCREG; Изчислете второ късче код
movlw 0x10; P2 = D9 D7 D6 D4 D3 D0
btfsc ACCH, 1
incf HCREG, е
btfsc ACCL, 7
incf HCREG, е
btfsc ACCL, 6
incf HCREG, е
btfsc ACCL, 4
incf HCREG, е
btfsc ACCL, 3
incf HCREG, е
btfsc ACCL, 0
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
iorwf ACCH, F, поставете кода P2 до 1
clrf HCREG; Изчислете трети малко код
movlw 0x08; P4 = D8 D7 D6 D2 D1 D0
btfsc ACCH, 0
incf HCREG, е
btfsc ACCL, 7
incf HCREG, е
btfsc ACCL, 6
incf HCREG, е
btfsc ACCL, 2
incf HCREG, е
btfsc ACCL, 1
incf HCREG, е
btfsc ACCL, 0
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
iorwf ACCH, F, поставете кода P4 до 1
clrf HCREG; Изчислете четвърти късче код
movlw 0x04; P8 = D5 D4 D3 D2 D1 D0
btfsc ACCL, 5
incf HCREG, е
btfsc ACCL, 4
incf HCREG, е
btfsc ACCL, 3
incf HCREG, е
btfsc ACCL, 2
incf HCREG, е
btfsc ACCL, 1
incf HCREG, е
btfsc ACCL, 0
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
iorwf ACCH, F, поставете кода P8 до 1
връщане
(Получател част)
hamm_decode
clrf HCVECT; ясно вектор регистър
clrf HCREG; Изчислете първото късче код
; P1 = D9 D8 D6 D5 D3 D1 P1
btfsc BUFF_HIGH, 5
incf HCREG, е
btfsc BUFF_HIGH, 1
incf HCREG, е
btfsc BUFF_HIGH, 0
incf HCREG, е
btfsc BUFF_LOW, 6
incf HCREG, е
btfsc BUFF_LOW, 5
incf HCREG, е
btfsc BUFF_LOW, 3
incf HCREG, е
btfsc BUFF_LOW, 1
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
BSF HCVECT, 0, поставете малко вектор 0 до 1
clrf HCREG; Изчислете второ късче код
; P2 = D9 D7 D6 D4 D3 D0 P2
btfsc BUFF_HIGH, 4
incf HCREG, е
btfsc BUFF_HIGH, 1
incf HCREG, е
btfsc BUFF_LOW, 7
incf HCREG, е
btfsc BUFF_LOW, 6
incf HCREG, е
btfsc BUFF_LOW, 4
incf HCREG, е
btfsc BUFF_LOW, 3
incf HCREG, е
btfsc BUFF_LOW, 0
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
BSF HCVECT, 1, поставете вектор Bit 1 до 1
clrf HCREG; Изчислете трети малко код
; P4 = D8 D7 D6 D2 D1 D0 P4
btfsc BUFF_HIGH, 3
incf HCREG, е
btfsc BUFF_HIGH, 0
incf HCREG, е
btfsc BUFF_LOW, 7
incf HCREG, е
btfsc BUFF_LOW, 6
incf HCREG, е
btfsc BUFF_LOW, 2
incf HCREG, е
btfsc BUFF_LOW, 1
incf HCREG, е
btfsc BUFF_LOW, 0
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
BSF HCVECT, 2; определени вектор малко 2 до 1
clrf HCREG; Изчислете четвърти късче код
; P8 = D5 D4 D3 D2 D1 D0 P8
btfsc BUFF_HIGH, 2
incf HCREG, е
btfsc BUFF_LOW, 5
incf HCREG, е
btfsc BUFF_LOW, 4
incf HCREG, е
btfsc BUFF_LOW, 3
incf HCREG, е
btfsc BUFF_LOW, 2
incf HCREG, е
btfsc BUFF_LOW, 1
incf HCREG, е
btfsc BUFF_LOW, 0
incf HCREG, е
rrf HCREG, е
btfsc СТАТУС, C; ако сумиране на резултатите от нечетен брой
BSF HCVECT, 3; определени вектор малко 3 в 1
movf HCVECT, F; тест вектор
btfsc СТАТУС, Z; нула, ако след това няма грешки - в противен случай, флип малко
връщане
movf HCVECT, W; получите вектор Хеминг
повикване hcode_shuffle; оставам код
movwf HCVECT
clrf MASKH; първоначален маска регистри
clrf MASKL;
BSF СТАТУТ, С