Autor Tema: 16F873 y mplab  (Leído 4476 veces)

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

Desconectado teleco02

  • PIC10
  • *
  • Mensajes: 6
16F873 y mplab
« en: 18 de Enero de 2006, 11:47:00 »
hola! tengo algunas dudas sobre el pic 16F873.tengo que hacer unas practicas con el y el programa MPLAB.las primeras no supusieron mucho problema para mi pues ya habia programado en ensamblador otras veces y tambien en C.
para empezar, ¿como puedo configurar los puertos A,B,etc como salida o entrada, en conjunto o individualmente por patillas? tengo una leve idea de que es "jugando" con los registros TRISA,TRISB... y los bancos de memoria (RP0,RP1) pero me gustaria que alguien me lo explicara mejor.¿y si tengo que ir cambiando a lo largo del programa el que una patilla sea de entrada o salida? tambien respecto a esto, en la ventana view>watch de MPLAB creo que solo se puede visualizar el contenido de estos puertos, ¿cómo lo modifico entonces?
¿que es la memoria de programa?, o mejor dicho, ¿como puedo meter una tabla de datos en ella? es decir,si quiero que al llamar "call tabla" ( teniendo en contador un numero 0,1,...) me devuelva el valor almacenado en esa posicion,valdria con poner esto?:

tabla         movf contador, w
                 addwf   pc,pc
      0         retlw   0x3F
      1         retlw   0x07
...

por otro lado, ¿como se trabaja con los timer? en concreto con el timer0. por ejemplo si quiero periodos de 20ms y otros de 0.5sg ¿cómo manejo T0CS en el option register, o el TOIF o el prescale?
he leido el manual pero estas cuestiones no me han quedado clarasAvergonzado.
agradeceria mucho que alguien pudiera hecharme una mano con esto.

Desconectado Luis_Chogi

  • PIC10
  • *
  • Mensajes: 44
Re: 16F873 y mplab
« Respuesta #1 en: 25 de Abril de 2006, 02:02:27 »
Hola...

Mira antes que nada creo que tu recien comienzas con esto de los pic's y seria bueno te mudaras a un pic mas pequeñito... El PIC16F84 por ejemplo....

Por otro lado te recomiendo un libro que te lleva de la mano y te explica todo lo que quieres saber en tus preguntas.

Microcontroladores PIC Diseño practico de aplicaciones
Autor: Jose Ma Angulo
          Ignacio Angulo   
Ed:     MC. Graw Hill

Este libro trata del 16F84, pero si quieres de lleno entrarle ya con el 16F873 te recomiendo

Microcontroladores PIC Diseño practico de aplicaciones (segunda parte) PIC16F87X
Autor: Jose Ma Angulo
          Susana Romero
          Ignacio Angulo   
Ed:     MC. Graw Hill

Compralos..... Vale la pena de verdad.

Desconectado Toph

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 84
Re: 16F873 y mplab
« Respuesta #2 en: 25 de Abril de 2006, 20:29:48 »
para empezar, ¿como puedo configurar los puertos A,B,etc como salida o entrada, en conjunto o individualmente por patillas? tengo una leve idea de que es "jugando" con los registros TRISA,TRISB... y los bancos de memoria (RP0,RP1) pero me gustaria que alguien me lo explicara mejor.¿y si tengo que ir cambiando a lo largo del programa el que una patilla sea de entrada o salida? tambien respecto a esto, en la ventana view>watch de MPLAB creo que solo se puede visualizar el contenido de estos puertos, ¿cómo lo modifico entonces?


si los puertos se configuran como entrada o salida con los registros TRIS, y lo puedes hacer de una vez o patilla por patilla, por ejemplo si quieres que todo el puerto A sea salida pones
a cero todos los bits de TRISA con clrf TRISA  o movlw 0x00 y luego movwf TRISA, si fueran entradas pones unos en el registro, si quieres que solo A0 sea entrada bsf TRISA,0
dependo de lo que desees, y todo esto lo declara al inicio no a lo largo del programa, con respecto al uso de los bancos de memoria con los bits RP0 y RP1 eso se va cambiando porque por ejemplo PORTA y TRISA se declaran en la misma direccion por lo que cuando te refieres a TRISA tienes que indicarle que esta en la misma direccion de PORTA pero en el banco1 (bsf STATUS,RP0), para cambiar el contenido de los puertos, lo puedes hacer con Debugger---> stimulus controller--->new scenario, ahi aparece la ventana le pones el pin del puerto que quieres cambiar y en action si lo queres poner a 1 o a cero o intermitente.

¿que es la memoria de programa?, o mejor dicho, ¿como puedo meter una tabla de datos en ella? es decir,si quiero que al llamar "call tabla" ( teniendo en contador un numero 0,1,...) me devuelva el valor almacenado en esa posicion,valdria con poner esto?:


la memoria del programa es la memoria donde se almacena el programa  :), esta separada de la memoria de datos, para meter una tabla de datos tendrias que usar el metodo para escribir en la FLASH :?, que es un proceso especial. el proceso de escritura y lectura de la flash esta en el data sheet no es asi de sencillo como lo expones

por otro lado, ¿como se trabaja con los timer? en concreto con el timer0. por ejemplo si quiero periodos de 20ms y otros de 0.5sg ¿cómo manejo T0CS en el option register, o el TOIF o el prescale?

Esto te lo debo por el momento, voy a ver si te pongo un ejemplo mas tarde porque he trabajado con ellos pero hace tiempo y no lo tengo fresco en la memoria.


saludos y espero te sirva esta informacion  :-/ 

El tiempo perdido es dificil de recuperar, trata de no desperdiciarlo
atrevete de vez en cuando a hacer algo nuevo
¿Sera este el año que tanto he deseado?

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: 16F873 y mplab
« Respuesta #3 en: 27 de Abril de 2006, 08:44:10 »
Si las preguntas son en ensamblador, mejor que las hagas en el subforo "Todo sobre microcontroladores", allí solo se trata en ensamblador y hablarás con personas que programan más ensamblador que en C.

Un saludo

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: 16F873 y mplab
« Respuesta #4 en: 27 de Abril de 2006, 15:32:19 »
Hola antes que nada, todo depende del PIC que estes utilizando.

Citar
¿como puedo configurar los puertos A,B,etc como salida o entrada, en conjunto o individualmente por patillas? tengo una leve idea de que es "jugando" con los registros TRISA,TRISB... y los bancos de memoria (RP0,RP1) pero me gustaria que alguien me lo explicara mejor

Lo de los puertos:
Ejemplo de configuracion del puertoA:

BCF   STATUS,RP1
BSF   STATUS,RP0 ;banco 1: en este banco se configuran los puertos como I/O

MOVLW  b'10101101'  ;muevo el valor binario 10101101 al acumulador(W).
MOVWF  TRISA          ;Copio el valor de W para setear los pines del puertoA. Entonces: los pines 7,5,3,2 y 0 son entradas, mientras que los pines 6,4 y 1 son salidas.
;el resto de los puertos se puede configurar aqui.

Luego vuelves al banco 0 del pic haciendo:

BCF   STATUS,RP0


Citar
.¿y si tengo que ir cambiando a lo largo del programa el que una patilla sea de entrada o salida?

Pues simplemente vuelves a reconfigurar los puertos como quieras,basandote en el codigo que te puse arriba

Citar
tabla         movf contador, w
                addwf   pc,pc
     0         retlw   0x3F
     1         retlw   0x07

Lo correcto es:

tabla         movf contador, w
                addwf   PCL,1
                retlw   0x3F
                retlw   0x07

Las tablas dentro de sub-rutinas requieren de ciertas precauciones.No te quiero marear, pero si en el futuro tienes problemas, ya lo sabes :).

Citar
por otro lado, ¿como se trabaja con los timer? en concreto con el timer0. por ejemplo si quiero periodos de 20ms y otros de 0.5sg ¿cómo manejo T0CS en el option register, o el TOIF o el prescale?

Timer0: lo primero que debes hacer es configurarlo(descarga la hoja de datos(datasheet) del pic que pensas utilizar y fijate alli que se explica como configurarlo).
Luego, en la configuracion tienes la opcion de hacer que el TImer cuando se desborda genere una interr, o no.

Revisa en el foro o haz una busqueda, seguro encontraras toda la info y mucho mas de lo que andas buscando
Exitos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.