PDA

Ver la Versión Completa : uC PICs - Migrando de ASM a PASCAL


MaMu
19-03-2008, 17:22:19
Estoy retocando las librerias de PICs, y estoy migrando el set de instrucciones a procedimientos en Pascal, para implementarlo en un IDE que quiero hacer en Delphi, para programar los pics en Pascal, incluyendo la parte de programación al uC desde la PC, la cual hare por puerto Serie (utilizando Driver para XP) para el programador JDM. (pueden buscar documentación del mismo en internet, es muy sencillo de construir).

Estoy empezando por la librería de 16F628A (que tengo muchos!!! jeje)
Asi que acá les voy dejando una reseña de lo que ya hay para que vayan viendo y el que se anime, aporte lo suyo.


unit system;
interface
DeviceDescriptor
DeviceFamily PIC14;
ProgMemSize 2048;
EEPROMDataMemSize 128;
DataMemSpaces
$1:$20:$50; $2:$20:$50; $4:$38:$18;
ConfigWordOptions
bod_on : $3FFF; bod_off : $3FBF;
cp_all : $03FF; cp_75 : $17FF;
cp_50 : $2BFF; cp_off : $3FFF;
pwrte_off : $3FFF; pwrte_on : $3FF7;
wdt_on : $3FFF; wdt_off : $3FFB;
lvp_on : $3FFF; lvp_off : $3F7F;
mclre_on : $3FFF; mclre_off : $3FDF;
er_osc_clkout : $3FFF; er_osc_noclkout : $3FFE;
intrc_osc_clkout: $3FFD; intrc_osc_noclkout : $3FFC;
extclk_osc : $3FEF; lp_osc : $3FEC;
xt_osc : $3FED; hs_osc : $3FEE;
End;

type byte = TDataMemoryWord;
// = Bits(bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7);
var SysTempMem : array[0..$B] of byte absolute $F:$70;
SysSWStackTop : byte absolute $F:$7C;
SysWTemp : byte absolute $F:$7D;
SysStatusTemp : byte absolute $F:$7E;
SysFSRTemp : byte absolute $F:$7F;
indf : byte absolute $F:$00;
tmr0 : byte absolute $5:$01;
option : byte = Bits(PS0,PS1,PS2,PSA,T0SE,T0CS,INTEDG,RBPU) absolute $A:$01;
pcl : byte absolute $F:$02;
status : byte = Bits(C,DC,Z,PD,TOB,RP0,RP1,IRP) absolute $F:$03;
fsr : byte absolute $F:$04;
pclath : byte absolute $F:$0A;
intcon : byte absolute $F:$0B;
porta : byte absolute $1:$05;
trisa : byte absolute $2:$05;
portb : byte absolute $5:$06;
trisb : byte absolute $A:$06;
pir1 : byte absolute $1:$0C;
tmr1l : byte absolute $1:$0E;
tmr1h : byte absolute $1:$0F;
t1con : byte absolute $1:$10;
tmr2 : byte absolute $1:$11;
t2con : byte absolute $1:$12;
ccpr1l : byte absolute $1:$15;
ccpr1h : byte absolute $1:$16;
ccp1con : byte absolute $1:$17;
rcsta : byte absolute $1:$18;
txreg : byte absolute $1:$19;
rcreg : byte absolute $1:$1A;
cmcon : byte absolute $1:$1F;
pie1 : byte absolute $2:$0C;
pcon : byte absolute $2:$0E;
pr2 : byte absolute $2:$12;
txsta : byte absolute $2:$19;
spbrg : byte absolute $2:$1A;
eedata : byte absolute $2:$1A;
eeadr : byte absolute $2:$1B;
eecon1 : byte absolute $2:$1C;
eecon2 : byte absolute $2:$1D;
vrcon : byte absolute $2:$1F;
Procedure BitSet(freg,bitnum:byte);macrolike;
Procedure BitClear(freg,bitnum:byte);macrolike;
Procedure RLeft(freg:byte);macrolike;
Procedure RRight(freg:byte);macrolike;
Procedure Change(a,b:byte);macrolike;
Procedure Inc(freg:byte);macrolike;
Procedure Dec(freg:byte);macrolike;
Procedure SwapF(freg:byte);macrolike;
Procedure Exit;macrolike;
procedure Push;
procedure Pop;
implementation
Procedure BitSet(freg,bitnum:byte);macrolike;
asm
bsf freg,bitnum
end;
Procedure BitClear(freg,bitnum:byte);macrolike;
asm
bcf freg,bitnum
end;
Procedure RLeft(freg:byte);macrolike;
asm
rlf freg,f
end;
Procedure RRight(freg:byte);macrolike;
asm
rrf freg,f
end;
Procedure Inc(freg:byte);macrolike;
asm
incf freg,f
end;
Procedure Dec(freg:byte);macrolike;
asm
decf freg,f
end;
Procedure Change(a,b:byte);macrolike;
asm
movf a, w // a=a b=b w=a
subwf b, w // a=a b=b w=b-a
subwf b, f // a=a b=b-(b-a)=a w=b-a
addwf a, f // a=a+(b-a)=b b=a
end;
Procedure SwapF(freg:byte);macrolike;
asm
swapf freg,f
end;
Procedure Exit;macrolike;
asm
return
end;
Procedure PUSH;
asm
bsf status, IRP
movwf SysWTemp
movf SysSWStackTop, w
movwf FSR
movf SysWTemp, w
movwf INDF
incf SysSWStackTop, f
end;
Procedure POP;
asm
bsf status, IRP
decf SysSWStackTop, f
movf SysSWStackTop, w
movwf FSR
movf INDF, w
end;
Procedure BeginOfInterrupt;
asm
movwf SysWTemp
swapf STATUS,w
movwf SysStatusTemp
movf FSR,w
movwf SysFSRTemp
end;
Procedure EndOfInterrupt;
asm
movf SysFSRTemp,w
movwf FSR
swapf SysStatusTemp,w
movwf STATUS
swapf SysWTemp,f
swapf SysWTemp,w
retfie
end;

