Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   ASM y Microcontroladores (https://www.clubdelphi.com/foros/forumdisplay.php?f=44)
-   -   primer proyecto con Mikro pascal no compila (https://www.clubdelphi.com/foros/showthread.php?t=65611)

gaston260 29-12-2009 23:10:40

primer proyecto con Mikro pascal no compila
 
Hola espero que alguien me pueda responder , ayer instale la demo de mikropascal y quice crear un proyecto que prenda unos leds en el puerto A pero no se mucho y recien empiezo a ver algo de este lenguaje y es por eso que escribo ! , mi problema es que saque de algun lado un pdf que tenia como titulo "mi primer proyecto" pero al intentar compilar me decia que DDRA no esta declarada , el codigo que copie del pdf fue

Código Delphi [-]
program 1;

begin

 DDRA := 0xFF;

  while true do
  begin
   PORTA := 0X00;
   Delay_ms(1000);

   PORTA := 0xFF;
   Delay_ms(1000);
  end;
end.

si alguien me puede ayudar estare muy agradecido .

ElKurgan 30-12-2009 07:30:44

No conozco este MicroPascal, pero si te puedo decir que el Pascal estandar es un lenguaje fuertemente tipado, es decir, no puedes usar una variable si antes no has declarado su tipo.

Cita:

Empezado por gaston260 (Mensaje 349738)
... al intentar compilar me decia que DDRA no esta declarada , el codigo que copie del pdf fue


Código Delphi [-]program 1;

begin

DDRA := 0xFF;

while true do
begin
PORTA := 0X00;
Delay_ms(1000);

PORTA := 0xFF;
Delay_ms(1000);
end;
end.




si alguien me puede ayudar estare muy agradecido .

En Pascal tendrías que poner antes de usarla algo como esto:
Código Delphi [-]
var
  DDRA: Integer;
begin
 DDRA := 0xFF;
...

Un saludo

gaston260 31-12-2009 03:39:03

Muchas gracias ! y como podria usar un solo pin del 16f84a en mikropascal ?

rretamar 01-01-2010 06:47:11

Primero tienes que definir si un pin de entrada/salida se usará como entrada o como salida. Esto se hace cambiando los bits del registro TRISx (vale para cualquier tipo de PIC).

Por ejemplo:

Código Delphi [-]
TRISA := $FF; // Definir todos los pines del registro A (RA0 a RA7) como entradas

o se pueden setear bits por separado:

Código Delphi [-]
SetBit(TRISA, 3);  // Colocar el bit 3 en estado alto (entrada). En este caso el pin RA3 se configura como entrada.

ClearBit(TRISB, 5); // Colocar el bit 5 en estado bajo (el pin RB5 se comportará como una salida)

TRISA := $FF; // Colocar todos los bits en uno (todos los pines del registro A como entradas)

También se pueden setear múltiples bits usando la notación binaria. Ejemplo:

Código Delphi [-]
TRISA := %00001111;

En la hoja de datos del PIC que vas a usar podés ver los registros que posee y el número de entradas/salidas disponibles.

Una vez definido un pin como salida, a través de SETBIT o CLEARBIT se puede cambiar el estado de ese pin. Por ejemplo:

Código Delphi [-]
Setbit(PORTA,0); // Colocar el pin RA0 en estado alto
Clearbit(PORTA,5); // Colocar el pin RA5 en estado bajo

Si el pin está configurado como entrada, puedes leer el valor con TestBit. Ejemplo:

Código Delphi [-]
Estado := Testbit(PORTA,3); // Leer el estado del pin RA3

Saludos !

gaston260 01-01-2010 08:20:13

Muchas gracias lo voy a usar y comento mas luego ! , pero desde ya estoy muy agradecido ! , algun tutorial o manual en castellano sobre mikropascal abra ?

rretamar 01-01-2010 16:09:44

Toda la documentación de Mikropascal está en inglés. No conozco documentación en español.

Hay algunos "puntos oscuros" como ciertos detalles en el manejo de cadenas, el ensamblador en línea (entre otros temas) que no están 100 % documentados. Igual revisando en el foro de Mikroelectronica encontrarás muchos "tips"
de utilidad.

Saludos !

gaston260 01-01-2010 18:45:56

Hola ! tengo otro problema ! como puedo hacer para poner en un nivel logico 1 dos patas simultanes del 16f84a ?

trato de hacerlo pero estoy vastante perdido !

gracias !

rretamar 01-01-2010 23:06:32

Se puede cambiar el estado de más de un pin a la vez usando una máscara, cambiando los bits que desees. Por ejemplo:

Código Delphi [-]
PORTA := PORTA Or $2C;

Otro ejemplo, en este caso expresando el valor en binario:
Código Delphi [-]
PORTA := PORTA Or %00010010;

Esto coloca varios pines en estado alto.

Para invertir uno o más pines al mismo tiempo se puede usar XOR en lugar de OR.

Saludos !

gaston260 02-01-2010 01:43:26

Haaaaaaaaaaaaaaaaaaa !!!!! muchas gracias amigo ! esto de intentar ser autodidacta es dificil jajaja por suerte hay gente con ganas de enseñar !

Gracias !!!!

rretamar 02-01-2010 05:49:26

Suerte con el aprendizaje y a no desanimarse.

Con respecto al PIC16F84, a esta altura me parece totalmente obsoleto. Si vas a usar un compilador de alto nivel como Mikropascal (que por más optimizado que sea el código generado, nunca se acercará al ensamblador "puro"), te recomiendo usar algo más moderno, como el PIC16F648A, que no es mucho más costoso pero tiene más prestaciones (incluyendo más memoria), lo que lo hace ideal como "entry level". ¿ Programar en ensamblador ? Hoy en día trato de evitarlo en la medida de lo posible, y más teniendo excelentes compiladores como el citado Mikropascal.

Aquí está la hoja de datos del PIC16F648A:

http://ww1.microchip.com/downloads/e...Doc/40044G.pdf

Como se puede apreciar, a pesar de ser un microcontrolador pequeño, tiene prestaciones que están disponibles normalmente en modelos más grandes. Tiene USART, tres temporizadores, PWM, dos comparadores, 16 pines de E/S.

Saludos de parte de otro autodidacta !!!

gaston260 04-01-2010 18:02:46

Gracias por tomarte el tiempo de editar la respuesta ! , y voy a tomar tus consejos aunque solo soy un jobista jajaja tal vez un dia aga algo interesante porque me apasiona y mas conociendo a delphi !

gaston260 04-01-2010 20:15:29

tengo un problema ahora ! mikropascal me dice 1:1 E-0 Linker error: 13: bad bit number el error se produce si saco

Código:

while true  do
  Begin *** End;

donde antes era

Código:

while true  do
Begin
  while TestBit(PORTA,3) = 1 Do  // pregunto si la pata 2 esta en nivel alto
                                // si lo esta entonces
  Begin *** End;

la verdad me quede sin preguntas ni respuestas !! no entiendo nada de nada !

rretamar 05-01-2010 22:23:15

¿ Podrías postear el código fuente completo ?.

Saludos !

gaston260 06-01-2010 06:20:01

perdon lo borre pero intento generar de nuevo el error con mikropascal pro 2009 y no lo hace !! voy a volver a instalar mikropascal 8.0.0.1 para ver si de nuevo me genera el error !

era algo asi el codigo

Código:

program probar1;

{ Declarations section }

begin

SetBit(TRISA, 3);
SetBit(TRISA, 2);

begin
while true do
      begin
          while TestBit(PORTB,3) = 1 Do
                begin
                        PORTA := PORTA Or %00010010;
                end;
      end;
end;

begin
while true do
      begin
          while TestBit(PORTB,2) = 1 do
                begin
                        PORTA := PORTA Or %11101101;
                end;
      end;
end;

end.

se que estoy abusando de los Begins pero era el codigo sin optimizar !

gracias !

gaston260 06-01-2010 06:32:47

Bue resulta que ni el mikropascal 8.0.0.1 me genera errores ni el pro tampoco !

el codigo es este

program probar1;

{ Declarations section }

begin

SetBit(TRISA, 3);
SetBit(TRISA, 2);

{ClearBit(TRISB, 7);
ClearBit(TRISB, 8);
ClearBit(TRISB, 9);
ClearBit(TRISB, 10);
ClearBit(TRISB, 11);
ClearBit(TRISB, 12);
//ClearBit(TRISB, 13);
}

TRISB := %00001111;

begin
while true do
begin
while TestBit(PORTA,3) = 0 Do
begin
PORTB := PORTB Or %10010010;
end;
//end;
//end;

//begin
//while true do
//begin
while TestBit(PORTA,2) = 0 do
begin
PORTB := PORTB Or %11101101;
end;
end;
end;

end.

rretamar 08-01-2010 04:45:55

Entonces...¿ todo funciona ? :)

Saludos !


La franja horaria es GMT +2. Ahora son las 04:07:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi