;опнцпюллю дейндхпнбюмхъ онксвеммшу дюммшу хг янл онпрю ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TEST_S MACRO KOD ; нопедекемхе люйпняю MOVLW KOD XORWF INDF2,W,A BTFSS STATUS,Z,A RETLW 0 MOVF POSTINC2,W,A ; явхрюрэ дюммше ю онрнл сбекхвхрэ ENDM ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;******************************** DECOD_KOMAND BSF _BADKOM ; сярюмнбхрэ ткюц окнуни йнлюмдш CALL INIT_FSR CALL TEST_RESET CALL INIT_FSR CALL TEST_SENDRC5 CALL INIT_FSR CALL GETMEM CALL INIT_FSR CALL PUTMEM CALL INIT_FSR CALL SAVEROM CALL INIT_FSR CALL READROM CALL INIT_FSR CALL RAMREAD CALL INIT_FSR CALL REGION_ON CALL INIT_FSR CALL REGION_OFF CALL INIT_FSR CALL ON_CD CALL INIT_FSR CALL OFF_CD CALL INIT_FSR CALL PRINT_CLR CALL INIT_FSR CALL PRINT_SET CALL INIT_FSR CALL PRINT_INFO BTFSS _BADKOM ; еякх ткюц ме яапньем рн щрн окнуюъ йнлюмдю GOTO INIT_FSR BAD MOVLW "B" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "A" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "D" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW " " CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "K" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "O" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "M" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "A" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "N" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "D" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW 0D CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир ;******************************** INIT_FSR CLRF FSR2L,A MOVLW 02 ; MOVWF FSR2H,A RETURN ;******************************** TEST_RESET TEST_S "R" TEST_S "E" TEST_S "S" TEST_S "E" TEST_S "T" TEST_S 0D MOVLW "R" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "E" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "S" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "E" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "T" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW " " CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "O" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "K" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW 0D CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир BCF _BADKOM ; сярюмнбхрэ ткюц бшонкмемхъ йнлюмдш GOTO EROR ;******************************** TEST_SENDRC5 TEST_S "S" TEST_S "E" TEST_S "N" TEST_S "D" TEST_S "R" TEST_S "C" TEST_S "5" CALL ASC_HEX MOVWF OPERAND1,A CALL ASC_HEX MOVWF OPERAND2,A TEST_S 0D CALL TRANSMIT_RC5 MOVLW "S" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "E" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "N" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "D" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "R" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "C" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "5" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW " " CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "O" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "K" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW 0D CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир BCF _BADKOM ; сярюмнбхрэ ткюц бшонкмемхъ йнлюмдш RETLW 0FF ;******************************** TRANSMIT_ASCII MOVWF TMP_PRD,A SWAPF TMP_PRD,W,A CALL KOD_ASCII CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVF TMP_PRD,W,A CALL KOD_ASCII CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир RETURN ;******************************** ; опенапюгнбюмхе дбсу ASCII яхлбнкнб б аюир дюммшу ASC_HEX MOVF POSTINC2,W,A ; явхрюрэ дюммше ю онрнл сбекхвхрэ MOVWF ASCII_IN,A CALL ASCII_HEX ; MOVWF HEX_OUT,A ; опенапюгнбюкх б меу оепбсч рерпюдс SWAPF HEX_OUT,F,A ; ядекюкх ее ярюпьеи MOVF POSTINC2,W,A ; явхрюрэ дюммше ю онрнл сбекхвхрэ MOVWF ASCII_IN,A CALL ASCII_HEX ; опенапюгнбюкх б меу брнпсч рерпюдс IORWF HEX_OUT,W,A ; ятнплхпнбюкх онкмши аюир RETURN ;**************************************** ;ОПНЦПЮЛЛЮ ОПЕНАПЮГНБЮМХЪ ASCII 1-A-F Б HEX ЙНД ;ЯХЛБНК ASCII ДКЪ ОПЕНАПЮГНБЮМХЪ ASCI_IN ->ПЕГСКЭРЮР ОПЕНАПЮГНБЮМХЪ HEX_OUT ASCII_HEX MOVLW 4F ; 0100 1111 - люяйю ANDWF ASCII_IN,F,A ; сахпюел ме мсфмше ахрш он люяйе BTFSS ASCII_IN,6,A GOTO EXIT_AH INCF ASCII_IN,F,A BSF ASCII_IN,3,A EXIT_AH MOVLW 0F ;0000 1111 - люяйю ANDWF ASCII_IN,W,A RETURN ;******************************** READROM TEST_S "R" TEST_S "E" TEST_S "A" TEST_S "D" TEST_S "R" TEST_S "O" TEST_S "M" CALL ASC_HEX MOVWF OPERAND1,A TEST_S "," CALL ASC_HEX MOVWF OPERAND2,A TEST_S 0D MOVLW "R" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "E" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "A" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "D" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "R" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "O" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "M" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир KOMN30 MOVLW "," CALL PUT_TO_TX ; MOVF OPERAND1,W,A ; он щрнлс юдпеяс мюундъряъ дюммше б EEPROM CALL RID_BT ; CALL TRANSMIT_ASCII ; оепедюрэ б ASCII тнплюре INCF OPERAND1,F,A ; сбекхвхрэ юдпея времхъ хг EEPROM DECFSZ OPERAND2,F,A ; слемэьхрэ явервхй явхрюммшу аюир GOTO KOMN30 ; еякх явхрюмш бяе дюммше MOVLW 0D CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир BCF _BADKOM ; сярюмнбхрэ ткюц бшонкмемхъ йнлюмдш RETLW 0FF ;******************************** RAMREAD TEST_S "R" TEST_S "A" TEST_S "M" TEST_S "R" TEST_S "E" TEST_S "A" TEST_S "D" CALL ASC_HEX MOVWF FSR1H,A CALL ASC_HEX MOVWF FSR1L,A TEST_S "," CALL ASC_HEX MOVWF OPERAND2,A TEST_S 0D MOVLW "R" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "A" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "M" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "R" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "E" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "A" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "D" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир KOMN14 MOVLW "," CALL PUT_TO_TX ; MOVF POSTINC1,W,A ; CALL TRANSMIT_ASCII ; оепедюрэ б ASCII тнплюре INCF OPERAND1,F,A ; сбекхвхрэ юдпея времхъ хг EEPROM DECFSZ OPERAND2,F,A ; слемэьхрэ явервхй явхрюммшу аюир GOTO KOMN14 ; опнднкфюрэ еякх явхрюмш ме бяе дюммше MOVLW 0D CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир BCF _BADKOM ; сярюмнбхрэ ткюц бшонкмемхъ йнлюмдш RETLW 0FF ;******************************** GETMEM TEST_S "G" TEST_S "E" TEST_S "T" TEST_S "M" TEST_S "E" TEST_S "M" CALL ASC_HEX MOVWF OPERAND1,A TEST_S "," CALL ASC_HEX MOVWF OPERAND2,A TEST_S 0D MOVLW "G" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "E" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "T" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "M" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "E" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "M" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир TEST_GETMEM1 MOVF OPERAND1,W,A ; он щрнлс юдпеяс мюундъряъ дюммше б EEPROM CALL RID_BT ; CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир INCF OPERAND1,F,A ; сбекхвхрэ юдпея времхъ хг EEPROM DECFSZ OPERAND2,F,A ; слемэьхрэ явервхй явхрюммшу аюир GOTO TEST_GETMEM1 ; еякх явхрюмш бяе дюммше MOVLW 0D CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир BCF _BADKOM ; сярюмнбхрэ ткюц бшонкмемхъ йнлюмдш RETLW 0FF ;******************************** PUTMEM TEST_S "P" TEST_S "U" TEST_S "T" TEST_S "M" TEST_S "E" TEST_S "M" CALL ASC_HEX MOVWF OPERAND1,A TEST_S "," PUTMEM1 MOVF OPERAND1,W,A MOVWF EEADR,A ; сярюмюбкхбюел юдпея б EEPROM MOVF POSTINC2,W,A ; явхрюрэ дюммше ю онрнл сбекхвхрэ сйюгюрекэ CALL SAVE_EEPROM ; гюохяшбюел ндхм аюир INCF OPERAND1,F,A ; сбекхвхрэ юдпея гюохях б EEPROM MOVLW 0D XORWF INDF2,W,A BTFSS STATUS,Z,A GOTO PUTMEM1 ; еякх явхрюмш бяе дюммше TEST_S 0D ;*********** ю реоепэ мюохьел нй ********************* MOVLW "P" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "U" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "T" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "M" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "E" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "M" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW " " CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "O" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "K" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW 0D CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир BCF _BADKOM ; сярюмнбхрэ ткюц бшонкмемхъ йнлюмдш RETLW 0FF ;******************************** SAVEROM TEST_S "S" TEST_S "A" TEST_S "V" TEST_S "E" TEST_S "R" TEST_S "O" TEST_S "M" CALL ASC_HEX MOVWF OPERAND1,A MEMORWR1 TEST_S "," MOVF OPERAND1,W,A MOVWF EEADR,A ; сярюмюбкхбюел юдпея б EEPROM CALL ASC_HEX ; CALL SAVE_EEPROM ; гюохяшбюел ндхм аюир INCF OPERAND1,F,A ; сбекхвхрэ юдпея времхъ хг EEPROM MOVLW 0D XORWF INDF2,W,A BTFSS STATUS,Z,A GOTO MEMORWR1 ; еякх явхрюмш бяе дюммше TEST_S 0D ;******************************** ; ю реоепэ мюохьел нй MOVLW "S" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "A" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "V" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "E" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "R" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "O" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "M" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW " " CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "O" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW "K" CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир MOVLW 0D CALL PUT_TO_TX ; оепедюрэ нвепедмни аюир BCF _BADKOM ; сярюмнбхрэ ткюц бшонкмемхъ йнлюмдш RETLW 0FF ;******************************** ;******************************** ; опнцпюллю онксвемхъ йнкхвеярбю онбрнпнб N_POVTOROV CALL TO_DIGIT ; явхрюрэ б деяърхвмнл бхде CALL BCDTOBIN ; опенапюгнбюрэ й дбнхвмнлс бхдс MOVF L_BYTE,W,A MOVWF N_POVTOR,A RETURN ;******************************** TO_DIGIT CLRF R2,A ; ондцнрнбхкх пецхярпш дкъ опхелю йндю CLRF R1,A CLRF R0,A MOVF POSTINC2,W,A ; оепбсч жхтпс онкчанлс вхрюел ANDLW 0F IORWF R2,F,A ; днаюбхрэ нвепедмсч рерпюдс MOVLW "," ; еякх щрн ме пюгдекхрекэ XORWF INDF2,W,A BTFSC STATUS,Z,A RETURN CALL SHIFT_SIGN ; ядбхмсрэ дюммше MOVF POSTINC2,W,A ; явхрюрэ брнпсч жхтпс ANDLW 0F IORWF R2,F,A ; днаюбхрэ нвепедмсч рерпюдс RETURN ;******************************** SHIFT_SIGN BCF STATUS,C,A ; яапняхрэ ахр оепемняю врнаш ме леьюк RLCF R2,F,A ; ядбхцюел хмтнплюжхч мю ндмс рерпюдс RLCF R1,F,A ; ядбхцх мсфмш врнаш онрерпюдмн тнплхпнбюрэ вхякн RLCF R0,F,A BCF STATUS,C,A ; яапняхрэ ахр оепемняю врнаш ме леьюк RLCF R2,F,A RLCF R1,F,A RLCF R0,F,A BCF STATUS,C,A ; яапняхрэ ахр оепемняю врнаш ме леьюк RLCF R2,F,A RLCF R1,F,A RLCF R0,F,A BCF STATUS,C,A ; яапняхрэ ахр оепемняю врнаш ме леьюк RLCF R2,F,A RLCF R1,F,A RLCF R0,F,A RETURN ;********************************************************************** BCD2BIN ;опнцпюллю опенапюгнбюмхъ вхякю ; BCD TO BINARY CONVERSION ; THIS ROUTINE CONVERTS A 5 DIGIT BCD NUMBER TO A 16 BIT BINARY NUMBER. ; THE INPUT 5 DIGIT BCD NUMBERS ARE ASUMED TO BE IN LOCATIONS ; R0, R1 & R2 WITH R0 CONTAINING THE MSD IN ITS RIGHT MOST NIBBLE. ; ; THE 16 BIT BINARY NUMBER IS OUTPUT IN REGISTERS H_BYTE & L_BYTE ; ( HIGH BYTE & LOW BYTE REPECTIVELY ). ; ; THE METHOD USED FOR CONVERSION IS : ; INPUT NUMBER X = ABCDE ( THE 5 DIGIT BCD NUMBER ) ; X = ABCDE = 10[10[10[10A+B]+C]+D]+E ; ; PERFORMANCE : ; PROGRAM MEMORY : 30 ; CLOCK CYCLES : 121 ;*******************************************************************; MPY10B ANDLW 0F ADDWF L_BYTE, F,A BTFSC STATUS,C,A INCF H_BYTE, F,A MPY10A BCF STATUS,C,A ; MULTIPLY BY 2 RLCF L_BYTE,W,A MOVWF L_TEMP,A RLCF H_BYTE,W,A ; (H_TEMP,L_TEMP) = 2*N MOVWF H_TEMP,A BCF STATUS,C,A ; MULTIPLY BY 2 RLCF L_BYTE,F,A RLCF H_BYTE,F,A BCF STATUS,C,A ; MULTIPLY BY 2 RLCF L_BYTE,F,A RLCF H_BYTE,F,A BCF STATUS,C,A ; MULTIPLY BY 2 RLCF L_BYTE,F,A RLCF H_BYTE,F,A ; (H_BYTE,L_BYTE) = 8*N MOVF L_TEMP,W,A ADDWF L_BYTE,F,A BTFSC STATUS,C,A INCF H_BYTE,F,A MOVF H_TEMP,W,A ADDWF H_BYTE,F,A RETLW 0 ; (H_BYTE,L_BYTE) = 10*N BCDTOBIN CLRF H_BYTE,A MOVF R0,W,A ANDLW 0F MOVWF L_BYTE,A CALL MPY10A ; RESULT = 10A+B SWAPF R1,W,A CALL MPY10B ; RESULT = 10[10A+B] MOVF R1,W,A CALL MPY10B ; RESULT = 10[10[10A+B]+C] SWAPF R2,W,A CALL MPY10B ; RESULT = 10[10[10[10A+B]+C]+D] MOVF R2,W,A ANDLW 0F ADDWF L_BYTE,F,A BTFSC STATUS,C,A INCF H_BYTE,F,A ; RESULT = 10[10[10[10A+B]+C]+D]+E RETLW 0 ; BCD TO BINARY CONVERSION DONE ;********************************************************************