Procedure Halt;
asm
HLT: goto HLT
end;
Begin
asm
nop ; ORG 0 - reset vector
movlw 32
movwf SysSWStackTop ; stack pointer initialization
goto start
goto BeginOfInterrupt ; ORG 4 - interrupt vector
start:
end;
End.


Lo que necesito hacer es una función booleana que me devuelba el estado de un bit de un registro, ya que seria ideal para leer una entrada por ejemplo.
Seria algo asi...


Function IsBitEnable(freg,bitnum:byte):boolean;macrolike;


Y se corresponderia a la función


asm
btfsc freg, bitnum ; salta si es 0
goto falso
goto verdadero
end;


Si a alguien se le ocurre algo, acepto críticas, sugerencias, etc.

Saludos

MaMu
19-03-2008, 17:37:03
Un pequeño ejemplo de lo anterior


processor 16F628;
cfgword cp_off,pwrte_on,wdt_off,intrc_osc_noclkout,lvp_off,bod_off;
uses delay20M;
Begin
//configuro
PORTA:=0;
TRISA:=1;
PORTB:=0;
TRISB:=0;
//Principal
repeat
inc(PORTB);
delay(10);
until PORTB=255;
end.

rretamar
19-03-2008, 18:08:13
Un IDE para desarrollo en Pascal para la familia Pic. Es software privativo. La página de la empresa que lo desarrolla es:

http://www.mikroe.com/en/compilers/mikropascal/pic/

Es lo que uso en mis desarrollos (así que estoy disponible para intentar aclarar cualquier duda al respecto...). Además se integra muy bien con el programador usb Picflash (de los mismos autores), tiene un depurador integrado y admite depuración "en circuito". La libraría que incluye es bastante completa. :p

Se puede descargar una "demo" que limita el archivo Hex generado a 2 K. Es la única limitación que tiene.

Saludos !

duilioisola
19-03-2008, 19:12:31
Es esto lo que quieres?
Function IsBitEnable(freg,bitnum:byte):boolean;macrolike;
begin
case bitnum of
1 : bitnum := 1;
2 : bitnum := 2;
3 : bitnum := 4;
4 : bitnum := 8;
5 : bitnum := 16;
6 : bitnum := 32;
7 : bitnum := 64;
8 : bitnum := 128;
end;
result := (freg and bitnum) = bitnum;
end

