;generador de 57kh para sertec electronica
; 02/06/2008 18:28
;WWW.TODOPIC.NET/FOROS  V2.2
;--------8<-----------8<-----------8<---------------8<-------------8<-----------8<-----
;Hola Norberto
;Mira la idea es desde un pic sacar las siguientes frecuencias en onda cuadrada
;por una pata que salgan 19 Kc/s
;por otra pata que salgan 38 Kc/s
;y por la otra los 38 pero invertidos o sea desfasados 180 grados
;--------8<-----------8<-----------8<---------------8<-------------8<-----------8<-----
; periodo 38 khz = 1/38000=0,00002631 =26,31 uS = semi ciclo = 13,16Us
; con cristal de 20 Mhz, cada instruccion es de 0,0000002 seg = 0,2Us
;para un semi ciclo, se necesitan 65,8 demoras nop

; 57 KHZ ??? SON 17,543 uS Y MEDIO CICLO TIENE UN PERIODO DE 8,7719 uS
;PERO PARA QUE SEAN MULTIPLOS COMUNES, NECESITO 4,38595 uS +- 4.4 uS
;--¡__¡--¡__¡--¡__¡--¡__¡--¡__¡--¡__¡--¡__¡--¡__¡--¡__¡ CADA guion - ES UNA DEMORA DE 4,3uS 57KHZ

;--¡--¡--¡__¡__¡__¡--¡--¡--¡__¡__¡__¡--¡--¡--¡__¡__¡__¡ 19 khz - ES UNA DEMORA DE 4,3uS

;---¡____¡---¡____¡---¡____¡---¡____¡---¡____¡---¡____¡ 38 khz

;*********************************************************************************

	list p=16f628a 
	#include p16f628a.inc 
	ERRORLEVEL      -302, -307 	;(NO FIGURAN LOS ERRORES DE CAMBIO DE PAGINA)
;--------------------------------------------------------------------------
	CBLOCK	H'20';H'0C'	
PDel0
DESTELLO
DESTELLO2
	ENDC

OPCION	equ	81h	;es para cristal de 20Mhz
	__CONFIG  _HS_OSC &  _WDT_OFF & _PWRTE_ON  & _BODEN_ON & _LVP_OFF & _MCLRE_ON


#DEFINE	FREC38		PORTB,0	; FRECUENCIA DE 38 KHX		pata 6
#DEFINE	FREC19		PORTB,2	;FRECUENCIA DE 19 KHX		pata 8
#DEFINE	FREC38N		PORTB,3	;38 KHZ DEFASADA 180 GRADOS	pata 9
#DEFINE	FREC57		PORTB,1 ; 57 KHZ 	pata 7
#DEFINE LED			PORTB,4	;PATA 10	DESTELLO PARA INDICAR "ESTOY VIVO!"

;**********************************************************************
reset	org	00h 	  	;el vector de reset es la direcci¢n 00
	goto    INICIO 	;se salta al inicio del programa
;**********************************************************************
	org	4	  	;interrupcion
;-----------------------------------------------------------

; *****  PROGRAMA PRINCIPAL *****
	
INICIO
	MOVLW 0x07 
	MOVWF CMCON 	;PARA EL 16F628, ELIMINO LOS COMPARADORES, TODAS SALIDAS DIGITALES
	
	BSF	STATUS,RP0	;SEGUNDO BANCO DE RAM
	MOVLW	B'11111111'
	MOVWF	TRISA		;PORT A COMO ENTRADAS
	MOVLW	B'00000000'
	
	MOVWF	TRISB
	movlw   b'00001111'	;preescaler a 1:1 en el tmr0= 0.050uS  
	movwf	OPCION		;SEGUN NOTA APLICACION MICROCHIP,AL ACTIVAR WDT
	BCF	STATUS,RP0	   ;se ubica en el primer banco de memoria RAM
 
  ;-----------------------------> GENERAR LA FRECUENCIAS <---------------
		CLRF PORTB
		MOVLW	B'00000111'

; FREC-----------38N-19A-57-38
GENERAR	MOVWF	PORTB ;EN LA SEGUNDA VUELTA, EL TIEMPO ES 421,032uS
		NOP
		GOTO	$+1
		GOTO	$+1
		CALL	DEMORA
		CALL	DEMORA	
		BCF	FREC57	
		GOTO	$+1
		GOTO	$+1
		CALL	DEMORA
		BCF		FREC38	;FLANCO DESCENDENTE
		BSF		FREC38N
		CALL	DEMORA
		NOP
;---------------------------------------;(PRIMER CICLO) 57 MHZ
		BSF		FREC57	;	(17,54 uS)
		NOP
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		CALL	DEMORA
		MOVLW	B'00000001'
		MOVWF	PORTB
		NOP
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		GOTO	$+1
	;-------------------------------------------		
		BSF		FREC57	;(35.08 uS)
		CALL	DEMORA
		NOP
		GOTO	$+1
		GOTO	$+1
		BCF		FREC38
		BSF		FREC38N
		CALL	DEMORA
		GOTO	$+1
		BCF		FREC57
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		NOP
	;-----------------------------------------
		;(TERCER CICLO)

		MOVLW	B'00000111'
		MOVWF	PORTB	; 57 MHZ  SON 17,543 uS (52.62)
		NOP
		GOTO	$+1
		NOP
		CALL	DEMORA
		CALL	DEMORA	
		GOTO	$+1
		BCF	FREC57	
		NOP
		GOTO	$+1
		CALL	DEMORA
		NOP
		BCF		FREC38	;FLANCO DESCENDENTE
		BSF		FREC38N
		CALL	DEMORA
		NOP
;---------------------------------------;(PRIMER CICLO) 57 MHZ
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS (70,16)
		GOTO	$+1
		CALL	DEMORA
		CALL	DEMORA
		NOP
		MOVLW	B'00000001'
		MOVWF	PORTB
		NOP
		CALL	DEMORA
		CALL	DEMORA

		DECFSZ	DESTELLO2
		GOTO	$+2
		INCF	DESTELLO,F
		BCF		LED
		BTFSC	DESTELLO,2	;<<<< CAMBIAR POR 1,2,3,4,5,6,7, PARA VARIAR VELOCIDAD DE DESTELLO
		BSF		LED
	;	GOTO	$+1
		GOTO	$+1
		GOTO	$+1
	;	NOP
;		GOTO	$+1
;		GOTO	$+1
;-------------------------------------------		
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS (87,7)
		CALL	DEMORA
		NOP
		GOTO	$+1
		NOP
		BCF		FREC38
		BSF		FREC38N
		CALL	DEMORA
		GOTO	$+1
		BCF		FREC57
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
;-----------------------------------------
		MOVLW	B'00000111'
		MOVWF	PORTB	;57 KHZ ??? SON 17,543 uS (105.25) *6
		NOP	
		GOTO	$+1
		NOP
		CALL	DEMORA
		CALL	DEMORA	
		GOTO	$+1
		BCF	FREC57	
		NOP
		GOTO	$+1
		CALL	DEMORA
		BSF		FREC38N
		BCF		FREC38	;FLANCO DESCENDENTE
		CALL	DEMORA
		GOTO	$+1
;---------------------------------------;(PRIMER CICLO) 57 MHZ
		NOP
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS (122.8 ) * 7 
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		CALL	DEMORA
		MOVLW	B'00000001'
		MOVWF	PORTB
		GOTO	$+1
		NOP
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		NOP
;-------------------------------------------		
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS (140,34) * 8
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		GOTO	$+1
		BSF		FREC38N
		BCF		FREC38
		CALL	DEMORA
		GOTO	$+1
		BCF		FREC57
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		NOP
;-----------------------------------------
		MOVLW	B'00000111'
		MOVWF	PORTB	;57 KHZ ??? SON 17,543 uS (157,88) * 9
		NOP
		GOTO	$+1
		NOP
		CALL	DEMORA
		CALL	DEMORA	
		GOTO	$+1
		BCF	FREC57	
		GOTO	$+1
		GOTO	$+1
		CALL	DEMORA
		BCF		FREC38	;FLANCO DESCENDENTE
		BSF		FREC38N
		CALL	DEMORA
		GOTO	$+1
	;---------------------------------------;(PRIMER CICLO) 57 MHZ
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS  (175,43) *10
		CALL	DEMORA
		NOP
		CALL	DEMORA
		GOTO	$+1
		MOVLW	B'00000001'
		MOVWF	PORTB
		GOTO	$+1
		NOP
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		GOTO	$+1
;-------------------------------------------		
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS  (192.97) *11
		CALL	DEMORA
		GOTO	$+1
		BCF		FREC38
		BSF		FREC38N
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		NOP
		BCF		FREC57
		GOTO	$+1
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		NOP
;-----------------------------------------
		MOVLW	B'00000111'
		MOVWF	PORTB	;57 KHZ ??? SON 17,543 uS (210.51) *12
		GOTO	$+1
		GOTO	$+1
		CALL	DEMORA
		CALL	DEMORA	
		GOTO	$+1
		BCF	FREC57	
		NOP
		GOTO	$+1
		CALL	DEMORA
		BSF		FREC38N
		BCF		FREC38	;FLANCO DESCENDENTE
		CALL	DEMORA
		GOTO	$+1
;---------------------------------------;(PRIMER CICLO) 57 MHZ
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS (228.06) *13
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		CALL	DEMORA
		MOVLW	B'00000001'
		MOVWF	PORTB
		GOTO	$+1
		NOP
		GOTO	$+1
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
;-------------------------------------------		
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS (245.6) * 14
		CALL	DEMORA
		GOTO	$+1
		BSF		FREC38N
		BCF		FREC38
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		BCF		FREC57
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
;-----------------------------------------
		MOVLW	B'00000111'
		MOVWF	PORTB	;57 KHZ ??? SON 17,543 uS (263,145)*15
		GOTO	$+1
		NOP	
		CALL	DEMORA
		CALL	DEMORA	
		GOTO	$+1
		GOTO	$+1
		BCF	FREC57	
		GOTO	$+1
		NOP
		CALL	DEMORA
		BSF		FREC38N
		BCF		FREC38	;FLANCO DESCENDENTE
		CALL	DEMORA
		GOTO	$+1
	;---------------------------------------;(PRIMER CICLO) 57 MHZ
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS (280,688)*16
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		CALL	DEMORA
		MOVLW	B'00000001'
		MOVWF	PORTB
		GOTO	$+1
		NOP
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		GOTO	$+1	
;-------------------------------------------		
		BSF		FREC57		;57 KHZ ??? SON 17,543 uS (298,231)*17
		CALL	DEMORA
		GOTO	$+1
		NOP
		BCF		FREC38
		BSF		FREC38N
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		BCF		FREC57
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
;-----------------------------------------
		MOVLW	B'00000111'
		MOVWF	PORTB	;57 KHZ ??? SON 17,543 uS (315,774)*18
		GOTO	$+1
		GOTO	$+1
		CALL	DEMORA
		CALL	DEMORA	
		GOTO	$+1
		BCF	FREC57	
		NOP
		CALL	DEMORA
		BSF		FREC38N
		BCF		FREC38	;FLANCO DESCENDENTE
		GOTO	$+1
		CALL	DEMORA
		GOTO	$+1
;---------------------------------------;(PRIMER CICLO) 57 MHZ
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS (333,317) *19
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		CALL	DEMORA
		MOVLW	B'00000001'
		MOVWF	PORTB
		GOTO	$+1
		NOP
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		GOTO	$+1
;-------------------------------------------		
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS (350,86)*20
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		BSF		FREC38N
		BCF		FREC38
		CALL	DEMORA
		GOTO	$+1
		NOP
		BCF		FREC57
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
;-----------------------------------------
		MOVLW	B'00000111'
		MOVWF	PORTB	;57 KHZ ??? SON 17,543 uS (368,403)*21
		NOP	
		GOTO	$+1
		CALL	DEMORA
		CALL	DEMORA	
		GOTO	$+1
		BCF	FREC57	
		GOTO	$+1
		NOP
		CALL	DEMORA
		BSF		FREC38N
		BCF		FREC38	;FLANCO DESCENDENTE
		CALL	DEMORA
		GOTO	$+1
		NOP
;---------------------------------------;(PRIMER CICLO) 57 MHZ
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS (385,946)*22
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		CALL	DEMORA
		GOTO	$+1
		MOVLW	B'00000001'
		MOVWF	PORTB
		GOTO	$+1
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		NOP
;-------------------------------------------		
		BSF		FREC57	;57 KHZ ??? SON 17,543 uS (403,489)*23
		CALL	DEMORA
		GOTO	$+1
		BSF		FREC38N
		BCF		FREC38
		CALL	DEMORA
		GOTO	$+1
		GOTO	$+1
		BCF		FREC57
		CALL	DEMORA
		CALL	DEMORA
		GOTO	$+1
		NOP
		MOVLW	B'00000111'
;-----------------------------------------

		GOTO	GENERAR	;EQUIVALE A 2 NOP
		
; Generado con PDEL ver SP  r 1.0  el 02/06/2008 Hs 19:09:02
;-------------------------------------------------------------
DEMORA  
			movlw     .2     ; 1 set numero de repeticion 
      		movwf     PDel0     ; 1 |
PLoop0  	clrwdt              ; 1 clear watchdog
        	decfsz    PDel0, 1  ; 1 + (1) es el tiempo 0  ?
      	 	goto      PLoop0    ; 2 no, loop
			NOP
			GOTO	$+1
			GOTO	$+1
			return              ; 2+2 Fin.
;-------------------------------------------------------------


	end
