Unidad 4
Unidad 4
Unidad 4
de Milpa Alta
Lenguajes de Interfaz
Alumnos:
Bravo Garca Emmanuel.
Puebla Valencia Jess.
Ramrez Gervacio Daniel.
Velasco Velzquez Germn.
Profesora:
Mara Teresa De Len Jurez.
Unidad IV
Programacin de Dispositivos
Ingeniera en Sistemas
Computacionales
(I.S.C. 62)
ndice de Contenidos
Introduccin ...................................................................................................... 2
4.1 El bfer de video en modo texto ................................................................. 3
Ejemplo 1: ...................................................................................................... 4
4.2
Ejemplo:......................................................................................................... 6
a) Rutina _AbsoluteRead: ............................................................................... 6
b) Rutina _AbsoluteWrite: ............................................................................... 7
c)
4.3
Ejemplo:....................................................................................................... 11
4.4
Ejemplo:....................................................................................................... 14
Variantes .................................................................................................. 15
4.5
Ejemplo:....................................................................................................... 17
4.6
Ejemplo:....................................................................................................... 20
Conclusines ......................................................Error! Marcador no definido.
Bravo Garca Emmanuel ........................................................................... 22
Puebla Valencia Jess .............................................................................. 22
Ramrez Gervacio Daniel ........................................................................... 22
Velasco Velzquez Germn ....................................................................... 22
Referencias ..................................................................................................... 23
Introduccin
En el presente trabajo se desarrollan temas relacionados con lenguajes de
interfaz en especfico programacin de dispositivos ejemplos de cada tipo de
programacin adems de una clara explicacin de que es un buffer que no es
otro cosa que la ubicacin de la memoria de un dispositivo digital; mientras los
datos se encuentran en el buffer los cuales se guardan para ser procesados.
Los puertos de comunicacin de la PC son de particular inters para el estudioso
de la electrnica ya que le permiten utilizar una computadora personal para
controlar todo tipo circuitos electrnicos utilizados, principalmente, en
actividades de automatizacin de procesos, adquisicin de datos, tareas
repetitivas y otras actividades que demandan precisin.
Existen dos mtodos bsicos para transmisin de datos en las computadoras
modernas. En un esquema de transmisin de datos en serie un dispositivo enva
datos a otro a razn de un bit a la vez a travs de un cable. Por otro lado, en un
esquema de transmisin de datos en paralelo un dispositivo enva datos a otro a
una tasa de n nmero de bits a travs de n nmero de cables a un tiempo. Sera
fcil pensar que un sistema en paralelo es n veces ms rpido que un sistema
enserie, sin embargo esto no se cumple, bsicamente el impedimento principal
es el tipo de cable que se utiliza para interconectar los equipos.
Ejemplo 1:
Abarcando los aspectos ms importantes del modo de video:
ENDP
prepararPantalla proc near
mov ah, 06h;funcion de limpiar pantalla
mov bh, 80h;Atributos de color de fondo
mov al, 00h;cantidad de Filas a Borrar Enrollar
mov cx, 00h;columna inicial en Ch, Columna Inicial en Cl
mov dx, 30a0h;columna Final en Dh,Columna Final en Dl
int 10h
ret
prepararPantalla endp
para llamarlo debes hacerlo asi:
call prepararPantalla
Ejemplo:
El sistema de almacenamiento en disco constituye el soporte externo de la
informacin. Los datos se registran sobre la superficie del disco en una serie de
circunferencias concntricas llamadas pistas (track).
Varias pistas, una por cada cara del disco (generalmente 2), componen un
Clster. Cada pista est dividida en porciones iguales llamadas sectores (unidad
bsica de almacenamiento en disco). El tamao de un sector se mide en bytes,
y depende de las caractersticas del disco. En esta seccin se presentan 3
rutinas que permiten lectura y escritura absoluta de sectores, as como la
determinacin del espacio libre disponible en un disco.
a) Rutina _AbsoluteRead:
Transfiere el contenido de uno o ms sectores del disco al buffer especificado,
accesando directamente a los sectores lgicos. En caso de error, se enciende el
bit de acarreo y AX contiene el cdigo del error.
Invocacin:
push <unidad de disco>
push <nmero de sectores a leer>
push <prime
r sector a leer>
push SEG <buffer>
push OFFSET <buffer>
call _AbsoluteRead
PUBLIC _AbsoluteRead
_AbsoluteRead PROC NEAR
ARG Buffer:DWORD,Start:WORD,NumSect:WORD,Drive:BYTE= ArgLen
push bp
; salvar BP
mov bp,sp
; permitir acceso a los argumentos
6
push bx
; salvar registros
push cx
push dx
push ds
mov al,Drive
; lectura absoluta de disco
mov cx,NumSect
mov dx,Start
lds bx,Buffer
int 25h
pop bx
pop ds
; recuperar registros
pop dx
pop cx
pop bx
pop bp
ret ArgLen
_AbsoluteRead ENDP
b) Rutina _AbsoluteWrite:
Transfiere el contenido del buffer especificado a uno o ms sectores de disco,
accesando directamente a los sectores lgicos. En caso de error, se enciende el
bit de acarreo y AX contiene el cdigo del error.
Invocacin:
push <unidad de disco>
push <nmero de sectores a escribir>
push <primer sector a escribir>
push SEG <buffer>
push OFFSET <buffer>
call _AbsoluteWrite
PUBLIC _Absolut
eWrite
_AbsoluteWrite
PROC NEAR
ARG Buffer:DWORD,Start:WORD,NumSect:WORD,Drive:BYTE= ArgLen
push bp
; salvar BP
mov bp,sp
; permitir acceso a los argumentos
push bx
; salvar registros
push cx
push dx
push ds
7
mov al,Drive
; escritura absoluta a disco
mov cx,NumSect
mov dx,Start
lds bx,Buffer
int 26h
pop bx
pop ds
; recuperar registros
pop dx
pop cx
pop bx
pop bp
ret ArgLen
_AbsoluteWrite
ENDP
c) Rutina _FreeDiskSpace
Devuelve en DX:AX el espacio libre en disco (en Kb). En caso de error, se
enciende el bit de accarreo.
Invocacin:
push <unidad de disco>
call _FreeDiskSpace
PUBLIC _FreeDiskSpace
_FreeDiskSpace
PROC NEAR
ARG Drive:BYTE= ArgLen
push bp
; salvar BP
mov bp,sp
; permitir acceso a los argumentos
push bx
; salvar registros
push cx
mov ah,36h
; funcin 36h
mov dl,Drive
int 21h
; del DOS
mul cx
; DX:AX= bytes por cluster
mov cx,1024
; CX= 1 Kb
div cx
; DX:AX= Kb por cluster
mul bx
8
Descripcin
Inicializar puerto serie
Enviar un dato
Recibir un dato
Obtener el estado del puerto
10
Ejemplo:
Pasos para poder enviar datos a travs del Puerto Serial:
Insertar el control MS Comm sobre la forma:
Establecer las siguientes propiedades:
ComPort:
Settings:
Handshaking:
Abrir el puerto, si este ya est abierto por otra aplicacin, entonces se debe
cerrar esa aplicacin, para despus volverlo a abrir el puerto con una aplicacin
en Visual Basic, esto se hace utilizando la siguiente instruccin:
MSComm1.Portopen = true
Definir el tamao del buffer receptor, esto se hace con la propiedad InputLen
11
MSComm1.InputLen = 1024
Enviar los datos que se desean
Cuando la aplicacin se termine se debe cerrar el puerto.
Aplicacin #1
1. Cree un Nuevo proyecto Form1 (es creado por default).
2. Seleccione del men Project ,verifique que el control MicrosoftComm, este en
la barra de herramientas
3. Agregue el control MSCOMM a la forma.
4. Agregue 2 controles Command Buttons a la forma.
Agregue el siguiente cdigo a sus respetivos controles:
Option Explicit
Const Xon = &H11
Const Xoff = &H13
Private Sub Form_Load()
Form1.Caption = "Primera aplicacin con el Puerto Serial
With MSComm1
.Handshaking = 2 - comRTS
.RThreshold = 1
.RTSEnable = True
.Settings = "9600,n,8,1"
.SThreshold = 1
.PortOpen = True
End With
Command1.Caption = "&Send Xoff"
Command2.Caption = "Send &Xon"
End Sub
Private Sub Command1_Click()
MSComm1.Output = "123456789" & Chr$(Xoff)
End Sub
Private Sub Command2_Click()
MSComm1.Output = "987654321" & Chr$(Xon)
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
12
End Sub
clearall;
closeall;
clc;
PS = serial('COM1')
set(PS,'Baudrate',9600);%Se configura la velocidad a 9600 bps
set(PS,'StopBits',1);%Se configura el bit de paro
set(PS,'DataBit',8);%Se configura que el dato es de 8 bits
set(PS,'Parity','none');%Se configura la paridad
set(PS,'Terminator','CL/RF');%"c" carcter con que se finaliza el envo
set(PS,'OutputBufferSize',1);%"n" es el nmero de bytes a enviar
set(PS,'InputBufferSize',1);%"n" es el nmero de bytes a recibir
set(PS,'Timeout',5);% 5 Segundos de tiempo de espera.
fopen(PS)
Para leer los datos del puerto serial se debe poner la instruccin: variable
= fread(PS,1,'uint8');
Para escribir el dato en el puerto serial se ocupa la siguente instruccin: Fwrite
(PS,variable,'uint16');
Finalmente, unca vez que lees del puerto o escribes en l se debe de cerrar a
travs de lasinstrucciones
Close (PS);
Delete (PS);
Clear PS;
UART.- Decodifica serial a paralelo.
DSP .- Dispositivo Digital Programable.
13
Ejemplo:
En este proyecto vamos a enviar la informacin al arduino usando el monitor
serial. Para hacer esto lo hacemos desde la ventana que el monitor serial tiene
para esto.
Para recibir y procesar la informacin enviada desde la computadora, vamos a
utilizar dos de las funciones de la biblioteca Serial. Primero la funcin
Serial.available(); para saber si hay informacin disponible en el buffer de
entrada. Y despues, en caso de que esta informacin est disponible, la
funcin Serial.parseInt(); para leerla como nmeros enteros.
Con la informacin recibida, un nmero entre 0 y 9, vamos a prender el led con
el brillo correspondiente. Tendremos que usar la funcin map() para convertir
estos valores a valores usados para las salidas analgicas con PWM, valores
entre 0 y 255.
14
/*
En este proyecto cambiamos la instensidad de un led
dependiendo de un dato enviado con el monitor serial
y recibido por el serial del Arduino
*/
const int pinLed = 9;
int brillo; // una constante para guardar el valor del dato enviado
void setup() {
// inicializa la comunicacion serial
Serial.begin(9600);
// envia un mensaje con las instrucciones
Serial.println("Envia un numero entre 0 y 9");
// inicializa el pinLed de salida
pinMode(pinLed, OUTPUT);
}
void loop() {
// checa si la computadora ha enviado un dato
if (Serial.available()) {
// si es asi, lo lee, debe ser un valor entre 0 y 9):
brillo = Serial.parseInt();
// mapea el valor de entrada a un valor entre 0 y 255
brillo = map(brillo, 0, 9, 0, 255);
// limitamos el valor entre 0 y 255
brillo = constrain(brillo, 0, 255);
// envia por el serial el valor convertido a un valor entre 0 y 255
Serial.println(brillo);
// enciende el led con un valor entre 0 y 255
analogWrite(pinLed, brillo);
}
}
Variantes
Qu pasa si se envian caracteres distintos a un nmero entre 0 y 9? Podemos
agregar un mensaje de error.
/*
En este proyecto cambiamos la instensidad de un led
dependiendo de un dato enviado con el monitor serial
y recibido por el serial del Arduino
*/
15
void setup() {
// inicializa la comunicacion serial
Serial.begin(9600);
// envia un mensaje con las instrucciones
Serial.println("Envia un numero entre 0 y 9");
// inicializa el pinLed de salida
pinMode(pinLed, OUTPUT);
}
void loop() {
// checa si la computadora ha enviado un dato
if (Serial.available()) {
// si es asi, lo lee, y lo guarda en una variable de tipo caracter):
char dato = Serial.read();
// checamos si es un valor entre 0 y 9
if (dato >= '0' && dato <= '9' ) {
// si lo es lo convertimos a un entero entre 0 y 9
int brillo = dato - '0';
// y lo mapeamos a un valor entre 0 y 255
brillo = map(brillo, 0, 9, 0, 255);
// devuelve el valor convertido a un valor entre 0 y 255
Serial.println(brillo);
// enciende el led con un valor entre 0 y 255
analogWrite(pinLed, brillo);
} else {
Serial.println("Debes enviar un numero entre 0 y 9");
}
}
}
16
Ejemplo:
La red es el siguiente donde utilizamos cdigo en ensamblador y cdigo pascal.
El siguiente cdigo sirve para limpiar pantalla, est escrito en ensamblador
dentro de una funcin en pascal, lo que es lo mismo a la funcin ClrScr en pascal.
Uses Crt;
Var Car: Char;
i,j : integer;
;Este procedimiento limpia la pantalla y pone blanco sobre azul
Procedure Limpia_Pantalla;
Assembler;
Asm Mov AX,0600h
Mov Bh,17h
Mov CX,0000h
Mov DX,184Fh
Int 10h
End;
;Este procedimiento imprime el carcter en la pantalla
Procedure Imprime_Car(C: Char);
Assembler;
17
Asm
Mov Ah,02h
Mov Dl,C
Int 21h
End;
;Este procedimiento tiene la misma funcin que el procedimiento Goto XY de
Turbo Pascal
Procedure Cursor_XY(X,Y: Byte);
Assembler;
Asm
Mov Ah,02h
Mov Bh,00h
Mov Dh,Y
Mov Dl,X
Int 10h
End;
Begin
Limpia_Pantalla;
Repeat Limpia_Pantalla;
Cursor_XY(0,0);
Write(Introduce un carcter: );
Car:=Read Key;
Imprime_Car(Car);
Limpia_Pantalla;
If car #13 then
Begin
For i:=0 to 24 do
For j:=0 to 79 do
Cursor_XY(j,i);
Imprime_Car(Car);
End;
Cursor_XY(30,24);
Write(Presiona enter para salir u otro para seguir);
Readln;
Until car = #13;
End.
18
19
Ejemplo:
USB con ASSEMBLER
PASO 1
Usaremos MPASM en la version 4.7...Y tomaremos de la carpeta
c:\pbp\usb18\*.* y lo copiaremos a donde queremos
trabajar... en nuestro caso c:\cdcdemo...
PASO 2.
Abra el archivo de descriptores USB (llamado USBDESC.asm)
Hay tres lineas de codigo ah, cambie ; para que CDCDESC.ASM pueda
usarse.
Code:
;
;
include "MOUSDESC.ASM"
include "PACHDESC.ASM"
include "CDCDESC.ASM"
Paso 3
Copie este cdigo y gurdelo en la carpeta c:\cdcdemo y compilelo....
Code:
DEFINE
OSC 48
20
for b0 = 0 to 15
lookup b0,["USB CONNECTED!",10,13],B1
BUFFER(B0) = B1
NEXT B0
' Main Program Loop
Loop:
USBService
' Must service USB regularly
USBOut 3, Buffer, Cnt, loop
goto loop
end
48
Conclusiones
Bravo Garca Emmanuel
Con lo que hemos visto de todos estos tipos de programacin, se puede decir
que como se tiene acceso a casi todo el hardware de la computadora va
interrupciones de software, tiene posibilidades que se puedan programar
virus, programacin en USB para la manipulacin de Arduino y hasta para
sistemas ms complejos y poder manipularlos mediante la comunicacin
USB.
22
Referencias
https://www.goconqr.com/en/p/971362-unidad-4--programaci-n-de-dispositivos-mind_maps
http://arduineando.matem.unam.mx/proyectos/enviandoMonitorSerial
http://www.academia.edu/9552859/La_programaci%C3%B3n_hibrida
http://ensam1.blogspot.mx/2005_09_01_archive.html
http://instrumentaciongz.wikispaces.com/USB+CON+ASSEMBLER
http://hgr.tripod.com/puertos_ensamblador.html
http://www.lawebdelprogramador.com/foros/Ensamblador/1022270-Documentacion-PuertoUSB.html
http://www.itpn.mx/recursosisc/6semestre/lenguajesdeinterfaz/Unidad%20IV.pdf
https://prezi.com/fza8xd9uiku8/unidad-4-programacion-de-dispositivos/
23