Autor Tema: soy nuevo en la progamacion de pic16f877a con assembler y necesito ayuda :/  (Leído 2253 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado spire233

  • PIC10
  • *
  • Mensajes: 8
Hola, normalmente solo trabajaba en el pic16f84a pero para un proyecto final necesito usar el pic16f877a, pero no se si lo estoy configurando mal o que estoy haciendo mal que mi programa no corria, entonces hice un programa basico que solo moviera lo del PORTA al PORTB, pero! tampoco funciono, entonces no se que estoy haciendo mal, si es la configuracion del pic o una instrucción mal, la conexión del pic estoy mas que seguro que esta bien, les adjunto el archivo asm
porfavor ayudenme :/

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: soy nuevo en la progamacion de pic16f877a con assembler y necesito ayuda :/
« Respuesta #1 en: 19 de Febrero de 2015, 12:26:54 »
Hola spire233, pues te falta configurar un cantidad de cosas, en realidad todavía ni as empezado a programar el 16F877, te recomiendo que mires el datasheet de 16F877 y veas que por cada pin tienes múltiples funciones.

Busca cada PORT del 16F877 en el datasheet y ve que tienes que configurar para que dicho port funcione como entrada/salida digital.
Por ejemplo del PORTA tienes que deshabilitar los conversores A/D, etc.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re: soy nuevo en la progamacion de pic16f877a con assembler y necesito ayuda :/
« Respuesta #2 en: 19 de Febrero de 2015, 12:55:32 »
buenas spire233, yo hice hace muy poco un proyecto con ese microcontroladodor yo lo hice en xc8 con mixto C y ensamblador, el problema que creo que tienes es que no puedes escribir directamente en los registros sin seleccionar el banco de trabajo, por ejemplo si quieres configurar si es entradas o salidas el puerto A tu haces:

MOVLW 0XFF
MOVWF TRISA      ;PORTA COMO ENTRADAS

cuando deberías hacer:

MOVLW 0XFF
BANKSEL (TRISA)
MOVWF BANKMASK (TRISA)

y así con todos los registros que quieras escribir.

esto puede variar de un compilador a otro, así que si esto no te sirve mira en el manual del compilador como seleccionar el banco de trabajo.

un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: soy nuevo en la progamacion de pic16f877a con assembler y necesito ayuda :/
« Respuesta #3 en: 19 de Febrero de 2015, 22:27:44 »
Hola spire233, así te debería quedar el programa, consejos:

Cuando realices un programa, pues trata de hacerlo lo más claro posible y organizado, como el del ejemplo que te paso, de lo contrario, cuando tus programas sean largos tendrás muchísimos problemas para desarrollarlos.

Cuando configures un registro, cualquiera que sea, verifica en que banco de memoria se encuentra y antes de cargarle los datos selecciona el banco adecuado. Acuérdate que no todos los registros están en el banco 0.

Prueba este programita:

Código: ASM
  1. LIST            P = 16F877A
  2.         INCLUDE         <P16F877A.INC>
  3.         ERRORLEVEL      -302
  4.  
  5.         __CONFIG        _XT_OSC&_WDT_OFF&_PWRTE_OFF&_BODEN_OFF&_LVP_OFF&_CPD_OFF&_WRT_OFF&_DEBUG_OFF&_CP_ALL
  6.  
  7. ;-----------------------------------------------------------------------------------------------------------
  8.  
  9. Definición de la RAM
  10.  
  11.         cblock  .32
  12.                 WWW                     ;Para guardar el estado del registro W
  13.                 ESTADO                  ;Para guardar el estado del registro STATUS
  14.         endc
  15.  
  16.  
  17. ;-----------------------------------------------------------------------------------------------------------
  18.  
  19.         ORG     0
  20.         bcf     STATUS,RP0              ;Selecciono el banco 0         
  21.         bcf     STATUS,RP1
  22.         goto    INICIO
  23.  
  24. ;-----------------------------------------------------------------------------------------------------------
  25.  
  26. INICIO                                  ;Inicio del programa principal
  27.  
  28.         clrwdt                          ;Borro el watchdog
  29.         clrf    PORTA                   ;Borro los puertos
  30.         clrf    PORTB
  31.         clrf    PORTC
  32.         clrf    PORTD
  33.         clrf    PORTE
  34.  
  35.         bsf     STATUS,RP0              ;Banco 1
  36.         movlw   B'00000110'             ;Todas salidas/entradas digitales
  37.         movwf   ADCON1
  38.         movlw   B'11111111'             ;Configuro el puerto A, todo como estrada
  39.         movwf   TRISA
  40.         movlw   B'00000000'             ;Configuro el puerto B, todo como salida
  41.         movwf   TRISB
  42.         movlw   B'11111111'             ;Configuro el puerto C
  43.         movwf   TRISC
  44.         movlw   B'11111111'             ;Configuro el puerto D
  45.         movwf   TRISD
  46.         movlw   B'11111111'             ;Configuro el puerto E
  47.         movwf   TRISE
  48.         bcf     STATUS,RP0              ;Banco 0
  49.  
  50.         clrf    ADCON0                  ;Convertidores A/D desactivados
  51.  
  52. INICIAL
  53.         movf    PORTA,W
  54.         movwf   PORTB
  55.         goto    INICIAL
  56.  
  57. ;-----------------------------------------------------------------------------------------------------------
  58.         End


También debes acordarte, a la hora de simularlo o probarlo, que el puerto A solo dispone de 6 pines, del RA0 al RA5, por lo que no llenarás todas las salidas del puerto B.

juaperser1, si bien es posible hacerlo como tu comentas, pues como lo hace spire233 también es factible, aparte de que tiene ciertas ventajas, como la de usar menos memoria y no tener que definir cada macro.

Espero sea de ayuda, un saludo.

Atte. CARLOS.

« Última modificación: 19 de Febrero de 2015, 22:32:31 por Chaly29 »
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.