PDA

Ver la Versión Completa : primer proyecto con Mikro pascal no compila


gaston260
29-12-2009, 23:10:40
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

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.

... al intentar compilar me decia que DDRA no esta declarada , el codigo que copie del pdf fue


Código Delphi [-] (http://www.clubdelphi.com/foros/#)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:

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:

TRISA := $FF; // Definir todos los pines del registro A (RA0 a RA7) como entradas

o se pueden setear bits por separado:

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:

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:

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:

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:

PORTA := PORTA Or $2C;

Otro ejemplo, en este caso expresando el valor en binario:

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/en/DeviceDoc/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

while true do
Begin *** End;donde antes era

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

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 !