TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: mariano_pic en 02 de Febrero de 2007, 12:49:59

Título: PIC18 Aprendiendo a programar con ensamblador
Publicado por: mariano_pic en 02 de Febrero de 2007, 12:49:59
 :mrgreen: Hola a todos, acerca de los PIC18, yo tengo el PIC18F458, y otros mas pero estoy tratando de que me funcione, bueno yo hago algo tonto, saben yo lo programo sin colocar los configuration bits, para evitar complicaciones, y los seteo con nuestro querido programa winpic800 el cual lo configura automáticamente, así por ahora no habría problemas,  :-/ entonces utilizo instrucciones para los pic16, que son compatibles, y luego le empiezo a agregar instrucciones nuevas para ir comprendiéndolas, pienso que para poder comprenderlos, es mejor empezar simulando en el MPLAB, ir viendo lo que pasa en los diferentes registros.
 :D
Las claves son: :-/

1. Hacer de cuenta que es como un PIC16, por que trabaja con las mismas instrucciones e ir agregando las que son de los PIC18, a medida que comprendemos.

2. Simular mucho con el MPLAB, para entender como responde el micro ante las instrucciones, por que uno puede pensar que hacen esto y luego no es así. No hay mejor conocimiento que la experiencia.

3. Tener a mano la hoja de datos y el manual pi18cxxx, para tratar de comprender su hardware.

3. Si queremos ver el micro funcionando cuando ya estamos seguros de que si funciona entonces usamos winpic800, que nos permite facilidades para setear los configuration bits en la pestaña config.

No basta decir que este método solo sirve para los que tienen cierta experiencia con PIC16, y mejor si utilizan 877, que es muy completo

Ahora la idea seria que apenas se pueda ir colocando programitas en los que se utilizan y explican una o varias instrucciones nuevas de los PIC18 y es que es muy importante, comprender cada aspecto de la programación por que ya saben el ensamblador no perdona, y hay que conocer bien el hardware para poder sacarle el jugo a estos micros.

Cabe destacar que estoy apenas comenzando y apenas tengo idea de lo que hago, asi que si gente con mucha experiencia en esto, puede colaborar seria algo que agradecería, por que todos queremos avanzar ya que hay micros cada ves mas nuevos. :mrgreen:

Un saludo y espero que estas ideas sirvan a los que estén en las mismas que yo. :)

Mariano_pic
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: mariano_pic en 02 de Febrero de 2007, 13:45:10
Un resumen del set de instrucciones lo tengo en mi pagina personal
http://es.geocities.com/mariano_pic/

mas rapido es http://es.geocities.com/mariano_pic/set18.html

un saludo
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: Kedutpic en 06 de Febrero de 2007, 02:37:50
 :mrgreen: aki va mi primer aporte
Un manual  interesante que esta traducido al  español  disfrutenlo  8)

http://kedutpic.4shared.com/


A ver ,  si alguien se pone un programa de prueba con el timer0   :P




**** kedutpic****

Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: micro_cadaver en 06 de Febrero de 2007, 09:47:10
juan sube la plancha de los leds!!!!  :mrgreen:, lo tienes?
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: Kedutpic en 06 de Febrero de 2007, 11:33:05
 :mrgreen:  :mrgreen:  :mrgreen:

recuerda que  tenemos que ir paso a paso  asi que primero quien se atreve a explicar los config ¿¿??? te pàrece  ????

ALGUN VOLUNTARIO ¿¿????

 8) henry puedes explicar sobre los config ???? de los pics 18  :D  :D
Título: Re: PRENDIENDO UN LED :PIC18 Aprendiendo a programar con ensamblador
Publicado por: Kedutpic en 06 de Febrero de 2007, 12:16:22
bueno tienes razon ponemos el programa y explicamos cada una de sus partes '??¿

este es un programa basico realizado en conjunto con micro_cadaver

