Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > ASM y Microcontroladores
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2008
candia candia is offline
Miembro
 
Registrado: abr 2008
Posts: 15
Poder: 0
candia Va por buen camino
¿como programo el puerto serial con delphi + ensamblador?

hola amigos, quiero controlar el puerto serial com1 para sacar datos y conectar el pic 16f84A, lo primero que quiero hacer es ennviar un numero del 0 al 9 y que se muestre en un display de 7 segmentos.

pero la verdad es que haun no me cae el 20, se que puedo controlar el uart con la interrupsion 14 del bios, y que en el reguistro lcr (que no se que significa) se configura, pero no puedo.

si alguien tiene un ejemplo de comunicasion serie con delphi y ensamblador le agradeceria mucho si me lo pasa, para vcer como configuro el puerto y como lo manda llamar ademas de como controla los pines como el rts.

de ante mano gracias y voy a seguir intentando.
Responder Con Cita
  #2  
Antiguo 21-04-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 21
FGarcia Va por buen camino
Hola! aunque no es mi fuerte esto del ensamblador, mi pregunta es ¿en donde quieres configurar el puerto serie?

1. ¿Desde tu aplicacion Delphi? Creo que andas reinventando el hilo negro, ya que existen diversos componentes para accesar el puerto desde delphi (APro, ComPortLib por decir algunos, una busqueda en los foros te daran los enlaces para descarga)

2. ¿Quieres configurar el puerto de comunicaciones de tu PIC? Aqui no te puedo ayudar pero tal vez alguien del foro nos pueda enseñar.

Saludos
Responder Con Cita
  #3  
Antiguo 21-04-2008
candia candia is offline
Miembro
 
Registrado: abr 2008
Posts: 15
Poder: 0
candia Va por buen camino
si he utilizado el tcomport, pero lo que pasa es que quiero entender mas el funcionamiento del puerto serie, es por eso que tengo como reto controlarlo con un codigo en essamblador, ademas creo que asi es mas facil desde el punto de vista de comonicasion con dispositivos como el pic.

haa, pero el tcomport, no lo utilize para conectar el pic, eso no lo he intentado.
Responder Con Cita
  #4  
Antiguo 21-04-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola candia.

Si lo que quieres es ver como se ve un programita Delphi en asm para el puerto serie, aqui te dejo esto:

Código Delphi [-]
var
  Form1: TForm1;
  data,status:byte;
const
    base = $3f8;{base address port serial}
    lcr = 3; {line control register}
    dll = 0; {divisor lacht low byte}
    dlh = 1; {divisor lacht high byte}
    lsr = 5; {line status register}

Procedure Initserial;
begin
    asm
        mov dx,base+lcr; {address line control register}
        mov al,$80 ; {10000000b = access bit divisor lacht}
        out dx,al
;
        mov dx,base+dll; {address divisor lacht low byte}
        mov al,$30 ; {DLLB = 30h}
        out dx,al
;
        mov dx,base+dlh; {address divisor lacht high byte}
        mov al,$00     ; {DLLH = 00h}
        out dx,al
