; Emetteur radio : 1 trame série (16 bits, ~1000 Bps) par minute, avec 12C508A ; Oscillateur LP 32.768 kHz : Tins=~122µs list p=12c508a include __CONFIG _WDT_ON & _LP_OSC & _MCLRE_OFF & _CP_ON cblock 0x07 nbwup endc #DEFINE alim GPIO,0 #DEFINE data GPIO,1 org 0x00 clrw TRIS GPIO ; toutes les broches en sortie movlw B'11001111' ; WDT prescaler = 1:128 ; pas de WakeUp et PinChange OPTION clrf GPIO btfsc STATUS,NOT_TO ; WDT Time-Out => /TO=0 goto send decfsz nbwup,f ; fin de tempo ? sleep send bsf alim ; alim module emetteur : 1ms call t1ms bsf data ; signal d'envoi imminent : 2ms environ call t1ms call t1ms bcf data ; bit de start : 1ms call t1ms bcf data ; on envoie les 16 bits D15-D0 (MSb first) 0 call t1ms bcf data ; 0 call t1ms bsf data ; 1 call t1ms bcf data ; 0 call t1ms bsf data ;1 call t1ms bsf data ;1 call t1ms bcf data ;0 call t1ms bsf data ;1 call t1ms bsf data ;1 call t1ms bsf data ;1 call t1ms bsf data ;1 call t1ms bcf data ;0 call t1ms bcf data ;0 call t1ms bsf data ;1 call t1ms bcf data ;0 call t1ms bsf data ;1 call t1ms bcf data ; fin de trame 0 bcf alim movwf nbwup ; initialisation variable compteur d'evenements (26 deja dans W) sleep ; Routine de temporisation 854µs ; Le changement d'etat d'une broche (bsf/bcf) prend effet en fin d'instruction ; Durée totale d'un bit en sortie : 854 + 122 = 976µs = Tbo t1ms nop ; temporisation de 854µs (en comptant appel+retour) nop nop retlw D'26' END