Autor Tema: problema con 16f84  (Leído 2095 veces)

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

Desconectado miguel20

  • PIC10
  • *
  • Mensajes: 1
problema con 16f84
« en: 20 de Septiembre de 2007, 04:12:38 »
ante todo, un saludo a todos ustedes y gracias por permitrime accesar su espacio.

Estoy recien ingresado al mundo de los pic, y eh leido que el mas comodo para principiantes es el 16f84, Utilizo el MPLAB para realizar mi programa y compilarlo y el proteus (isis) para simularlo.

Bueno, la verdad es que no me han funcionado bien ninguno de los programas que he hecho, incluso hice una sencillez encender o apagar una salida dependiendo de el estado de un bit del puerto b, y aun asi no funciono... incluso limpio el wdt en todo momento que pueda, para ver si eso es lo que me causa el problema... pero nada.

la verdad es que estoy ya desesperado ya que no genero la solucion y espero poder encontrar ayuda aqui.

ahi les va el codigo del programa:

listp = 16f84a

tmr0   equ   01h
option_reg   equ   01h
estado   equ 03h
porta   equ 05h
trisa   equ 05h
portb   equ   06h
trisb   equ   06h

   ORG 00h
      goto start

   org 30h
start     clrwdt
      clrf porta      ;limpio puerto A
      clrf portb      ;limpio puerto B
      bsf estado,5  ;banco 1
      bsf option_reg,7    ;activo resistencias de pull up puerto b
      movlw b'00000000'
      movwf trisa            ; puerto a salida
      movlw b'00000001'
      movwf trisb            ;bit 0 de puerto b entrada
      bcf estado,5            ; banco 0
   
      
aki      clrwdt
      bsf porta,1              ;enciendo salida 1
ahi      btfsc portb,0           ;pregunto si el bit 0 es Cero
      goto aki                  ; si no lo es salte a "aki"  ponga otra vez el bit1 porta a 1
      clrwdt   
      bcf porta,1              ; si es CERO que me apague a porta,1
      goto ahi                  ;vuelva a preguntar
      
      end

bueno, basicamente lo que deberia hacer es que si tengo un cero en portb,0 entonces porta,1 deberia apagar, y si portb,0 esta en 1, entonces porta,1 deberia encender....

el compilador no me genera errores...y como ya dije el clrwdt es apra asegurarme de que el wdt no me resetee el micro.


ahora bien con el isis.... al 16f84 en isis le pongo su cristal y sus caps de 4Mhz y 22p, y le pongo el MCLR a 5V ( aunque lei que no era necesario, pero tambien intente sin eso, solo configurandolo y no funciono)... en porta,1 pongo un led con una resistencia de 220 y su tierra, si esta bien polarizado el led. y bien para la entrada en portb,0 pongo un pulsador a tierra y como las resistencias de pull up estan habilitadas no tengo que ponerlas externamente (aunque tambien las puse y no funciono)

en fin ya ven que eh tomado las precauciones necesarias en cuanto al circuito esquematico, si bien tengo un problema creo que seria por el ensamblador.. y ahi es donde entrar ustedes amigos... agredeceria CUALQUIER tipo de ayuda para este problema...

Muchas Gracias

Saludos, Miguel Angel

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: problema con 16f84
« Respuesta #1 en: 20 de Septiembre de 2007, 04:30:59 »
Dale un vistazo al hilo Ejemplos en Asembler PIC16F84A del maestro Veguepic dentro del subforo Almacen de Assembler.

P.D. Ya que tu consulta es de assembler, si lo deseas puedo mover este mensaje a ese subforo. Dime lo que decidas.
 
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: problema con 16f84
« Respuesta #2 en: 21 de Septiembre de 2007, 00:52:18 »
Hola Miguel 20:
 Primero: como ayuda te puedo sugerir que si no utilizas el wachtdog, directamente lo desactives por fusibles, así te despreocupas del tema y te queda más prolijo el programa.
 Segundo: debes recordar que el micro funciona con un cristal de 4mhz,y como cada instrucción consume 4 pulsos de reloj, realizará una instrucción cada 1 microsegundo, por lo tanto el led vá a parpadear tan rápido que tu ojo no lo percibirá, ¿que debes hacer? pues poner un retardo después de cada encendido y de cada apagado de por lo menos medio segundo. Esto se logra con una rutina de retardo, ahora a mano no tengo ninguna, pero con el buscador del foro o Google seguro encuentras alguna y la insertas en tu programa.
 Espero que te sirva, saludos!
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: problema con 16f84
« Respuesta #3 en: 25 de Septiembre de 2007, 23:50:01 »
haber aca va mi granito de arena...


ya no se recomienda esto...
Código: ASM
  1. list p = 16f84a
  2.  
  3. tmr0   equ   01h
  4. option_reg   equ   01h
  5. estado   equ 03h
  6. porta   equ 05h
  7. trisa   equ 05h
  8. portb   equ   06h
  9. trisb   equ   06h

esto va mejor...
Código: ASM
  1. list p = 16f84a
  2. include <p16f84a.inc>
sucede que este archivo incluide que te viene de regalito en el mplab (y no solo el del 84a sino de todos los pics) ya incluye la definicion para los registros especiales dle microcontrolador que estes programando.

Código: ASM
  1. ORG 00h
  2.          goto start
  3.          org 30h
  4. start   ..........
porque te comes tanta memoria sin escribir?
mejor pon...
Código: ASM
  1. ORG 00h
  2.          goto start
  3.          org  05h
  4. start   ..........
para que tengas toda la memoria a tu disposicion aunque 1K algunas veces queda chico.

Código: ASM
  1. start    
  2.       clrf porta      ;limpio puerto A
  3.       clrf portb      ;limpio puerto B
  4.  
  5.       bsf status,rp0  ;bsf estado,5  ;banco 1
  6.       bsf option_reg,7    ;activo resistencias de pull up puerto b
  7.       ;movlw b'00000000'
  8.       ;movwf trisa            ; puerto a salida
  9.       clrf   trisa ; es lo mismo ; puerto a salida
  10.       movlw b'00000001'
  11.       movwf trisb            ;bit 0 de puerto b entrada
  12.       ;bcf estado,5            ; banco 0
  13.       bcf  status,rp0

el resto de tu programa me parece ok, el unico problema seria el wdt asi que mejor deshabilitalo desde la palabra de configuracion de esta forma
Código: ASM
  1. list p = 16f84a
  2.        include <p16f84a.inc>
  3.        __CONFIG _WDT_OFF
pero si deseas tener toda la palabra configurada entocnes hay que completarla...

Código: ASM
  1. list p = 16f84a
  2.        include <p16f84a.inc>
  3.        __CONFIG _WDT_OFF & _CP_ON & _PWRTE_ON & _XT_OSC
me parece que eso es todo lo que tiene el pic16f84a, pruebalo asi y nos comentas que tal te fue. saludos!

« Última modificación: 26 de Septiembre de 2007, 00:03:06 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com