Cambiar de OSC Externo a Interno.

Hola amig@s:

¿Es posible cambiar de oscilador externo a interno de este código?

Código:
;  S2  S1 |  LV  LA  LR  M
; --------|--------------------------------
;  0   0  |  0   0   0   0    (Configuración 0. Estado "Nulo").
;  0   1  |  0   1   0   0    (Configuración 1. Estado "Llenándose").
;  1   0  |  goto            (Configuración 2. Estado "Llenándose").
;  1   1  |  0   0   1   1    (Configuración 3. Estado "Motor").

; ZONA DE DATOS **********************************************************************

    LIST        P=16F88
    INCLUDE        <P16F88.INC>
    __CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
    __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF

    CBLOCK    0x20
    Flag
    Config_3
    ENDC

; ZONA DE CÓDIGOS ********************************************************************

    ORG     0                    ; El programa comienza en la dirección 0.

Inicio
    bcf        STATUS,RP1
    bsf        STATUS,RP0          
    movlw    b'00000000'                                     
    movwf    ANSEL         
    clrf    PORTB         
    movlw    b'11111111'    
    movwf    PORTA          
    bcf        STATUS,RP1
    bcf        STATUS,RP0 
    clrw

Principal
    movf    PORTA,W                ; Lee los sensores.
    andlw    b'00000011'            ; Máscara para quedarse con el valor de los sensores.
    addwf    PCL,F                ; Salta a la configuración adecuada.
    goto    Configuracion0        ; 0 0
    goto    Configuracion1        ; 0 1
    goto    Configuracion2        ; 1 0
    goto    Configuracion3        ; 1 1
Configuracion0                    ; Nulo. Led amarillo.
    movlw     b'00001000'
    clrf    Flag
    clrf    Config_3            
    goto    ActivaSalida
Configuracion1                    ; Llenándoce, Led verde.
    movlw     b'00000100'
    btfss    Flag,0
    goto    ActivaSalida
Configuracion2                    ; Seguridad.
;    goto    Configuracion3
Configuracion3                    ; Vaciándose. Led rojo, motor activo.
    movlw    .1
    movwf    Flag
    movlw     b'00000011'
;    movwf    Config_3
    goto    ActivaSalida
ActivaSalida
    movwf    PORTB                
    goto     Principal

    END

Quiero conseguir ponerlo a 4 ó 8 MHz con el oscilador interno a un PIC-16F88. Me cuesta hacerlo funcionar a pasar que lo explica en su hoja de datos.

Saludo.
 
El programa funciona bien con el reloj externo? El codigo funciona bien, pero quieres solo cambiar de externo a interno?
 
Te falta toda la parte de configuracion del reloj. Lee la cartilla.


Código:
 BSF    STATUS,RP0    ; CAMBIO AL BANCO 1
    MOVLW    B'01100000'    ; ESCRIBE ESTE VALOR EN EL ACUMULADOR 
    MOVWF    OSCCON    ; MUEVE ESTE VALOR AL REG. OSCCON (VEL=4 mhz)
 
Por lo que veo al cargar el valor te refieres a esto:
sin-titulo-1-671.gif


He encontrado esto:

Código:
_EXTRC_CLKOUT                 EQU     H'3FFF'
_EXTRC_IO                     EQU     H'3FFE'
_INTRC_CLKOUT                EQU     H'3FFD'
_INTRC_IO                     EQU     H'3FFC'
_EXTCLK                         EQU     H'3FEF'
_HS_OSC                      EQU     H'3FEE'
[B][COLOR=Blue]_XT_OSC[/COLOR] [/B]                     EQU     H'3FED'
_LP_OSC                      EQU     H'3FEC'

Me imagino que hay que usar el _INTRC_CLKOUT o el _INTRC_IO o ninguno de los dos. ¿Exactamente cual de los dos?

Ahora completamente lo he hecho así. Antes de comprar el PIC16F88 cuando acabe agosto, que están de vacaciones, quiero saber si está bien hecho.

Código:
;  S2  S1 |  LV  LA  LR  M
; --------|--------------------------------
;  0   0  |  0   0   0   0    (Configuración 0. Estado "Nulo").
;  0   1  |  0   1   0   0    (Configuración 1. Estado "Llenándose").
;  1   0  |  goto            (Configuración 2. Estado "Llenándose").
;  1   1  |  0   0   1   1    (Configuración 3. Estado "Motor").

; ZONA DE DATOS **********************************************************************

    LIST        P=16F88
    INCLUDE        <P16F88.INC>
    __CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
    __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF

    CBLOCK    0x20
    Flag
    Config_3
    ENDC

; ZONA DE CÓDIGOS ********************************************************************

    ORG     0                    ; El programa comienza en la dirección 0.

Inicio
    bcf        STATUS,RP1
    bsf        STATUS,RP0
    movlw    b'01100000'            ; ESCRIBE ESTE VALOR EN EL ACUMULADOR 
    movwf    OSCCON                ; MUEVE ESTE VALOR AL REG. OSCCON (VEL=4 mhz)          
    movlw    b'00000000'                                     
    movwf    ANSEL         
    clrf    PORTB         
    movlw    b'11111111'    
    movwf    PORTA          
    bcf        STATUS,RP1
    bcf        STATUS,RP0 
    clrw

Principal
    movf    PORTA,W                ; Lee los sensores.
    andlw    b'00000011'            ; Máscara para quedarse con el valor de los sensores.
    addwf    PCL,F                ; Salta a la configuración adecuada.
    goto    Configuracion0        ; 0 0
    goto    Configuracion1        ; 0 1
    goto    Configuracion2        ; 1 0
    goto    Configuracion3        ; 1 1
Configuracion0                    ; Nulo. Led amarillo.
    movlw     b'00001000'
    clrf    Flag
    clrf    Config_3            
    goto    ActivaSalida
Configuracion1                    ; Llenándoce, Led verde.
    movlw     b'00000100'
    btfss    Flag,0
    goto    ActivaSalida
Configuracion2                    ; Seguridad.
;    goto    Configuracion3
Configuracion3                    ; Vaciándose. Led rojo, motor activo.
    movlw    .1
    movwf    Flag
    movlw     b'00000011'
;    movwf    Config_3
    goto    ActivaSalida
ActivaSalida
    movwf    PORTB                
    goto     Principal

    END
 
Última edición:
Atrás
Arriba