Hola a todos. Soy nuevo con los PIC y estoy intentando realizar un intermitente de 1 segundo en ON y 1 segundo OFF.
El tema es que al usar mplab sim se queda en un bucle infinito entre las instrucciones que comprueban si se ha desbordado el timer 0 (usado como temporizador por medio del flag T0IF) instrucción btfss INTCON, T0IF y goto revose
No sé si es debido a que no cuenta el TMR0, pero tengo entendido que está continuamente contando o que no se activa la bandera de desbordamiento, o que hay que configurar algo en mplab para usar los timers.
A continuación os dejo el programa en ensamblador, también debo decir que he probado otro programa que estaba por Internet y me ocurre el mismo fallo.
Muchísimas gracias, por adelantado.
El tema es que al usar mplab sim se queda en un bucle infinito entre las instrucciones que comprueban si se ha desbordado el timer 0 (usado como temporizador por medio del flag T0IF) instrucción btfss INTCON, T0IF y goto revose
No sé si es debido a que no cuenta el TMR0, pero tengo entendido que está continuamente contando o que no se activa la bandera de desbordamiento, o que hay que configurar algo en mplab para usar los timers.
A continuación os dejo el programa en ensamblador, también debo decir que he probado otro programa que estaba por Internet y me ocurre el mismo fallo.
Muchísimas gracias, por adelantado.
PHP:
;Este programa hace parpadear 1 led 1sg y 1sg
list P=16F648A
#include <P16F648A.inc>
__config _CP_OFF & _WDT_OFF & _PWRTE_OFF & _HS_OSC
;Definición de constantes
#define _XTAL_FREQ 20000000 ;cristal utilizado de 20Mhz
;
TMR0 equ h'0'
PORTA equ h'05'
PORTB equ h'06'
CONTA equ h'20'
W equ 0
F equ 1
org 0
clrwdt
bcf STATUS,RP0;Seleccionamos el banco 0
bcf STATUS,RP1;
bcf INTCON,T0IE
clrf PORTB;Se pone a cero el puerto b
bsf STATUS,RP0;Nos posicionamos en el banco 1
bcf STATUS,RP1;
movlw h'00'
movwf TRISB;Configuramos PORTB como salida
movlw b'00000111';Configuramos reg OPTION con prescaler a 256
movwf OPTION_REG
bcf STATUS,RP0;Nos situamos en el banco de memoria 0
bcf STATUS,RP1;
clrf TMR0;
bcf INTCON,T0IF
bsf INTCON,T0IE
bsf INTCON,GIE
Inicio bsf PORTB,0;Encendemos el led colocado en el bit 0 del PORTB
call Retardo;llamamos a la subrutita que cuenta 1 sg
bcf PORTB,0;apagamos el led situado en el bit0 del PORTB
call Retardo;Volvemos a llamar a la subrutina para que cuente 1 sg
goto Inicio;Volvemos a Inicio para hacer un bucle
Retardo movlw .60; precargo el timer0
movwf TMR0
Revose btfss INTCON,T0IF;compruebo si se a activado el flaf de desbordamiento del TMR0
goto Revose;comprueba hasta que se active el flag
bcf INTCON,T0IF; resetea el flag
incf CONTA,1;contamos 100 veces 10ms
movlw b'01100100'
xorwf CONTA,0;comprobamos que hemos llegado a 100
btfsc STATUS,2
goto Revose
return
end
Última edición por un moderador: