; ========================== ???? ==============================
;
;	PIC12F683
;	clock:INTOSCIO 4MHz
;
;
;
	LIST	P=12f683
	#INCLUDE <p12f683.inc>

	__CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _BOD_ON & _IESO_OFF& _PWRTE_ON & _INTOSCIO & _MCLRE_OFF

R_ContA		equ	0x020	;para los retardos						
R_ContB		equ	0x021
R_ContC		equ	0x022

	ORG	0
	GOTO	INIT

; ==============================================================

	ORG	4		;no utilizo interrupciones a si que 
	goto	INIT		;esta parte en blanco
	
; ==============================================================
;	
INIT
	BANKSEL	GPIO
	CLRF	GPIO		;limpia el registro
        MOVLW	07h  
	MOVWF	CMCON0		;GP2-0 como digital I/O
	MOVLW	B'10000000'
	MOVWF	INTCON
	BANKSEL	  ANSEL
    ; 
	MOVLW	018h
	MOVWF	ANSEL		;GP4/AN3 entrada analogica 8Tosc
	MOVLW	010h
	MOVWF	TRISIO		;GP0-3,5 salidas GP4(AN3)entrada analogica
	BCF	STATUS,RP0	
	MOVLW	b'00001101'
	MOVWF	ADCON0		   ; configuracion a/d
    ;
	BSF	STATUS,RP0	
	MOVLW	060h
	MOVWF	OSCCON		;CLOCK=4MHz
	BANKSEL	GPIO
	
; Configuracion del PWM
 
	BANKSEL	PR2
	MOVLW	D'255'		;
	MOVWF	PR2		;periodo
	BCF	STATUS,RP0	;
	MOVLW	D'0'		;
	MOVWF	CCPR1L		;duty
	MOVLW	b'00001100'	;0Ch
	MOVWF	CCP1CON		;modo PWM
	MOVLW	b'0000100'	
	MOVWF	T2CON		;Timer2 ON ,Pre:1
	CLRF	TMR2
	BANKSEL	GPIO
	GOTO	MAIN
	
; ==============================================================
;    
MAIN
		BANKSEL		ADCON0
		CALL		Retardo_50micros
		BSF		ADCON0, GO
loop		BTFSC		ADCON0, GO
		GOTO		loop
		CALL		Retardo_10micros
		MOVFW		ADRESH
		BANKSEL		CCPR1
		MOVWF		CCPR1
		GOTO		MAIN
		
; ==============RUTINA DE RETARDOS================================
    
Retardo_10micros				
	nop							
	nop							
	nop							
	nop							
	nop							
Retardo_5micros					
	nop							
Retardo_4micros					
	return						
Retardo_500micros				
	nop							
	movlw	d'164'				
	goto	RetardoMicros		
Retardo_200micros				
	nop							
	movlw	d'64'				
	goto	RetardoMicros		
Retardo_100micros				
	movlw	d'31'				
	goto	RetardoMicros		
Retardo_50micros				
	nop							
	movlw	d'14'				
	goto	RetardoMicros		
Retardo_20micros				
	movlw	d'5'				
RetardoMicros
	movwf	R_ContA				
Rmicros_Bucle
	decfsz	R_ContA,F			
	goto	Rmicros_Bucle		
	return						
Retardo_200ms					
	movlw	d'200'				
	goto	Retardos_ms			
Retardo_100ms					
	movlw	d'100'				
	goto	Retardos_ms			
Retardo_50ms					
	movlw	d'50'				
	goto	Retardos_ms			
Retardo_20ms					
	movlw	d'20'				
	goto	Retardos_ms			
Retardo_10ms					
	movlw	d'10'				
	goto	Retardos_ms			
Retardo_5ms						
	movlw	d'5'				
	goto	Retardos_ms			
Retardo_2ms						
	movlw	d'2'				
	goto	Retardos_ms			
Retardo_1ms						
	movlw	d'1'				
Retardos_ms
	movwf	R_ContB				
R1ms_BucleExterno
	movlw	d'249'				
	movwf	R_ContA				
R1ms_BucleInterno
	nop							
	decfsz	R_ContA,F			
	goto	R1ms_BucleInterno	
	decfsz	R_ContB,F			
	goto	R1ms_BucleExterno 	
	return						
Retardo_20s						
	movlw	d'200'				
	goto	Retardo_1Decima		
Retardo_10s						
	movlw	d'100'				
	goto	Retardo_1Decima		
Retardo_5s						
	movlw	d'50'				
	goto	Retardo_1Decima		
Retardo_2s						
	movlw	d'20'				
	goto	Retardo_1Decima		
Retardo_1s						
	movlw	d'10'				
	goto	Retardo_1Decima		
Retardo_500ms					
	movlw	d'5'				
Retardo_1Decima
	movwf	R_ContC				
R1Decima_BucleExterno2
	movlw	d'100'				
	movwf	R_ContB				
R1Decima_BucleExterno
	movlw	d'249'				
	movwf	R_ContA				
R1Decima_BucleInterno          
	nop							
	decfsz	R_ContA,F			
	goto	R1Decima_BucleInterno	
	decfsz	R_ContB,F			
	goto	R1Decima_BucleExterno	
	decfsz	R_ContC,F			
	goto	R1Decima_BucleExterno2	
	return			   

        END
