Git Product home page Git Product logo

picutils's Introduction

PicUtils 1.3

==============

Librería en Lazarus, con utilidades para la programación de microcontroladores PIC.

Descripción

Unidad con utilidades para la programación de microcontroladores PIC de rango medio con instrucciones de 14 bits. Incluye a la mayoría de la serie PIC16FXXXX.

Se define un objeto que representa a un PIC de esta serie, que está dimensionado para poder representar al dispositivo más complejo.

El objetivo de esta unidad es poder servir como base para la implementación de ensambladores, compiladores o simuladores.

Funcionalidades

  • Modela la arquitectura de hardware de un PIC.
  • Permite codificar y decodificar las instrucciones del microcontrolador.
  • Incluye rutinas para el reconocimiento de las instrucciones en ensamblador del PIC.
  • Permite generar el archivo de salida HEX, para la grabación del PIC.

Modo de trabajo

Se puede trabajar de diversas formas con la libreria, dependiendo de la función que se desee implementar. Pero en general, casi siempre se requerirá primero crear un objeto de la clase TPIC16:

uses  ... , pic16utils;
var
    pic: TPIC16;
...
	pic := TPIC16.Create;
	
	//hacer algo
	
	pic.Destroy;

La mayoría de las funcionalidades de la librería se acceden mediante métodos del objeto TPIC16. Así si por ejemplo se desea limpiar la memoria flash, se debe llamar al método:

	pic.ClearMemFlash;

Generación del archivo *.hex

Para obtener el archivo de salida, primero se deben introducir las instrucciones en la memoria flash del objeto TPIC16.

Una forma es usar los métodos codAsm(), que trabaja introduciendo las instrucciones de forma secuencial:

  pic.codAsm(CLRWDT);
  pic.codAsmK(MOVLW,$01);
  pic.codAsmF(MOVWF,$21);  

Luego se debe llamar al método: GenHex():

  pic.GenHex('salida.hex');

Modelado del hardware

El objeto TPIC16, representa a un PIC, incluyendo su arquitectura interna. En la presente versión, solo se representa a la memoria flash y los registros básicos, como el contador de programa y el acumulador W.

La memoria RAM se modela como una tabla lineal de tipo:

  TPIC16Ram = array[0..PIC_MAX_RAM-1] of TPIC16RamCell;

Pero para facilitar el trabajo con las páginas, se usa el objeto TRAMBank que representa a una página de memoria. Este objeto incluye métodos para manejar la arquitectura especial que puede tener la memoria del PIC.

Para administrar eficiéntemente la memoria del PIC, se maneja el registro TPIC16RamCell, que guarda información detallada de cada posición de la RAM:

  TPIC16RamCell = record
    value  : byte;     
    used   : byte;     
    name   : string;   
    state  : TPIC16CellState;  //estado de la celda
  end;

La propiedad "used", es en realidad un mapa de bits, en donde se marcan los bits que estén ocupados, ya que en los PIC, es común manejar variables de 1 bit de longitud.

De la misma forma, la memoria flash se representa con una tabla lineal de tipo:

  TPIC16Flash = array[0..PIC_MAX_FLASH-1] of TPIC16FlashCell;

Pero para facilitar el manejo de las múltiples páginas que puede tener un dispositivo, se usa el objeto TFlashPage, que representa a una página de la memoria flash.

Para adaptar el objeto TPIC16, a un dispositivo en especial, se debe configurar los parámetros de hardware. Para facilitar esta tarea, se dispone de la unidad PIC16devices, que contiene la configuración para diferentes modelos de PIC.

Codificando instrucciones

Sea para generar un acrhivo *.hex o para realizar una simulación (no implementado en la versión actual), se requerirá ingresar las instrucciones en la memoria flash del PIC. Para ello existen diversos métodos de acuerdo a la sintaxis de la instrucción.

Todas las instrucciones se han dividido en 5 categoría distintas de acuerdo a su sintaxis, estas son:

Sintaxis:

  • De la forma: NEMÓNICO f,d -> Se codifican con el método codAsmFD()
  • De la forma: NEMÓNICO f -> Se codifican con el método codAsmF()
  • De la forma: NEMÓNICO f,b -> Se codifican con el método codAsmFB()
  • De la forma: NEMÓNICO k -> Se codifican con el método codAsmK()
  • De la forma: NEMÓNICO a -> Se codifican con el método codAsmA()
  • De la forma: NEMÓNICO -> Se codifican con el método codAsm()

Donde:

f->dirección de un registro en RAM (0..127)

d->destino (W o F)

b->número de bit (0..7)

a->dirección destino (0..$7FF)

k->literal byte (0..255)

Notas

Actualmente solo se incluyen las rutinas para el manejo de microcontroladores PIC de rango medio, con instrucciones de 14 bits.

picutils's People

Contributors

alexpseletr avatar t-edson avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.