MaMu
19-03-2008, 19:15:25
Un IDE para desarrollo en Pascal para la familia Pic. Es software privativo. La página de la empresa que lo desarrolla es:

http://www.mikroe.com/en/compilers/mikropascal/pic/

Es lo que uso en mis desarrollos (así que estoy disponible para intentar aclarar cualquier duda al respecto...). Además se integra muy bien con el programador usb Picflash (de los mismos autores), tiene un depurador integrado y admite depuración "en circuito". La libraría que incluye es bastante completa. :p

Se puede descargar una "demo" que limita el archivo Hex generado a 2 K. Es la única limitación que tiene.

Saludos !

:D:D:D

Sin palabras compatriota!!!, hasta el debouncer de los botones esta programado en asembler, enla libreria button. Que bueno que esta este IDE, cuesta unos u$s 160.-, habrá algun impuestillo aduanero acá? tengo muchas ganas de comprarlo, ya lo estoy probando y los resultados son optimo, emulando en Proteus ISIS.

Clap Clap Clap, me saco el sombrero

MaMu
19-03-2008, 19:21:00
Es esto lo que quieres?


Function IsBitEnable(freg,bitnum:byte):boolean;macrolike;
begin
case bitnum of
1 : bitnum := 1;
2 : bitnum := 2;
3 : bitnum := 4;
4 : bitnum := 8;
5 : bitnum := 16;
6 : bitnum := 32;
7 : bitnum := 64;
8 : bitnum := 128;
result := (freg and bitnum) = bitnum;end



La idea es esa, pero en assembler. Otro dato, es que yo pondria:


Function IsBitEnable(freg,bitnum:byte):boolean;macrolike;
begin
case bitnum of
1 : bitnum := $1;
2 : bitnum := $2;
3 : bitnum := $4;
4 : bitnum := $8;
5 : bitnum := $10;
6 : bitnum := $20;
7 : bitnum := $40;
8 : bitnum := $80;
result := (freg and bitnum) = bitnum;
end;
por la sencilla razón de conversión de datos. Es decir, el peso delbit 7 leido, será de 127 y no de 128, lo que trae conflictos a la horade jugar con máscaras.

JoseFco
19-03-2008, 22:29:12
Hola amigos.

Estos muchachos de MikroElectronika tienen buenos equipos.Yo tengo buenos equipos para desarrollar mis microcontroladores, pero desde que encontre este http://www.mikroe.com/en/tools/easy8051b/ pues ya se gano el lugar de lider en mis herramientas.


Yo desde el 1986 que entre en este mundo de los micros solo me he dedicado al 8051 y sus parientes Atmel, Dallas, Etc.
Creo mis programas en asm y le soy fiel a mis uC. Algun dia puede que incurcione en los PIC.Cuando termine de aprender un poco de Delphi.
Pero estos amigos de Mikroe son buenos en sus productos.

Un Saludo.

rretamar
20-03-2008, 02:31:09
Aún viendo una parte, alucino con el osciloscopio digital que se ve a la izquierda de la foto que adjuntaste. Espero más adelante poder adquirir uno digital.

Ya que hablamos del Mikropascal, algunas impresiones:

Lo bueno:

* Buen compilador, un IDE muy cómodo, una librería bastante completa, una ayuda en línea muy detallada (y didáctica), una comunidad de usuarios (en el foro de la empresa) dispuesta a dar una mano (hay verdaderos gurús en el foro). También se han creado librerías adicionales por los usuarios, muchas de tipo open source.
* El lenguaje es el Pascal de toda la vida con extensiones específicas para los microcontroladores. Y con todas las ventajas de Pascal: estructurado, muy fácil de aprender, una sintaxis "limpia" y muy legible. Incorpora estructuras de datos como punteros, registros, variables "absolutas", etc. Permite además incluir código assembler en línea (de la misma forma que Delphi).
* El costo es bastante accesible, y la limitación de 2Kb en los .hex generados permite evaluar el producto al 100 %.
* Como hacía mención anteriormente, el compilador se integra muy bien con el programador USB Picflash.
* Al adquirir una licencia, las actualizaciones siguientes del producto son gratuitas.
* Estaban probando un "port" del compilador para Linux (¿ usarán Kylix ?), aunque si mal no recuerdo estaba en estado alfa.