;                       {In this case Port Serial have}
;                       { baud rate = 2400 bps}
        mov dx,base+lcr;{address line control register}
        mov al,$03 ;    {00000011b =}
        out dx,al ;     {bit 7=0, access to Rx buffer & Tx
;                       {bit 6=0, set break disable
;                       {bit 5-4-3=000, no parity
;                       {bit 2=0, one stop bit
;                       {bit 1-0=11,data lenght 8 bit}
        end;
end;

Procedure Send_Data_Serial;
begin
    asm
        mov dx,base
        mov al,data
        out dx,al
    end
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Initserial;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
repeat
  asm
   mov dx,base+lsr ; {address line status register }
   in al,dx
   and al,$20      ; {00100000b =not masking bit 5}
   mov status,al   ; {bit5=Empty Transmitting holding reg}
  end;
until status = $20; { If ETHR = 1 then data ready tobe send }
data:=0;
Send_Data_Serial;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 repeat
  asm
   mov dx,base+lsr; {address line status register }
   in al,dx
   and al,$20     ; {00100000b =not masking bit 5}
   mov status,al  ; {bit5=Empty Transmitting holding reg}
  end;
until status = $20; { If ETHR = 1 then data ready tobe send}
data:=1;
Send_Data_Serial;
end;

Yo prefiero usar ComPort por muchas razones y una es que en asm, algunas PC ya no quieren rodar bien.Por ejemplo Win XP da problemas cuando se crea un asm para controlar el puerto serie.
Con los PICs no te puedo ayudar. Pero aqui hay algunos colegas que si conocen bastante estos chips.

Un Saludo.
Responder Con Cita
  #5  
Antiguo 22-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Queres controlar el puerto Serie, el de la PC o USART del pic?

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #6  
Antiguo 22-04-2008
candia candia is offline
Miembro
 
Registrado: abr 2008
Posts: 15
Poder: 0
candia Va por buen camino
el puerto serie de la computadora, del pic yo me encargo (eso creo)
Responder Con Cita
  #7  
Antiguo 22-04-2008
candia candia is offline
Miembro
 
Registrado: abr 2008
Posts: 15
Poder: 0
candia Va por buen camino
HOLA Jose FCO

muchas gracias por el codigo funte que publicaste, aun no lo puedo hecar a andar, asi que me preguntava si tu ya lo probaste o soo lo bajaste de otro lugar, por ejemplo de las dudas que tengo es en las funciones lcr, dll, dlh,lsr (ya se que no son funciones del programa), se supone que estas sirven para poner las espesificasiones del puerto, pero asta donde yo se se encuentran en la interrupsion 14 del bios, y en el programa no encontre int 14, pero estabien talves no sea nesesario hacerlo, otra duda es en la dirreccion del puerto y es que esta direccion la he utilizado para el puerto serial, ¿tengo que poner otra por ejemplo 278?, pero tambien esta bien yo lo investigo por que al pareser si son la misma direccion, es solo una pequeña duda.

Pero el verdadero problema es que me marca herrores en los prucedure que cree, te dejo el codigo fuente, espero que puedas echarle un ojo, te lo agradeceria mucho, haa yo utiliso delphi 6, haunque no creo que sea por eso,

muchas gracias por todo, cuando me salga te mando el proyecto completo para que lo tengas por si algun dia lo nesesitas. adios
Archivos Adjuntos
Tipo de Archivo: zip serial ensamblador 2.zip (4,5 KB, 38 visitas)
Responder Con Cita
  #8  
Antiguo 22-04-2008
candia candia is offline
Miembro
 
Registrado: abr 2008
Posts: 15
Poder: 0
candia Va por buen camino
[quote=JoseFco;281567]Hola candia.

Si lo que quieres es ver como se ve un programita Delphi en asm para el puerto serie, aqui te dejo esto:
Responder Con Cita
  #9  
Antiguo 22-04-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola Candia.

Trabajar el serial port en asm, no es nada complicado.Lo que lo hace complicado es que a ese nivel tan abajo los PC actuales dan la pataleta.
Si quieres mandar hex al puerto serie de un uC usando Delphi y teniendo Delphi 6, yo te recomiendo que te bajes este componente que es gratis.
ComPort Trae ayuda para instalarlo y ademas muchos ejemplos.Por otra parte aqui en el foro existen muchos hilos relacionados directamente con el.

Cuando tengas ese componente istalado y comiences a jugar con el te daras cuenta que facil es mandar data a un uC usando Delphi con su ayuda.

Un Saludo.
Responder Con Cita
  #10  
Antiguo 23-04-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola amigos.

Continuando con el componente ComPort aqui esta una guia de como instalarlo. ComPort en Delphi 6.

Un Saludo.
Responder Con Cita
  #11  
Antiguo 23-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por candia Ver Mensaje
el puerto serie de la computadora, del pic yo me encargo (eso creo)
Seria bueno que publicases parte del código que estas empleando para poder tener una certeza de donde se producen los errores.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #12  
Antiguo 23-04-2008
Avatar de Dedalo
Dedalo Dedalo is offline
Miembro
 
Registrado: abr 2008
Ubicación: Albacete (España)
Posts: 32
Poder: 0
Dedalo Va por buen camino
Hace ya unos años tuve que modificar unas aplicaciones que compró mi empresa porque utilizaban el puerto serie a bajo nivel, y los portatiles que se compraron tenian puertos serie "virtuales". El hardware ya no era el mismo y las UART tampoco, asi que el soft dejó de funcionar. La solucion fue utilizar los puertos serie como ficheros abriendo el fichero "COM1:", tal como se hacía en MS-DOS y el programa sigue funcionando hoy con esa modificacion. Solo tienes que abrir el fichero y enviarle bytes o leer bytes, el S.O. se ocupa del resto.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como leer desde el puerto serial maravert PHP 2 15-01-2008 02:13:42
¿¿Como capturo datos que entran por el puerto serial de mi PC? David Nova Varios 2 11-10-2006 10:49:23
Como recibir datos en un puerto serial JULIPO PHP 1 17-06-2006 21:54:36
Manejo Puerto Serial en Delphi 2005 edgusano OOP 0 25-01-2005 18:49:55
Como usar el puerto serial JefeNet Varios 1 02-11-2004 11:04:00


La franja horaria es GMT +2. Ahora son las 01:56:45.


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
Copyright 1996-2007 Club Delphi