TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Goten222 en 09 de Febrero de 2017, 02:48:38
-
Hola tengo un problema con el PIC16F877A no me corre un programa que anteriormente habia hecho con el PIC16F84A y me salio ya cambie las librerias pero no me queda no se a que se deba. El programa lo saque de el libro "Microcontrolador pic16f84a desarrollo de proyectos"
agradeceria sus respuestas
ESTE ES EL PROGRAMA QUE NO ME QUEDA CON EL PIC16F877A
; ZONA DE DATOS **********************************************************************
LIST P=16F877A
INCLUDE <P16F877A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x21
ENDC
; ZONA DE CÓDIGOS ********************************************************************
ORG 0
Inicio
call LCD_Inicializa
Principal
movlw 'H'
call LCD_Caracter
call Retardo_500ms
movlw 'o'
call LCD_Caracter
call Retardo_500ms
movlw 'l'
call LCD_Caracter
call Retardo_500ms
movlw 'a'
call LCD_Caracter
call Retardo_500ms
call LCD_Borra ; Borra la pantalla.
call Retardo_500ms
goto Principal
INCLUDE <LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
END
-------------------------------------------------------
ESE ES EL PROGRAMA QUE ME QUEDO CON EL PIC16F84A
-------------------------------------------------------------------------------
; ZONA DE DATOS **********************************************************************
LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x0C
ENDC
; ZONA DE CÓDIGOS ********************************************************************
ORG 0
Inicio
call LCD_Inicializa
Principal
movlw 'J'
call LCD_Caracter
call Retardo_500ms
movlw 'U'
call LCD_Caracter
call Retardo_500ms
movlw 'A'
call LCD_Caracter
call Retardo_500ms
movlw 'N'
call LCD_Caracter
call Retardo_500ms
call LCD_UnEspacioBlanco
call Retardo_500ms
movlw 'D'
call LCD_Caracter
call Retardo_500ms
movlw 'E'
call LCD_Caracter
call Retardo_500ms
call LCD_UnEspacioBlanco
call Retardo_500ms
movlw 'D'
call LCD_Caracter
call Retardo_500ms
movlw 'I'
call LCD_Caracter
call Retardo_500ms
movlw 'O'
call LCD_Caracter
call Retardo_500ms
movlw 'S'
call LCD_Caracter
call Retardo_500ms
call LCD_Caracter
call Retardo_500ms
call LCD_Borra
;.
call Retardo_500ms
goto Principal
INCLUDE <LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
END
-
Hola Goten, para poder apoyarte quisiera saber lo siguiente:
Es todo el código?
El del PIC16F84A, te funciono?
Con que cristal manejas ambos?
Yo veo que suceden varias cosas. Despues del ORG 0 que es la zona del reset tienes que configurar los pines e/s del PIC, ademas de esto el 877 tiene ADC que por default estan activos. Asi mismo si tienes un cristal de mas de 8mhz tu pic debes configurarlo como HS. Espero nos puedas brindar mas información para poder apoyarte.
Saludos
-
El cristal es de 4MHz y el programa funciona bien con el PIC16F84A pero no se por que al cambiarlo al 16f877a no me queda si ya cambie la direccion de 0x0c a 0x20
-
A que pines del PIC16F877a conectaste el bus de datos, y tambien los pines de control?
Saludos
-
El cristal es de 4MHz y el programa funciona bien con el PIC16F84A pero no se por que al cambiarlo al 16f877a no me queda si ya cambie la direccion de 0x0c a 0x20
Seguramente por que el PIC16F877A posee pines analogicos, al momento del reset estos arrancan como analogicos, y deberias pasarlos a digital.
El 16F84A no posee esto, y por eso te funciona.
O agregas en el codigo de tu libreria, o en el comienzo, agrega las lineas modificando el registro ADCON1 que es el que necesitas, es decir con un:
MOVLW 0x06
MOVWF ADCON1
Recorda que el ADCON1 esta en el banco1