Lo malo (a mi modo de ver):

* Algunos molestos bugs. Afortunadamente son bastante conocidos y se pueden subsanar. Eso sí, al principio si no estás muy familiarizado con el producto puede aparecer algún bug que se convierte en un dolor de cabeza (en el foro hay bastantes posts al respecto).
* La librería "estándar" que viene con el compilador no es open source, pese a los continuos pedidos de usuarios hacia la empresa para que entreguen las fuentes. Si se lograría eso, pienso que se podrían corregir los bugs maś rápidamente y se agregarían más funciones útiles.
* Hay algunos puntos "oscuros" que no están demasiado documentados, por ejemplo el assembler en línea. Se agradecería más documentación y ejemplos, ya que se pueden hacer cosas bastante útiles.
* El desarrollo del producto es algo lento.
* Cuando trabajas con proyectos grandes el tiempo de compilación más enlazado puede demorar varios segundos y acabar con la paciencia de más de uno. Aunque eso puede subsanarse dividiendo el programa en módulos "especializados" y haciendo compilaciones "parciales" gracias a las directivas del preprocesador {$define ...}.

Saludos ! ;)

MaMu
20-03-2008, 03:41:29
Hola amigos.

Estos muchachos de MikroElectronika tienen buenos equipos.Yo tengo buenos equipos para desarrollar mis microcontroladores, pero desde que encontre este http://www.mikroe.com/en/tools/easy8051b/ pues ya se gano el lugar de lider en mis herramientas.


Yo desde el 1986 que entre en este mundo de los micros solo me he dedicado al 8051 y sus parientes Atmel, Dallas, Etc.
Creo mis programas en asm y le soy fiel a mis uC. Algun dia puede que incurcione en los PIC.Cuando termine de aprender un poco de Delphi.
Pero estos amigos de Mikroe son buenos en sus productos.

Un Saludo.

Yo he trabajado mucho con la familia 8051 y sus descendientes de ATMEL, pero me volqué a los PIC por ser extremadamente económicos.
Los PIC tienen una contra, que solo los fabrica Microchip, aunque hay algunos clónicos dando vueltas en el mercado, y la familia 8051 tiene la ventaja de ser fabricada por casi el 100% de las industrias electronicas, por lo que si un fabricante desaparece, puedo cambiarlo sin problemas, cosa muy distinta en los PIC, que no se puede hacer, al menos al dia de la fecha.

Saludos

JoseFco
20-03-2008, 21:34:57
Hola mamu.

Los PIC son en este momento mas populares y no creo que el costo sea la razon.Tomando un ejemplo el 16F84A cuesta unos $4.90 usd. mientras que un AT89C2051 cuesta $ 1.90 mas o menos.Pero y aqui una de las posibles razones: el 16F84A solo tiene 35 instruciones a tener en cuenta, mientras que el 89C2051 son 256 instruciones.Un 16F84A se programa con dos diodos uno de ellos zener para reducir el voltage del serial port, unas tres resistencias y un programita.El 89C2051 ya necesita un programador algo mas complejo.Por otro lado encuentras en San Google mas informacion sobre los PICs que sobre algun otro tipo de uC.Y de los foros no hablar muchos de PICs y muy pocos de 8051.

Yo de los PICs tengo muy poca informacion pero no creo que el 16F84A sea superior al AT89C2051. ( yo trabajo mas que todo 89S51,89S52 y el 89S53).

Me gustaria cuando disponga de tiempo extra aprender un poco algo de los PICs, pero para nada cambiaria a esta altura los 51XX por otro tipo de uC.
Eso me remontaria al principio jejejeje y ya mi edad no esta para eso.:D

Un Saludo.

MaMu
21-03-2008, 00:18:48
Igual, sigue siendo mas economico y, despues de tu explicación en cuanto al programado, queda todo mas que claro. Me hiciste acordar, a cuando buscaba uno para el 8052, y encontre un circuito, con un boot loader, pero habia que programar 2 8052, que paradoja me resultaba, conseguir un programador que requiere un uC ya programado, en fin, aparecieron con el tiempo version de uC dondeya el programador no hacia falta, pero el costo de los mismo se multiplicaba. El tema es como vos decis, por ahi 1 o 2 dolares de diferencia no hace la diferencia real, aunque se nota muchismo en las producciones en masa. No creo que haya un uC mejor que otro, es como un lenguaje, que es mejor C++ o Delphi?, yo pienso que todos los uC, cuando uno va adquiriendo experiencia, algunos comienzan a quedarnos chicos al punto tal de empezar a sacar bits de la nada, pero tambien creo que cada uC esta diseñado para cierto nivel de tareas especifico. No es lo mismo destinar un 16F877 a una calculadora que un 80AT52, y solo se puede ver a gran escala, es como poner un Itanium 4 nucleos para correr un DOS 6.22. Pienso que todos los uC son buenos, y representan el avance tecnologico y comercial del momento, un ejemplo los uC que incorporaron USA o ETHERNET en su tecnologia. Yo me asombro del Propeler de Parallax, exageradisimo uC, no creo que haya alguien que lo pueda haber explotado al maximo, es un lujo para cualquier board.
Yo coincido con vos, no creo que un 16F84 sea superior a uno de la familia 8051, pero simplemente lo tomo con que son "diferentes".
Y si dominas la arquitectura del 8051, cuando te vuelques a los PIC, te va a resultar muy sencillo, aunque... en ciertos aspectos no son 100% confiables, no es lo mismo un conversor A/D especifico, que el interno del uC, y asi un sin fin de aplicaciones.
Me da mucho gusto tener colegas con los mismos hobbies e intereses. Yo amo a la electronica.


Saludos

JoseFco
21-03-2008, 00:40:00
Hola mamu.

Yo comence muy joven en la electronica, uffff eso fue en los 70s y le he dedicado toda mi vida por asi decir.Me a tocado vivir todo este tiempo mirando sus logros, desde los bulbos al trancistor y todo lo que llego despues.
Vivi mucho tiempo de ella y ahora solo la tomo como un pasa tiempo.Siempre tengo algo en mente.Le faltaba desde hhace tiempo algo a mis uC y era poder hacer aplicasiones en Delphi para poder rodarlos con una PC.Y es eso lo que me tiene por aca por este foro. Ahora trabajo en un programador ISP para la serie 89Sxx y lo estoy creando en Delphi. Usando un 89C2051 y un max 232, porque quiero que sea via serial port. existen muchos en la web pero usando el puerto paralelo y eso a esta altura esta mas que anticuado.
Ya me falta muy poco para terminarlo y estoy tratando que me quede lo mejor ya que ese seria mi primer programita Delphi en serio.
Pues por aca estamos y a ver que sale si logramos hacer que mas colegas se unan en estos hilos.

Un Saludo.

mario2000
21-03-2008, 21:04:48
Hola amigos. Tambien gusto de los microcontroladores y la electronica, yo prefiero MikroC, antes tambien programaba Con MikroPascal, y Mikrobasic, tambien utiliso el CCS pero de ves en cuando y desde luego en asm. Espero uds me puedan ayudar en algunas cosas que estoy desarrollando, asi que en lo que pueda corresponderles con mucho gusto.

Un saludo :o

JoseFco
21-03-2008, 21:17:20
Hola amigos. Tambien gusto de los microcontroladores y la electronica, yo prefiero MikroC, antes tambien programaba Con MikroPascal, y Mikrobasic, tambien utiliso el CCS pero de ves en cuando y desde luego en asm. Espero uds me puedan ayudar en algunas cosas que estoy desarrollando, asi que en lo que pueda corresponderles con mucho gusto.

Un saludo :o

Welcome Mario..


Al grupo de electronica y microcontroladores.

Un Saludo.