fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Ayuda con el timer ...
 
Avisos
Vaciar todo

Ayuda con el timer del pic16f690

7 Respuestas
3 Usuarios
0 Reactions
7,438 Visitas
plapu
Respuestas: 80
Topic starter
(@plapu)
Trusted Member
Registrado: hace 16 años

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

Responder
6 respuestas
plapu
Respuestas: 80
Topic starter
(@plapu)
Trusted Member
Registrado: hace 16 años

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!

Responder
juanjo
Respuestas: 451
(@juanjo)
Ardero
Registrado: hace 18 años

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

Responder
Página 2 / 2
Compartir: