Ejemplos De Ccp
-
Upload
luis-zurita -
Category
Education
-
view
3.258 -
download
1
description
Transcript of Ejemplos De Ccp
;Ejemplo nro 1;Captura: Medida de la duración de un pulso;PWM: Generar una señal de onda cuadrada por la línea RCx/CCPx cuyo periodo puede;ser modificado así como la anchura del pulso (Duty Cycle). ;Módulo CCP1 con salida de señal por la línea RC2/CCP1. La señal de ;salida tiene un periodo determinado pora la constante "Periodo" y una anchura "Duty" ;Módulo CCP2 trabaja en modo Captura. En la RSI se realiza el cambio de flanco;ascendente y descendente de manera alternada
List P=16F873include "P16F873.INC"
TONL equ 0x22 ;Parte baja del valor del ancho de pulsoTONH equ 0x23 ;Parte alta del valor del ancho de pulsoContador equ 0x27 ;Variable de contajeTemporal equ 0x28 ;Variable temporalCaptura equ 0x29 ;Nº de capturasCapiniL equ 0x2aCapiniH equ 0x2b ;Variables temporales para las capturasPeriodo equ D'100' ;Periodo de 100 uSDuty equ D'60' ;Anchura 25 uS
org 00H ;Vector de Resetgoto Inicio
org 04Hgoto Inter ;Vector de interrupción
;Programa de tratamiento de la interrupción que provoca el módulo CCP1 cada vez que ;se detecta, primero un flanco ascendente y luego un descendente por la línea RC2/CCP1.
Inter bcf PIR2,CCP2IF ;Repone el flag del módulo CCP1btfsc Captura,0 ;Es la captura del flanco descendentegoto Medir ;Si, medir el tiempo transcurrido entre ambasincf Captura,F ;No, ha sido la captura del flanco ascendentemovf CCPR2L,Wmovwf CapiniLmovf CCPR2H,Wmovwf CapiniH ;Salvar, temporalmente, el 1er valor capturadobcf CCP2CON,0 ;Capturar al flanco descendenteretfie
Medir movf CapiniL,W ;Es la captura del flanco descendente
subwf CCPR2L,Wmovwf TONLbtfss STATUS,Cincf CapiniH,Fmovf CapiniH,Wsubwf CCPR2H,Wmovwf TONH ;Restar el tiempo entre la 2ª captura y la 1ªincf Captura,F ;Capturar el 1er. flancobsf CCP2CON,0 ;Captura al flanco ascendenteretfie
;Programa principal
Inicio clrf PORTC ;Borra salidasbcf STATUS,RP1bsf STATUS,RP0 ;Selecciona banco 1movlw b'11111011'movwf TRISC ;Puerta C entradamovlw Periodo-1movwf PR2 ;Carga el registro de periodosbsf PIE2,CCP2IE ;Habilita interrupción del módulo CCP1bcf STATUS,RP0 ;Selecciona banco 0movlw Dutymovwf CCPR1L ;Carga la anchura del pulso
;El TMR1 actúa en el modo temporizador con reloj interno y un preescaler 1:1.;Según esto, la duración máxima del pulso que se puede medir será en torno a los 65mS.;La mínima estará en torno a los 20 uS. Para otros rangos se debe seleccionar un ;preescaler diferente.
movlw b'00000001'movwf T1CON ;TMR1 en Onmovlw b'11000000'movwf INTCON ;Habilita interrupciones
;El módulo CCP2 actúa en modo de captura al flanco ascendentemovlw b'00000101'movwf CCP2CON ;Módulo CCP2 en On
;El módulo CCP1 actúa en el modo PWM con salida de señal por RC2/CCP1movlw b'00001100'movwf CCP1CON
;El TMR2 trabaja con un preescaler 1:1 por lo que con una frecuencia de 4MHz se ;incrementa cada uS (4*Tosc)
movlw b'00000100'movwf T2CON ;T2 en Onclrf Captura ;Inicia captura en el 1er. flaco ascendente
Loop clrwdt ;Refresca el WDTgoto Loop ;Bucle infinito
end
;Ejemplo nro. 2;El TMR1 cuenta tantos pulsos externos como se indique ;Mediante el valor cargado en CCP1CON por la constante Ncompar;Cada vez que se alcanza el valor fijado, la salida RB0;cambia de estado.
List p=16F873include "P16F873.INC"
Ncompar equ 0FH ;Constante para modificar número de comparaciones bajas
org 00H ;Vector de Resetgoto Inicio
org 04Hgoto Inter ;Vector de interrupción
;Programa de tratamiento de la interrupción que provoca el módulo CCP1 ;cada vez que el TMR1 cuenta tantos pulsos externos como los prefijados ;mediante Ncompar
Inter bcf T1CON,TMR1ON ;TMR1 en Offbcf PIR1,CCP1IF ;Repone el flag del módulo CCP1
clrf TMR1Lclrf TMR1H ;Puesta a 0 del TMR1movlw b'00000001'xorwf PORTB,F ;RB0 cambia de estadobsf T1CON,TMR1ON ;TMR1 en Onbcf PIR1,CCP1IFretfie
;Programa principal
Inicio bcf STATUS,RP0bcf STATUS,RP1bcf T1CON,TMR1ON ;Timer1 desconectadoclrf PORTB ;Desconecta salidasbsf STATUS,RP0 ;Selecciona banco 1clrf TRISB ;Puerta B se configura como salidamovlw b'11001011'movwf TRISC ;RC0 entradabsf PIE1,CCP1IE ;Habilita interrupción del módulo CCP1bcf STATUS,RP0 ;Selecciona banco 0
;El TMR1 actúa en el modo contador de pulsos externos
;sensible al flanco ascendente y con un preescaler de 1:1.movlw b'00000010'movwf T1CON ;TMR1 en Off
;El módulo CCP1 actúa en modo de comparación e interrupción al coincidirmovlw b'00001010'movwf CCP1CON ;Módulo CCP en modo comparaciónmovlw 00hmovwf CCPR1H ;Puesta a 0 de la parte alta del valor a compararclrf TMR1Lclrf TMR1H ;Puesta a 0 del TMR1movlw Ncomparmovwf CCPR1L ;Ajusta la parte baja del valor a comparamovlw b'11000000'movwf INTCON ;Habilita interrupcionesbsf T1CON,TMR1ON ;TMR1 en On, comienza a contar
Loop clrwdt ;Refresca el WDTgoto Loop ;Bucle infinito
end