Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola me he comprado recientemente el programador pickit2 y estoy haciendo mis primeros programas para luego ponerme a hacer cosas con servos. El siguiente programa lo que intenta hacer es que pasado 20 ciclos de reloj se apague el bit 0 del puerto c y se active el 1. Llevo un buen rato mirandome la rutina del programa y no se donde esta el error. A ver si me ayudais!
#include <p16F690.inc>
VAR EQU 0x24 ;Variable
ORG 00H ;Vector de reset
GOTO INICIO
ORG 04H ;Vector de interrupción
GOTO INTERRUPCION
INTERRUPCION:
BTFSS PIR1,TMR1IF ; Comprovamos si la interrupción viene de timer1.Si PIR1
;es 0 se executa la siguiente instrucción. Si es 1
;no se executa l'instrucció.
GOTO LOOP
BCF STATUS,RP1
BCF STATUS,RP0
INCF VAR ;Incrementamos el valor de la variable.
INICIO:
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW b'00000000' ;Configuración de los puertos entrada / salida de PORTB
; 1= Entrada
; 0= Salida
MOVWF TRISC
BCF STATUS,RP1
BCF STATUS,RP0
BSF PORTC,0
;***********************Configuración del timmer1***************************
BCF STATUS,RP1
BSF STATUS,RP0
;ACTIVAMOS MASCASCARAS
BSF PIE1,TMR1IE
BSF INTCON,PEIE
BSF INTCON,GIE
;CONFIGURAMOS EL TIMER
BCF STATUS,RP0
BSF T1CON,T1GINV
BCF T1CON,6 ;TMRGE1
BCF T1CON,T1CKPS1
BCF T1CON,T1CKPS0
BCF T1CON,T1OSCEN
BCF T1CON,1 ;TMRCS
BSF T1CON,0 ;TM1RON
LOOP:
;***********CODIGO PER VAR=20*****************************************
MOVFW VAR
XORLW d'20'
BTFSC STATUS,Z
CLRF VAR
BTFSC STATUS,Z
BCF PORTC,0
BTFSC STATUS,Z
BSF PORTC,1
GOTO LOOP
END
No la verdad jejej... me he puesto a hacer el codigo y no he tenido en cuenta la frecuencia. Me pensaba que utilitza el reloj interno del pc. A donde puedo configurar la frecuencia interna en el Mplab? Porque en el programa grabador PICKit2 Programmer he mirado todas las opciones y no encuentro nada.
Gracias!
Para la configuración del PIC, creo que además hay que tocar un registro para asignar la frecuancia, pero con esto te funcionará. Esto es por código, estos flags los puedes ocnfigurar en el MPLAB también.
list p=16f690 ; list directive to define processor
#include <P16F690.inc> ; processor specific variable definitions
__CONFIG _CP_ON & _CPD_OFF & _BOR_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _FCMEN_OFF & _IESO_OFF
Para la subrutina de interrupción:
ORG 0x005 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf PCLATH,w ; move pclath register into W register
movwf pclath_temp ; save off contents of PCLATH register
;;;;; Tu codigo
movf pclath_temp,w ; retrieve copy of PCLATH register
movwf PCLATH ; restore pre-isr PCLATH register contents
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt