;* DTMF DECODER v. 1.1 *** PIC16F84 ************** ;* (C) 2001-2003 Piratske radio - http://pira.cz * STAT EQU 03h FSRR EQU 04h INDFR EQU 00h OPTIONR EQU 81h TIMER EQU 01h C EQU 0 Z EQU 2 PORT1 EQU 05h PORT2 EQU 06h TRIZ1 EQU 85h TRIZ2 EQU 86h W EQU 0 F EQU 1 DISBUF EQU 0Ch INBUF EQU 0Dh CVIEW EQU 0Eh CSAVE EQU 0Fh KEYBUF EQU 10h KEYCNT EQU 11h DISCNT EQU 12h BUF1 EQU 14h BUF2 EQU 15h BUF3 EQU 16h BUF4 EQU 17h BUF5 EQU 18h CLK EQU 0 DAT EQU 6 STD EQU 4 NEXT EQU 5 PREV EQU 4 SWOUT EQU 2 BSF STAT,5 MOVLW B'11111010' MOVWF TRIZ1 MOVLW B'10111111' MOVWF TRIZ2 MOVLW B'01010111' MOVWF OPTIONR BCF STAT,5 BCF PORT1,SWOUT ;Stav RA2 po zapnuti RESET CLRF KEYCNT CLRF BUF1 CLRF BUF2 CLRF BUF3 CLRF BUF4 CLRF BUF5 MOVLW 0x19 MOVWF CVIEW MOVLW 0x1A MOVWF CSAVE MOVLW B'10000101' ;= MOVWF 0x19 MOVLW 0x1A MOVWF FSRR DELNEXT MOVLW B'10000000' ;_ MOVWF INDFR INCF FSRR ;Vyplneni pameti _ MOVLW 50h SUBWF FSRR,W BTFSS STAT,Z GOTO DELNEXT WAIT1 CLRWDT BTFSC PORT1,STD GOTO WAIT1 CLRF DISCNT ZMENA MOVF CVIEW,W ;Zobrazeni zmeny MOVWF FSRR MOVF INDFR,W MOVWF DISBUF CALL DISPLAY SMYCKA CLRWDT BTFSC PORT1,STD ;Cekani na znak GOTO RECEIV ;nebo stisk tlacitka MOVF PORT2,W MOVWF KEYBUF BTFSC KEYBUF,NEXT ;Test na reset GOTO SMYCKA2 BTFSS KEYBUF,PREV GOTO RESET SMYCKA2 BTFSS KEYBUF,NEXT GOTO SMYCKA3 BTFSS KEYBUF,PREV GOTO SMYCKA3 MOVLW B'00001011' SUBWF KEYCNT,W BTFSC STAT,C GOTO SMYCKA3 MOVLW B'00001100' MOVWF KEYCNT SMYCKA3 BTFSS TIMER,7 GOTO CNTTEST CLRF TIMER BTFSS DISCNT,7 INCF DISCNT BTFSS KEYCNT,4 INCF KEYCNT CNTTEST BTFSC KEYCNT,4 GOTO KEYTEST PAUZA BTFSS DISCNT,7 ;Vlozeni znaku pauzy GOTO SMYCKA CLRF BUF1 CLRF BUF2 CLRF BUF3 CLRF BUF4 CLRF BUF5 MOVLW 0x1A SUBWF CSAVE,W BTFSC STAT,Z GOTO SMYCKA MOVLW 0x4F SUBWF CSAVE,W BTFSC STAT,Z GOTO SMYCKA DECF CSAVE,W MOVWF FSRR MOVLW B'00000001' ;- SUBWF INDFR,W BTFSC STAT,Z GOTO SMYCKA MOVF CSAVE,W MOVWF FSRR MOVWF CVIEW MOVLW 0x4F SUBWF CSAVE,W BTFSS STAT,Z INCF CSAVE MOVLW B'00000001' ;- MOVWF INDFR GOTO RECEIV3 KEYTEST BTFSS KEYBUF,NEXT GOTO GONEXT BTFSS KEYBUF,PREV GOTO GOPREV GOTO PAUZA GONEXT CLRF KEYCNT MOVLW 0x4F SUBWF CVIEW,W BTFSS STAT,Z GOTO GONEXT2 MOVLW 0x19 MOVWF CVIEW GOTO ZMENA GONEXT2 INCF CVIEW GOTO ZMENA GOPREV CLRF KEYCNT MOVLW 0x19 SUBWF CVIEW,W BTFSS STAT,Z GOTO GOPREV2 MOVLW 0x4F MOVWF CVIEW GOTO ZMENA GOPREV2 DECF CVIEW GOTO ZMENA RECEIV MOVF CSAVE,W ;Dekodovani MOVWF FSRR ;prijateho znaku MOVWF CVIEW MOVLW 0x4F SUBWF CSAVE,W BTFSS STAT,Z INCF CSAVE MOVF PORT2,W MOVWF INBUF BCF INBUF,7 BCF INBUF,6 BCF INBUF,5 BCF INBUF,4 MOVLW B'00011000' ;1 MOVWF INDFR MOVLW 8 SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'11001101' ;2 MOVWF INDFR MOVLW 4 SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'10011101' ;3 MOVWF INDFR MOVLW 0xC SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'00011011' ;4 MOVWF INDFR MOVLW 2 SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'10010111' ;5 MOVWF INDFR MOVLW 0xA SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'11010111' ;6 MOVWF INDFR MOVLW 6 SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'00011110' ;7 MOVWF INDFR MOVLW 0xE SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'11011111' ;8 MOVWF INDFR MOVLW 1 SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'10011111' ;9 MOVWF INDFR MOVLW 9 SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'11011110' ;0 MOVWF INDFR MOVLW 5 SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'01011011' ;* MOVWF INDFR MOVLW 0xD SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'11010001' ;# MOVWF INDFR MOVLW 3 SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'01011111' ;A MOVWF INDFR MOVLW 0xB SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'11010011' ;B MOVWF INDFR MOVLW 7 SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'11000110' ;C MOVWF INDFR MOVLW 0xF SUBWF INBUF,W BTFSC STAT,Z GOTO RECEIV2 MOVLW B'11011001' ;D MOVWF INDFR RECEIV2 CALL SWITCH RECEIV3 MOVF INDFR,W MOVWF DISBUF BSF DISBUF,5 CALL DISPLAY GOTO WAIT1 DISPLAY BCF PORT1,CLK ;Odeslani znaku do BCF PORT2,DAT ;posuvneho registru BTFSS DISBUF,7 ;74HC164 BSF PORT2,DAT BSF PORT1,CLK BCF PORT1,CLK BCF PORT2,DAT BTFSS DISBUF,6 BSF PORT2,DAT BSF PORT1,CLK BCF PORT1,CLK BCF PORT2,DAT BTFSS DISBUF,5 BSF PORT2,DAT BSF PORT1,CLK BCF PORT1,CLK BCF PORT2,DAT BTFSS DISBUF,4 BSF PORT2,DAT BSF PORT1,CLK BCF PORT1,CLK BCF PORT2,DAT BTFSS DISBUF,3 BSF PORT2,DAT BSF PORT1,CLK BCF PORT1,CLK BCF PORT2,DAT BTFSS DISBUF,2 BSF PORT2,DAT BSF PORT1,CLK BCF PORT1,CLK BCF PORT2,DAT BTFSS DISBUF,1 BSF PORT2,DAT BSF PORT1,CLK BCF PORT1,CLK BCF PORT2,DAT BTFSS DISBUF,0 BSF PORT2,DAT BSF PORT1,CLK BCF PORT1,CLK RETURN SWITCH MOVF BUF2,W ;Vystup RA2 MOVWF BUF1 MOVF BUF3,W MOVWF BUF2 MOVF BUF4,W MOVWF BUF3 MOVF BUF5,W MOVWF BUF4 MOVF INDFR,W MOVWF BUF5 MOVLW B'10011101' ;3 SUBWF BUF1,W BTFSS STAT,Z GOTO SWOFF MOVLW B'11001101' ;2 SUBWF BUF2,W BTFSS STAT,Z GOTO SWOFF MOVLW B'11011110' ;0 SUBWF BUF3,W BTFSS STAT,Z GOTO SWOFF MOVLW B'11010111' ;6 SUBWF BUF4,W BTFSS STAT,Z GOTO SWOFF MOVLW B'10010111' ;5 SUBWF BUF5,W BTFSS STAT,Z GOTO SWOFF BSF PORT1,SWOUT RETURN SWOFF MOVLW B'00011011' ;4 SUBWF BUF1,W BTFSS STAT,Z RETURN MOVLW B'11011111' ;8 SUBWF BUF2,W BTFSS STAT,Z RETURN MOVLW B'10011111' ;9 SUBWF BUF3,W BTFSS STAT,Z RETURN MOVLW B'00011110' ;7 SUBWF BUF4,W BTFSS STAT,Z RETURN MOVLW B'11010111' ;6 SUBWF BUF5,W BTFSS STAT,Z RETURN BCF PORT1,SWOUT RETURN END