• Domingo 22 de Diciembre de 2024, 12:42

Autor Tema:  Problemas En Lectura De Puerto Con 16f876  (Leído 2138 veces)

Azpicueta

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problemas En Lectura De Puerto Con 16f876
« en: Martes 24 de Febrero de 2004, 18:23 »
0
Hola a todos! Es la primera vez que escribo y acabo de empezar en esto de los PICs. He comenzado con el 16F876 porque me lo recomendaron como uno de los más sencillos.

Mi problema aparece al empezar a probar con el PIC, para lo que escribí un simple programa que lee del puerto A y escribe lo que ha leido en el puerto B. Cuando simulo con Pic Simulator IDE funciona correctamente, pero al meterlo al micro la cosa no funciona. Aparentemente es tan simple que no se que falla. LLevo días dándole vueltas y no se que hacer ya.  Agradecería que alguien me echara una mano. Os pongo el programa a continuación:



; Leer/escribir en puertos
   LIST P=16F876
   RADIX HEX

;***********************************************
;*******           Registros             *******
;***********************************************
TMR_OPT EQU 0x01                         ;Timer
STATUS  EQU 0x03                          ;Estado
PUERTOA EQU 0x05                         ;Puerto A
PUERTOB EQU 0x06                          ;Puerto B

ADCON   EQU 0x1F                            ;Configuración del Puerto A


   ORG 0
   goto inicio

   ORG 5   
inicio         movlw   0x00                   ;Escribo 00 en todos los puertos
   movwf   PUERTOA      ;para limpiar la salida de datos latcheada
   movwf   PUERTOB

   bsf     STATUS,5                        ;Acceso al banco 1
                                      ;Configuracion e inicialización de registros

   movlw   b'00000000'                   ;CLK interno,flanco bajada,preescalado de 2
   movwf     TMR_OPT                    ;En el banco 1 este es el OPTION_REG.
                          ;Con este valor habilita PullUp internas del
                           ;Puerto B para que sea salida
   movlw   0x00                    ;Escribimos 00 en el registro TRISB
   movwf   PUERTOB                       ;para que PUERTO B sea SALIDA de datos
   
   movlw   b'00000111'                     ;Todo el puerto A queda como puerto
   movwf   ADCON                            ;Digital. Escribimos en reg ADCON1
   movlw   b'11111111'                       ;Escribimos FF en el registro TRISA
   movwf   PUERTOA                         ;Todo el Puerto A como ENTRADA, A6 y A7 se leeran siempre como 0
   
   bcf     STATUS,5                            ;Acceso al banco 0

bucle   movf  PUERTOA,0                          ;Leemos el puerto A    PuertoA -> W
   nop
   movwf   PUERTOB                       ;Llevamos lo de W al puerto B    W->PuertoB
   goto    bucle

   END


        Os agradecería cualquier comentario porque de verdad no se que probar ya.
Por si sirve de algo, genero el HEX con MPlab, utilizo un programador Te20 y descargo con IcProg.

Gracias a todos

Setha

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Problemas En Lectura De Puerto Con 16f876
« Respuesta #1 en: Martes 24 de Febrero de 2004, 23:30 »
0
Suponiendo que utilizas un oscilador a cristal de cuarzo, prueba a poner la siguiente línea al principio del programa:

__CONFIG _CP_OFF  &  _WDT_OFF  &   _PWRTE_ON  &   _XT_OSC  &  _LVP_OFF

(El primer CONFIG lleva dos guiones bajos al principio, el resto solo uno).

De todas formas, si no sabes absolutamente nada de micros, creo que es mejor que hubieras empezado por el PIC16F84A que es mucho más sencillo.

Cuenta que tal te ha ido.

Saludos.

Setha.

berretta

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Problemas En Lectura De Puerto Con 16f876
« Respuesta #2 en: Jueves 26 de Febrero de 2004, 12:10 »
0
Hola, por lo que vi te falto definir la direccion de los registros TRIS A y TRIS B que estan en la 0x85 y 0x86, en la parte del programa donde definis


TRISB EQU 0x86


movlw 0x00 ;Escribimos 00 en el registro TRISB
movwf TRISB ;para que PUERTO B sea SALIDA de datos


No se porque trabajas con el TIMER ?
Deshabilita las interrupciones, si no las utilizas, a veces es convenientes cuando no se trabaja con interrupciones.  



Pone en el encabezado la instruccion   INCLUDE P16F876.INC, con esto no tenes que declarar los registros como TRIS, PORT,etc
Te incluyo el P16f877.INC que el igual.
Suerte
Espero que te haya servido
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.