LIST P = 16C84 ;********************************************************************* ; DCF-77 TX signal za testiranje softvera - PIC16C84 ; Date: 16.02.1999. ; Author: YT2FSG - Stankovic Goran dipl.ing.el. ; web: http://www.qsl.net/ft2fsg/ email: goranstank@gmal.com ;********************************************************************* #include P16C84.INC __FUSES (_CP_OFF & _WDT_ON & _XT_OSC & _PWRTE_ON ) DCF0 equ 0Ch DCF1 equ 0Dh DCF2 equ 0Eh DCF3 equ 0Fh DCF4 equ 10h DCF5 equ 11h DCF6 equ 12h DCF7 equ 13h BR_P equ 15h R0 equ 18h ; RAM Assignments R1 equ 19h R2 equ 1Ah R3 equ 1Bh ; Sluzi kao pomocna memorija ARG0 equ 1Ch ARG1 equ 1Dh temp equ 1Eh var equ 1Fh ; variable for misc math computations count equ 20h ; loop counter variable count2 equ 21h ; 2nd loop counter for nested loops BR_BIT equ 22h BROJAC1 equ 23h BROJAC2 equ 24h SEC equ 26h MIN equ 27h SAT equ 28h TMP0 equ 2Dh TMP1 equ 2Eh FLEGS equ 2Fh ; #define _C STATUS,0 #define _Z STATUS,2 #define SDA PORTA,3 #define SCL PORTA,4 #define EN PORTA,2 #define TACKA FLEGS,0 #define BITE FLEGS,1 #define START_F FLEGS,2 #define PAUSE_F FLEGS,3 #define DebnceOn FLEGS,4 #define SET_F1 FLEGS,5 #define SET_F2 FLEGS,6 #define SET_MES_F FLEGS,7 ;******************************************************************************** org 0x00 goto START org 04 ;INTERRUPT retfie ;------------------------------------------------------------ START btfss STATUS,4 ;TO goto Skok_WDT btfss STATUS,3 ;PD goto Skok_WDT ; Power-On Reset clrf STATUS clrf INTCON bsf STATUS, RP0 ; Bank 1 movlw B'00000011' ; Preskaler : 16 za TRM0 movwf OPTION_REG movlw B'00010100' movwf TRISA ; RA3-2 inputs , RA4,1,0 outputs movlw 0x00 movwf TRISB ; RB7-0 outputs bcf STATUS, RP0 ; Bank 0 clrf PORTA clrf PORTB clrf TMR0 clrf BROJAC1 clrf BROJAC2 bcf INTCON,RBIF clrf FLEGS ;Uzet je primer = 16:57 16.02.99.Utorak movlw B'00000000' movwf DCF0 movlw B'00000000' movwf DCF1 movlw B'11110100' movwf DCF2 movlw B'11011010' movwf DCF3 movlw B'01101010' movwf DCF4 movlw B'01001001' movwf DCF5 movlw B'01100100' movwf DCF6 movlw B'00000110' movwf DCF7 movlw .16 movwf SAT movlw .57 movwf MIN movlw .57 movwf SEC goto MAIN ;------------------------------------------ Skok_WDT clrf STATUS clrf INTCON bsf STATUS, RP0 ; Bank 1 movlw B'00000011' ; Preskaler : 16 za TRM0 movwf OPTION_REG movlw B'00010100' movwf TRISA ; RA3-2 inputs , RA4,1,0 outputs movlw 0x00 movwf TRISB ; RB7-0 outputs bcf STATUS, RP0 ; Bank 0 clrf PORTA clrf PORTB clrf TMR0 clrf BROJAC1 clrf BROJAC2 ;------------------------------------------ MAIN RTCC_FILL ; wait for RTCC to roll-over btfss INTCON,T0IF goto RTCC_FILL nop nop bcf INTCON,T0IF ;Q=4.096MHz/4/16/256=250Hz => 4ms CLRWDT ;Izbrisi WDT incf BROJAC2,w ;inc count xorlw .25 ;?=25 (=100ms) btfsc _Z ;no then skip goto SK_skok1 ;else inc time incf BROJAC2, F goto MAIN SK_skok1 clrf BROJAC2 incf BROJAC1,w ;inc count xorlw .10 ;?=10 (=1sec) btfsc _Z ;no then skip goto DoIncTime ;else inc time incf BROJAC1,w ;inc count xorlw .1 ;?=100ms btfsc _Z ;no then skip goto DoIncTime1 ;else inc time incf BROJAC1,w ;inc count xorlw .2 ;?=200ms btfsc _Z ;no then skip goto DoIncTime2 ;else inc time incf BROJAC1, F goto MAIN DoIncTime1 btfss BITE bsf PORTA,0 incf BROJAC1, F goto MAIN DoIncTime2 bsf PORTA,0 incf BROJAC1, F goto MAIN DoIncTime ;(1 sec) ; Proveri SEC,MIN,SAT clrf BROJAC1 movlw .59 subwf SEC,W ; W = SEC - 59 btfsc _C goto Do_Sec ; >= 0 ; < 0 bcf PORTA,0 bcf BITE bcf _C rrf DCF7,F rrf DCF6,F rrf DCF5,F rrf DCF4,F rrf DCF3,F rrf DCF2,F rrf DCF1,F rrf DCF0,F btfsc _C bsf BITE Do_Sec incf SEC,F movlw .60 subwf SEC,W ; W = SEC - 60 btfss _C goto MAIN ; < 0 clrf SEC ; >= 0 ;Uzet je primer = 16:57 16.02.99.Utorak movlw B'00000000' movwf DCF0 movlw B'00000000' movwf DCF1 movlw B'11110100' movwf DCF2 movlw B'11011010' movwf DCF3 movlw B'01101010' movwf DCF4 movlw B'01001001' movwf DCF5 movlw B'01100100' movwf DCF6 movlw B'00000110' movwf DCF7 call Racun_DCF incf MIN,F movlw .60 subwf MIN,W ; W = MIN - 60 btfss _C goto MAIN ; < 0 clrf MIN ; >= 0 incf SAT,F movlw .24 subwf SAT,W ; W = SAT - 24 btfss _C goto MAIN ; < 0 clrf SAT ; >= 0 goto MAIN ;------------------------------------------------------------------------- Racun_DCF movf MIN,W call BinBCD movlw 0x0F andwf R0,F andwf R1,F swapf R0,W iorwf R1,W movwf R0 ; movlw B'11000110' ; movwf R0 Racun_P1 movwf TMP0 movlw .7 movwf BR_P clrf TMP1 P1_loop rrf TMP0,F btfsc _C incf TMP1,F ;Broji BIT=1 decfsz BR_P,F goto P1_loop ;Rezultat je u TMP1,0 bsf R0,7 btfss TMP1,0 bcf R0,7 ;Rezultat MIN i P1 u R0 movlw B'00011111' andwf DCF2,F movlw B'00000000' andwf DCF3,F movlw B'11110000' andwf DCF4,F bcf _C rlf R0,F rlf R1,F rlf R0,F rlf R1,F rlf R0,F rlf R1,F rlf R0,F rlf R1,F rlf R0,F rlf R1,F movf R0,W andlw B'11100000' iorwf DCF2,F movf R1,W andlw B'00011111' iorwf DCF3,F movf SAT,W call BinBCD movlw 0x0F andwf R0,F andwf R1,F swapf R0,W iorwf R1,W movwf R0 ; movlw B'00001001' ; movwf R0 Racun_P2 movwf TMP0 movlw .6 movwf BR_P clrf TMP1 P2_loop rrf TMP0,F btfsc _C incf TMP1,F ;Broji BIT=1 decfsz BR_P,F goto P2_loop ;Rezultat je u TMP1,0 bsf R0,6 btfss TMP1,0 bcf R0,6 ;Rezultat MIN i P1 u R0 bcf R0,7 bcf _C rlf R0,F rlf R1,F rlf R0,F rlf R1,F rlf R0,F rlf R1,F rlf R0,F rlf R1,F rlf R0,F rlf R1,F movf R0,W andlw B'11100000' iorwf DCF3,F movf R1,W andlw B'00001111' iorwf DCF4,F return ;------------------------------------------------------------------------- BinBCD clrf R0 movwf R1 gtenth movlw .10 subwf R1,W btfss _C goto over movwf R1 incf R0,F goto gtenth over retlw 0 ;---------------------------------------------------------------- BCD_Bin_2 movwf R1 movwf R0 swapf R0,F movlw 0x0F andwf R0,F movlw 0x0F andwf R1,F ;---------------------------------------------------------------- BCD_Bin bcf _C ; *2 rlf R0,W bcf _C ; *2 rlf R0,F bcf _C ; *2 rlf R0,F bcf _C ; *2 rlf R0,F addwf R0,W ;W=R0*2+R0*8=R0*10 addwf R1,W ;W=R0*10+R1 return ;------------------------------------------------------------------------- END