
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ENCABEZADO \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

	LIST		P=16F628				; Microcontrolador utilizado.-
	#INCLUDE	P16F628.INC				; Definicion de registros SFR.-
	__CONFIG	0x3F18
				;0x3F61

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ DEF. DE VARIABLES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

	CBLOCK	0x20     				; En esta posicion se declaran los registros de usuario (GPR)
	
	CUENTA
	CUENTA2
	FACTOR
	PDel0
	PDel1
	FACTOR2
	FACTOR3
	AUX
	AUX2
	AUX3
	AUX4
	ENDC

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ RESET \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

RESET
	ORG	00H
	GOTO	INICIO					; Salto a inicio del programa.-

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ CONFIG. DE PUERTOS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

	ORG		05H

INICIO
	MOVLW	0x07
	MOVWF	CMCON					; DESHABILITA LOS COMPARADORES ANALOGICOS
	BSF	STATUS,5
	MOVLW	B'00011111'
	MOVWF	TRISA
	MOVLW	B'11000000'
	MOVWF	TRISB
	BCF	STATUS,5
	CLRF	PORTA					; ponemos a cero el puerto A
	CLRF	PORTB					; ponemos a cero el puerto B
	CLRF	CUENTA
	MOVLW	B'00011111'
	MOVWF	FACTOR
	MOVLW	B'00000000'
	MOVWF	FACTOR2	
	MOVLW	B'00001001'
	MOVWF	FACTOR3
	GOTO	COMPA

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ TABLA TRIANGULA \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

TABLA
	ADDWF	PCL,1
	RETLW	.0
	RETLW	.1
	RETLW	.2
	RETLW	.3
	RETLW	.4
	RETLW	.5
	RETLW	.6
	RETLW	.7
	RETLW	.8
	RETLW	.9
	RETLW	.10
	RETLW	.11
	RETLW	.12
	RETLW	.13
	RETLW	.14
	RETLW	.15
	RETLW	.16
	RETLW	.17
	RETLW	.18
	RETLW	.19
	RETLW	.20
	RETLW	.21
	RETLW	.22
	RETLW	.23
	RETLW	.24
	RETLW	.25
	RETLW	.26
	RETLW	.27
	RETLW	.28
	RETLW	.29
	RETLW	.30
	RETLW	.31

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ TABLA SENOIDAL \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

TABLA1
	ADDWF	PCL,1	
	RETLW	.16
	RETLW	.18
	RETLW	.21
	RETLW	.23
	RETLW	.25
	RETLW	.27
	RETLW	.28
	RETLW	.30
	RETLW	.31
	
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ COMPARACION DE SEŅALES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

COMPA
	
	BTFSC	PORTA,0					;PREGUNTA POR EL BIT DE ENTRADA
	GOTO	TRIANG1					;VA A LA ONDA TRIANGULAR
	BTFSC	PORTA,1
	GOTO	SENOI1
	GOTO	COMPA					;VUELVE A PREGUNTAR POR EL BOTON

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ TRIANGULAR \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

TRIANG1	

	MOVF	CUENTA,W				;MUEVO A W EL VALOR DE CUENTA (0 INICIALMENTE)
	CALL	TABLA					;Llamamos a TABLA
	MOVWF	AUX					;MUEVO EL VALOR DE W A AUX
	XORWF	FACTOR,0				;COMPARO CON FACTOR EL VALOR DE W
	BTFSC	STATUS,Z				;PREGUNTO POR LA BANDERA Z	
	GOTO 	TRIANG2					;SI SE LEVANTO VOY A TRIANG2
	MOVF	AUX,0					;MUEVO LO QUE TIENE AUX A W
	MOVWF	PORTB					; cargamos W en el puerto B
	INCF	CUENTA,F				;SUMO 1 A CUENTA PARA INCREMENTAR EL VALOR DE LA TABLA
	CALL	DEMORA					;LLAMO AL RETARDO
	GOTO	TRIANG1					;va a TRIANG1

TRIANG2
							;AHORA CUENTA TIENE EL VALOR 1F QUE ES EL MAXIMO QUE SE CARGO EN EL PASO ANTERIOR
	MOVF	CUENTA,W				;IGUAL QUE LO ANTERIOR SOLO QUE AHORA DECIENDE EL VALOR DE CUENTA
	CALL	TABLA					; llamamos a TABLA
	MOVWF	AUX2
	XORWF	FACTOR2,0
	BTFSC	STATUS,Z	
	GOTO 	FIN
	MOVF	AUX2,0
	MOVWF	PORTB					; cargamos W en el puerto B
	DECF	CUENTA,F				; DECREMENTO EL VALOR DE CUENTA Y POR ESO LA GRAFICA DEFIENDE
	CALL	DEMORA
	GOTO	TRIANG2

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ SENOIDAL \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

SENOI1	

	MOVF	CUENTA2,W				;MUEVO A W EL VALOR DE CUENTA (0 INICIALMENTE)
	CALL	TABLA1					;Llamamos a TABLA
	MOVWF	AUX3					;MUEVO EL VALOR DE W A AUX
	XORWF	FACTOR3,0				;COMPARO CON FACTOR EL VALOR DE W
	BTFSC	STATUS,Z				;PREGUNTO POR LA BANDERA Z	
	GOTO 	SENOI2					;SI SE LEVANTO VOY A TRIANG2
	MOVF	AUX3,0					;MUEVO LO QUE TIENE AUX A W
	MOVWF	PORTB					; cargamos W en el puerto B
	INCF	CUENTA2,F				;SUMO 1 A CUENTA PARA INCREMENTAR EL VALOR DE LA TABLA
	CALL	DEMORA					;LLAMO AL RETARDO
	GOTO	SENOI1					;va a TRIANG1

SENOI2
							;AHORA CUENTA TIENE EL VALOR 1F QUE ES EL MAXIMO QUE SE CARGO EN EL PASO ANTERIOR
	MOVF	CUENTA2,W				;IGUAL QUE LO ANTERIOR SOLO QUE AHORA DECIENDE EL VALOR DE CUENTA
	CALL	TABLA1					; llamamos a TABLA
	MOVWF	AUX4
	XORWF	FACTOR2,0
	BTFSC	STATUS,Z	
	GOTO 	FIN
	MOVF	AUX4,0
	MOVWF	PORTB					; cargamos W en el puerto B
	DECF	CUENTA2,F				; DECREMENTO EL VALOR DE CUENTA Y POR ESO LA GRAFICA DEFIENDE
	CALL	DEMORA
	GOTO	SENOI2

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ RUTINA DE RETARDO \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

DEMORA
	MOVLW	.6
	MOVWF	PDel0
PLoop1
	MOVLW	.207
	MOVWF	PDel1
PLoop2
	CLRWDT
	DECFSZ	PDel1,1
	GOTO	PLoop2
	DECFSZ	PDel0,1
	GOTO	PLoop1
PDe1L1
	GOTO	PDe1L2
PDe1L2
	CLRWDT
	RETURN

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ FIN DE PROGRAMA \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

FIN
	END

