LIST P = 16F84A ;********************************************************************* ; RF Telecommand - TX-433.92MHz - ASK ; Date: 08.10.2003. V.1.0 ; YT2FSG - Stankovic Goran dipl.ing.el. E-mail: goranstak@gmail.com ;********************************************************************* #include P16F84A.INC __FUSES (_CP_ON & _WDT_ON & _XT_OSC & _PWRTE_ON ) DATA0 equ 0Ch DATA1 equ 0Dh DATA2 equ 0Eh DATA3 equ 0Fh DATA4 equ 10h DATA5 equ 11h DATA6 equ 12h DATA7 equ 13h BR_BIT equ 15h BR_BYTE equ 16h COUNT equ 17h ; loop counter variable MSEC1 equ 18h MSEC equ 19h SEC equ 1Ah MIN equ 1Bh SAT equ 1Ch TW equ 1Dh FLEGS equ 2Fh ; #define _C STATUS,0 #define _Z STATUS,2 #define PWM PORTA,3 #define BITE FLEGS,1 ;******************************************************************************** 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 call Init_port call Init_data clrf SEC clrf MIN bcf INTCON,RBIF goto MAIN ;------------------------------------------ Skok_WDT call Init_port ;------------------------------------------ MAIN RTCC_FILL ; wait for RTCC to roll-over btfss INTCON,T0IF goto RTCC_FILL nop nop bcf INTCON,T0IF ;Q=4.096MHz/4/256=4000Hz => 0.25ms CLRWDT ;Clear WDT incf MSEC1,F ;inc count movlw .200 subwf MSEC1,W btfss _C goto MAIN clrf MSEC1 ; 50ms incf MSEC,F ;inc count movlw .4 subwf MSEC,W btfss _C goto MAIN clrf MSEC ; 1sec (200ms) incf SEC,F ;inc count call Init_data movlw .12 ;Nr. Preample movwf BR_BIT P_Loop bcf PWM call Delay_500us_6 bsf PWM call Delay_500us_3 decfsz BR_BIT,F goto P_Loop movlw .10 ;Nr. Header movwf BR_BIT H_Loop bcf PWM call Delay_500us decfsz BR_BIT,F goto H_Loop movlw DATA0 ;Start data movwf FSR movlw .4 ;Nr. Byte movwf BR_BYTE BY_Loop movf INDF,W movwf TW movlw .8 ;Nr. Bit movwf BR_BIT BI_Loop bsf PWM call Delay_500us bcf _C rrf TW,F btfss _C bsf PWM btfsc _C bcf PWM call Delay_500us_6 bcf PWM call Delay_500us_3 decfsz BR_BIT,F goto BI_Loop incf FSR,F decfsz BR_BYTE,F goto BY_Loop ;VLOW bsf PWM call Delay_500us_6 bcf PWM goto MAIN ;---------------------------------------------------------------- Delay_500us_6 nop nop nop Delay_500us_3 nop nop nop Delay_500us movlw .123 movwf COUNT D_Loop nop decfsz COUNT,F goto D_Loop return ;---------------------------------------------------------------- Init_port clrf STATUS clrf INTCON bsf STATUS, RP0 ; Bank 1 movlw B'10001111' ; RBPU=1, Prescaler : 128 for WDT movwf OPTION_REG movlw B'00000000' movwf TRISA ; RA4-0 outputs movlw B'11111111' movwf TRISB ; RB7-0 inputs bcf STATUS, RP0 ; Bank 0 clrf PORTA movlw B'11111111' movwf PORTB return ;---------------------------------------------------------------- Init_data movlw 0xA3 ; Nr. Device movwf DATA0 movf SEC,W ; Time movwf DATA1 movf PORTB,W movwf DATA2 comf PORTB,W movwf DATA3 return ;------------------------------------------------------------------------- END