Problemas subrutina de retardo pic16f887

tengo problemas con este código funciona perfectamente cuando o corro pero a la hora de asignar la rutina de retardo crea problema que a la hora de simularlo coerre y llega un punto en el que ya no avanza

********************************************************************
list p=16F887
#include <p16F887.inc>


__CONFIG _CONFIG1, _DEBUG_OFF &_LVP_OFF & _FCMEN_OFF &_IESO_OFF &_BOR_OFF &_CPD_OFF &_CP_OFF &_MCLRE_ON &_PWRTE_ON &_WDT_OFF &_INTOSCIO
__CONFIG _CONFIG2, _WRT_OFF &_BOR21V


;CONFIGURACION INICIAL


CBLOCK 0X20
CONTADOR1
CONTADOR2

TEMP1
TEMP2


ENDC



;CODIGO DE EL PROGRAMA ESTABLECIDO A PRIMER PRACTICA1
ORG 0x000
GOTO INICIO
ORG 0x005
INICIO
CALL CONFIG_INI
CLRF PORTD
MOVLW B'00000001'
MOVWF PORTD
REGRESO
VUELTA1

BSF STATUS,C
RLF PORTD
BTFSS PORTD,7

GOTO VUELTA1 ;
;CALL TEMPORIZADOR
CALL RETARDO
VUELTA2

BCF STATUS,C
RLF PORTD
BTFSC PORTD,6
GOTO VUELTA2
;CALL TEMPORIZADOR
CALL RETARDO
VUELTA3

BSF STATUS,C
RRF PORTD
BTFSS PORTD,1
GOTO VUELTA3
;CALL TEMPORIZADOR
CALL RETARDO
VUELTA4

BCF STATUS,C
RRF PORTD
BTFSC PORTD,1
GOTO VUELTA4
CALL RETARDO
;CALL TEMPORIZADOR
GOTO REGRESO

;TEMPORIZADOR

; CLRF CONTADOR2
;CICLO1
; CLRF CONTADOR1
;CICLO2

; DECFSZ CONTADOR2
;GOTO CICLO2
;DECFSZ CONTADOR1
;GOTO CICLO1



RETARDO
MOVLW .250
MOVWF TEMP2
CICLO2 DECFSZ TEMP2,F
GOTO SALTO1
GOTO FINCICLO2
SALTO1
MOVLW .250
MOVWF TEMP1
CICLO1 NOP

DECFSZ TEMP1,F
GOTO CICLO1
GOTO CICLO2
FINCICLO2




RETURN


CONFIG_INI
BCF STATUS,RP0 ;PONE A CERO EL RP0 DEL STATUS
BCF STATUS,RP1 ;PONE A CERO EL RP1 DEL STATUS Y CON LA ANTERIOR LINEA Y SE SELECCIONA EL BANCO_0
CLRF PORTA ;LIMPIA EL PORTA
CLRF PORTB ;LIMPIA EL PROTB
CLRF PORTC ;LIMPIA EL PORTC
CLRF PORTD ;LIMPIA EL PROTD
CLRF PORTE ;LIMPIA EL PORTE
BSF STATUS,RP0 ;PONE A 1 EL BIT RP0 CON LO QUE AHORA SE SELECCIONA
MOVLW 0X07 ;CARGUE EL VALOR B'01110000' (0X70) EN EL REGISTRO W PARA CONFIGURAR
;A 8MHZ EN EL OSCCON EL CUAL ES PARA CONFIGURAR LA FRECUENCIA DEL OSCILADOR
;INTERNO DEL MICROCRONTROLADOR
MOVWF OSCCON ;CARGA LO QUE HAY EN W A OSCCON OSEA QUE PASA EL VALOR DE W HACIA OS
BSF STATUS,RP1 ;PONE A A1 EL BIT RP1 DEL STATUS PARA SELECCIONA EL BANCO3, POR QUE ES
;EN EL BANCO1 (B'01') Y SE NECESITA TRABAJAR AHORA EN EL BANCO3 (B'
MOVLW B'00000000'
MOVWF ANSEL ;CON ESTAS DOS ULTIMAS LINEAS DE LIMPIAR ANSEL CONFIGURA UNA PARTE DE
;Y SALIDAS DIGITALES
MOVLW B'00000000'
MOVWF ANSELH ;CON ESTAS DOS ULTIMAS LINEAS DE LIMPIAR ANSELH CONFIGURA LA OTRA
;ENTRADAS Y SALIDAS DIGITALES
BCF STATUS,RP1 ;PONE A CERO EL BIT RP1 DEL STATUS PARA SELECCIONA EL BANCO 1
MOVLW B'11111111' ;CON ESTA LINEA Y LA SIGUIENTE CONFIGURA EL PORTA COMO ENTRADAS
MOVWF TRISA
MOVLW B'11111111' ;CON ESTA LINEA Y LA SIGUIENTE CONFIGURA EL PORTB COMO ENTRADAS
MOVWF TRISB
MOVLW B'00000000' ;CON ESTA LINEA Y LA SIGUIENTE CONFIGURA EL PORTC COMO SALIDAS
MOVWF TRISC
MOVLW B'00000000' ;CON ESTA LINEA Y LA SIGUIENTE CONFIGURA EL PORTD COMO SALIDAS
MOVWF TRISD
BCF STATUS,RP0
RETURN
END







**********************************************************
 
¿Si ya tenias la configuración para el oscilador interno a 8MHz. Por qué dejaste 0x07 para el registro OSCCON?
Así solo estableces los bits HTS, LTS y SCS en 1, dejando el oscilador sin funcionar. (Mira la hoja de datos)
Bien podrías haber usado 0x70 (b'01110000') como lo tienes comentado.
Pero es mejor que uses 0x74 (b'01110100') para que el oscilador interno HS funcione estable a 8MHz.

movlw 0x74
movwf
OSCCON

Para generar el código de los retardos, yo uso el programa de esta pagina.
http://www.piclist.com/cgi-bin/delay.exe

Pruébalo, verás que funciona muy bien.

Saludos.
 
¿Si ya tenias la configuración para el oscilador interno a 8MHz. Por qué dejaste 0x07 para el registro OSCCON?
Así solo estableces los bits HTS, LTS y SCS en 1, dejando el oscilador sin funcionar. (Mira la hoja de datos)
Bien podrías haber usado 0x70 (b'01110000') como lo tienes comentado.
Pero es mejor que uses 0x74 (b'01110100') para que el oscilador interno HS funcione estable a 8MHz.

movlw 0x74
movwf
OSCCON

Para generar el código de los retardos, yo uso el programa de esta pagina.
http://www.piclist.com/cgi-bin/delay.exe

Pruébalo, verás que funciona muy bien.

Saludos.

apenas estoy iniciando en esto de los microcontroladores motivo por el cual no compremdo del todo, sigo con el problema de la subrutina o en dado caso como configurar el oscilador interno, en el ensamble los leds solo están encendidos no realizan ninguna funcion
 
apenas estoy iniciando en esto de los microcontroladores motivo por el cual no comprendo del todo, sigo con el problema de la subrutina o en dado caso como configurar el oscilador interno, en el ensamble los leds solo están encendidos no realizan ninguna funcione
Te adjunto un sencillo ejemplo usando el oscilador interno configurado a 8MHz.
Se trata del clásico efecto de luces del auto fantástico "KIT" en ensamblador.
Utilice una subrutina de retardo de 150ms, usando el código que genera el programa que te mencione.
Cómo usé el puerto B, se configuró como digital I/O usando el registro ANSELH

Mira la estructura del programa, y las configuraciones usadas.

Suerte.
 

Adjuntos

  • 16F887 Luces Kit con Osc. Interno.zip
    16.5 KB · Visitas: 16
Te adjunto un sencillo ejemplo usando el oscilador interno configurado a 8MHz.
Se trata del clásico efecto de luces del auto fantástico "KIT" en ensamblador.
Utilice una subrutina de retardo de 150ms, usando el código que genera el programa que te mencione.
Cómo usé el puerto B, se configuró como digital I/O usando el registro ANSELH

Mira la estructura del programa, y las configuraciones usadas.

Suerte.



muchas gracias he salido de mi problema y visto bien era muy sencillo. iwal gracias a ambos por tomarse su tiempo en ayudarme, sigo en la practica si no no avanzare falta mucho por aprender
 
Atrás
Arriba