Código: ASM
  1. LIST          P=18F4520
  2.                 INCLUDE         "P18F4520.INC"
  3.  
  4.                 ;configurando los config
  5.  
  6.                 CONFIG          OSC = HS,FCMEN = OFF,IESO = OFF;CONFIG1H
  7.                 CONFIG          PWRT = OFF,BOREN = OFF,BORV = 3;CONFIG2L
  8.                 CONFIG          WDT = OFF
  9.                 CONFIG          MCLRE = OFF,LPT1OSC = OFF,PBADEN = OFF
  10.                 CONFIG          CCP2MX = PORTC,STVREN = OFF,LVP = OFF
  11.                 CONFIG          XINST = OFF,DEBUG = OFF
  12.                 CONFIG          CP0 = ON,CP1 = ON,CP2 = ON,CP3 = ON,CPB = ON,CPD = ON
  13.                 CONFIG          WRT0 = ON,WRT1 = ON,WRT2 = ON,WRT3 = ON,WRTB = ON,WRTC = ON,WRTD = ON
  14.                 CONFIG          EBTR0 = ON,EBTR1 = ON,EBTR2 = ON,EBTR3 = ON,EBTRB = ON
  15.                 ERRORLEVEL      -302
  16.                 RADIX           HEX
  17.  
  18. ;--------------------------------------------------------------------------------
  19.  
  20.                 ORG 0X0000
  21.  
  22.                 GOTO INICIO ; Saltamos al inicio del programa
  23.  
  24.                 ORG 0x20 ; Dejamos espacio para las interrupciones
  25. INICIO
  26.                 MOVLW 0X0F        
  27.                 MOVWF ADCON1       ; Todo el puerto A como salidas digitales
  28.                 CLRF TRISA
  29.                 CLRF TRISB
  30.  
  31.                 MOVLW 0X55
  32.                 MOVWF PORTB
  33.                 MOVWF PORTA
  34.                 GOTO $
  35.  
  36.                 END                          ; Fin del programa fuente



 8) les cuento que para realizar este programa casi demoramos todo 1 dia jaajjajaja debido a que no sabiamos como configurar la palabra de control  :D  que por cierto a diferencia de los de la gamma  16 estas son 12 palabras ,,,este programa si gustan lo pueden simular en proteus.......



Título: Re: PRENDIENDO UN LED :PIC18 Aprendiendo a programar con ensamblador
Publicado por: maunix en 06 de Febrero de 2007, 12:34:08
Para postear código les sugiero usar los marcos [ code = asm ] y [ /code ]

saludos
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: Kedutpic en 06 de Febrero de 2007, 13:01:45
 :mrgreen: si tienes razon,, gracias maunix por tu sugerencia   :-)
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: micro_cadaver en 06 de Febrero de 2007, 13:02:33
ahora toy full amigos. pero juan mandara todo lo q vayamos haciendo!!!  :-/
juan el balon esta en tu cancha!!!  :mrgreen:
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: Kedutpic en 06 de Febrero de 2007, 13:15:44
 :roll:
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: mariano_pic en 06 de Febrero de 2007, 16:05:21
Oigan amigos ahora es que me doy cuenta, pero pense que a nadie le interesaria, les agradesco mucho su atencion.
Espero que podamos avansar paso a paso, ya que la cosa no es que sea muy facil.
Por ejemplo yo no entiendo como se orgasa la memoria ran en un pic18 y como se configuran los puertos por favor para los que estamos empezando, nos conbendria muchisimo una explicacion con un ejemplito.
Muchas grasias. y un saludo :-/
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: micro_cadaver en 06 de Febrero de 2007, 16:39:01
hola mariano, como le sugeri a juan (kedutpic) lo bueno o ideal por ais decirlo, seria el seguir una sumilla similar al de algun libro de la gama 16F, pues estan muy bien organizados y sobre todo en lo que concierne a la evolucion del tema de los microcontroladores, es decir, primero un poquito de la arquitectura... luego los registros.. y asi varios puntos, seria como escribir un libro pero del pic18f y en ASM, y aplicadno los mismos eejmeplos q son sencilllos y por lo mismo de ser sencillos se aprende de manera mas didactica. que dicen?  :-)
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: Kedutpic en 06 de Febrero de 2007, 17:14:47
 :shock:  bueno es que yo pense ........ :(  creo que me apresure un poco  :mrgreen:

Bueno a ver si comenzamos la idea  pues .... no henry ??? por donde se podria comenzar ???

ya que tu tienes mi libro de microcontroladores a ver si nos das unas ideas de que punto seria factible comenzar ,,,,para que los que recien se inician en el mundo de los pic18 puedan entender sin problemas  8)
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: micro_cadaver en 06 de Febrero de 2007, 17:26:12
q opinas mariano? podrias verificar con algun librode pics los temas y los podriamos contrastar y ver por donde seria lo mas adecuado comenzar  :-/, ahora en la noche revisatre un poco y pondre lo q me parezca conveniente. saludos!!!  :mrgreen:
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: ESTECA55 en 06 de Febrero de 2007, 23:46:39
Citar
yo no entiendo como se orgasa la memoria ran en un pic18

En la hoja de dato de capa pic en particular podras ver la organisascion de la memoria ram.

Saludos
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: mariano_pic en 07 de Febrero de 2007, 13:53:17
Hola amigos el plan es dar ideas concretas dentro del foro no mandar a leer hojas de datos, se sabe que hay están todo pero las explicaciones las damos nosotros mismos.

Por ejemplo usemos la hoja pic18 referece manual y vamos traduciendo y colocando los aspectos mas importantes con respecto a estos microcontroladores empezando por describir la arquitectura interna general, sin referirnos a uno en particular. Luego lo referente a los registros GPR y SFR, modos de direccionamiento y ejemplos de las instrucciones mas destacadas sin olvidar la descripción de las mismas.
Yo mismo pondré algunas traducciones adaptadas a nuestro lenguaje, recordemos que lo que es igual a la serie 16 ya debe estar comprendido, y no hay necesidad de recabar en eso.
 :-/ :mrgreen: :-/
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: mariano_pic en 07 de Febrero de 2007, 13:55:37
Aca va algo sobre la arquitectura interna

Arquitectura Interna 
Aunque con mayor numero de registros internos y mas capacidad de memoria y de pila, la arquitectura interna de los PIC18 recuerda mucho a la de los PIC16f87x. Los modelos de 40 pines disponen de los mismos puertos que los 16f877.
En su mayoria tienen la misma distribucion de pines modos de oscilador y voltajes de alimentacion.
Los perifericos tambien son los mismos pero se le agregan muchos mas entre ellos se destaca el adactador interno de bus usb. Tambien el cam.
Entre las nuvas potencialidades encontramos el multiplicador 8*8, y las logicas para el incremento y decremento de las direcciones.
Tambien tenemos la capasidad de mover el contenido de un registro a otro registro directamente en una sola instruccion como la instruccion movff ejemplo
        movff   fuente, destino
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: mariano_pic en 07 de Febrero de 2007, 13:58:51
Algo aserca de la forma en que se manejan las instrucciones y la memoria si alguien puede añadir un ejemplo codigo con una explicacion bienvenido. :-/

aqui va:

Introducción

El set de instrucciones de los pic18cxxx agrega muchas mejoras, a los anteriores sets de instrucciones.
Cada instrucción esta dividida en un OPCODE que especifica el tipo de instrucción y uno o más operados los cuales facilitan especificar la operación de la instrucción.

El set de instrucciones es altamente ortogonal y es agrupado dentro de 4 categorías básicas:

- Operaciones orientadas a Byte
- Operaciones orientadas a BIT
- Operaciones con un operando literal
- Operaciones de control

Muchas instrucciones orientadas a byte tienen tres operándoos

1. El archivo de Registro (especificado por el valor de 'f').
2. El destino del resultado (especificado por el valor de 'd').
3. El acceso a memoria (especificado por el valor de 'a').

'f' representa un archivo de registros designado y 'd' representa el destino.
El registró designado específica cual registro es el usado por la instrucción.
El indicador de acceso 'a' especifica si BSR selecciona los bancos o si es usado el acceso a bancos. 

El nombre del destino especifica dónde el resultado de la operación debe situarse. Si es cero, la el resultado es guardado en el Registro W. Si es uno, el resultado es guardado en el Registro especificado.

Todas las instrucciones orientadas a BIT tienen tres operandos:

1. El registro (Especificado por el valor de 'f').
2. El BIT del registro (especificado por el balor de 'b').
3  El acceso a memoria (especificado por el valor de 'a').

B ' designa el área del BIT  seleccionando el número del BIT afectado por la operación, mientras ' f ' representa la posición del archivo en el cual el BIT está ubicado. El señalizador de acceso 'a' especifica si el registro BSR selecciona el banco o si el acceso a banco es usado.

Las instrucciones con literales pueden utilizar algunos de los siguientes operándoos:

- Un literal puede ser cargado en un registro (especificado por el valor de 'k').
- El registro FSR carga el literal dentro (especificado por el valor de 'f').
- No requiere operando (especificado por el valor de '-').

Las instrucciones de de control pueden usar algunos de los siguientes operandos:
- Una dirección de la memoria de programa (especificado por el valor de 'n').
- El modo de operación de las instrucciones CALL o RETURN (especificado por el valor de 's').
- El modo de operación de las instrucciones Read y Write Table (especificado por el valor de 'm').
- No requiere  operados  (especificado por el valor de '-')


Todas las instrucciones son de una simple palabras excepto por tres instrucciones de doble palabra.
Estas tres instrucciones son echas de doble palabra de instrucción asi que toda la información requerida es valida en 32 Bits. En esta segunda palabra, los 4 bits mas significativos son '1'. Si esta segunda instrucción es ejecutada como una instrucción, esta sera ejecutada como un NOP.

Todas las instrucciones simples son ejecutadas en un simple ciclo de instrucción, a menos que un test condicional sea verdadero el contador de programa sea cambiado como resultado de la instrucción. En estes caso, la ejecución toma dos ciclos de instrucción con un ciclo de instrucción NOP adicional ejecutado.

La doble palabra de instrucción (que no modifica el PC) ejecutada en un doble ciclo de instrucción.
Un ciclo de instrucción consiste de cuatro periodos de oscilador. Así, para una frecuencia de oscilador de 4 MHZ, el tiempo normal de ejecución de una instrucción es de 1 ?S. Si un test condicional es verdadero o el contador de programa es cambiado como resultado de una instrucción, el tiempo de ejecución de es de 2 ?S. Dos palabras de instrucción (si es verdadero) tomarían 3 ?S.

Mapa de memoria de datos

El mapa de memoria de datos consiste en 16 bancos de 256 bytes cada uno. El set de instrucciones y la arquitectura permite operaciones con todos los bancos de memoria (tal como MOVFF). Un Segmento de banco 0 y un segmento de banco 15 abarca el acceso a bancos.

Acceso a bancos

El acceso a bancos es una arquitectura mejorada que es muy útil  para la optimización con compiladores de lenguaje C. Las técnicas usadas por el compilador C pueden también ser útiles con programas hechos en assembler

Esta región de memoria de datos puede ser usada para
- Calculo de valores intermedios
- Variables locales de subrutinas.
- Variables comunes
- Rápida Evaluación/control de SFR (sin bancos)

El acceso a bancos es comprendido de 2 segmentos: Segmento 0 y segmento 1. El segmento 0 es la RAM esta mapeada en el banco 0. El segmento 1 son los SFR que estan mapeados en el banco 15.
Cada segmento puede ser de diferente tamaño. La suma de RAM del segmento 0 y el segmento 1 es 256 bytes. Cuando se forza en el acceso a bancos (a = '0') la ultima direccion en el segmento 0 es seguida  por la primer  direccion en el segmento 1. El segmento 1 contiene los registros de funcion especial a fin de que estos registros puedan ser accedidos por cualquier software cargado. Esto  es util en seteo de banderas de estado y modificacion de bits de control.

Cabe destacar que esta es una traduccion del pic18cxxxx
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: micro_cadaver en 07 de Febrero de 2007, 14:04:29
hola mariano tienes el archivo traducido de pic18f? en uno de los post del foro lo vi.
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: Kedutpic en 07 de Febrero de 2007, 15:53:53
 :shock: yo ya colgue un manual unos post mas arriba tambien  traducido  al español no lo han leido ????


1 saludo

Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: mariano_pic en 07 de Febrero de 2007, 18:37:45
Hola amigos yo descargue ese manual esta bien pero como su nombre lo dice es PIC18F2455_2550_4455_4550.pdf
Yo no lo he leido pero me pareseria bueno comensar por programar los mas sencillos ¿o es que sirve igual?
No habia tenido tiempo de leerlo pero parese muy bueno.  :-/ :-/ :-/

Entonses demonos a todos un tiempo para leer y comprender por que como estan las cosas: ahorita ya sabremos  :mrgreen: 8) 8)

 :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/
Título: Re: PIC18 Aprendiendo a programar con ensamblador
Publicado por: PalitroqueZ en 07 de Febrero de 2007, 18:46:16
otra sugerencia. Cuando peguen un código sustituyan el tabulador por un simple espacio, si usan tabulador les aparecerá un símbolo tipo cuadrito.

yo descubrí esto tarde (tengo varios post por allí que no he arreglado del todo)  :?

adelante con este post, yo también estoy interesado en conocer el ensamblador para los 18.  8)

Salu2
Pedro