; 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 <p12c508a.inc>

	__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
