bienvenido

De modo a tener a mano algunos apuntes, de como se hacia eso, o donde era que guarde tal archivo que explicaba como se configuraba, reuno algunos materiales interesantes, en este espacio que espero les sea tambien de utilidad, saludos! FM,

jueves, 29 de abril de 2010

Pequeño how to de manejo del puerto serie

______________________________________________
---------TUTORIAL DE manejo del puerto serie---------
____________________by_fernando_martinez_©2008_

___tamaño de la palabra___
bit 0
bit 1

___Numero de stop___
bit 2

___paridad___
bit 3
bit 4

___velocidad___
bit 5
bit 6
bit 7










por ejemplo 231h = 11100111b
significa:
tamaño de palabra: 8bits
2 bits de stop
paridad nula
9600 velocidad de transmision.

86h = 10000110b
significa:
7 bits tamaño de palabra
2 bits de parada
paridad nula
1200 valocidad de transferencia.
_______________________________________
--------------------
para inicializar el puerto ----
_______________________________________

en ensamblador:

mov ah, 00h ; funcion de la interrupcion para configurar el puerto
mov al, 231h ; nuestra configuracion
mov dx, 3F8h ; la direccion del COM1 por ejemplo
int 14h

en C:
/* turbo c utiliza la funcion int86 declarada la siguiente forma:
int int86(int intno, union REGS *inregs, union REGS *outregs); */

void inicializar_puerto(int puerto, unsigned char code)
{
union REGS r;

r.x.dx=puerto;
r.h.ah=0;
r.h.al=code;
int86(0x14,&r,&r);
}
_______________________________________
----------------------para enviar un caracter ------
_______________________________________
ensamblador:

mov dx,3f8 ;puerto; p.e. el puerto COM1
mov al,car ;caracter a inviar
mov ah,01h ;funcion para enviar caracter
int 14h

en C:

void envia_caracter(int puerto, char car)
{
union REGS r;

r.x.dx=puerto;
r.h.al=car;
r.h.ah=0x01
int86(0x14,&r,&r);
}

________________________________________
-----------------------para recibir un caracter -------
________________________________________

ensamblador:

mov dx, 3F8
mov ah, 02h
int 14h ; en al se encuentra el caracter leido

en C:

int lee_puerto(int puerto)
{
union REGS r;

r.x.dx=puerto;
r.h.ah=0x02
int86(0x14,&r,&r);

return(r.h.al);
}

se puede controlar si hubo error en la lectura (tambien en la escritura) añadiendo:
if (r.h.ah & 128) printf("Error de lectura. \n");

_____________________________________
------------------------para chequear estado-----
_____________________________________

ensamblador:

mov dx, puerto
mov ah,03h
int 14h

en C:

int chequea_puerto(int puerto)
{
union REGS r;

r.x.dx=puerto;
r.h.ah=3
int86(0x14,&r,&r);

return(r.x.ax);
}

obs:
AH estado del puero serie
AL datos
si alguno de los bits del registro de estado esta en 1 ha ocurrido un error.

por eso podemos comprabar errores de la siguiente forma:
if(!(chequea_puerto(3F8)&256)) printf("Error\n");

__________________________
greeting to all asm coders---------
__________________________

java - Pequeño tutorial.

___________________________________________________

Tutorial de JAVA V1.0 by invX! (c) 2008
___________________________________________________
1. Para generar documentacion

___________________________________________________

javadoc archivo.java

se pueden utilizar etiquetas como:
@autor
@version
@see
@since
@deprecated
@throws
@param
@return

Ejemplo:
/** Esto es un comentario para probar ej javadoc
* ese texto aparecera en el archivo HTML generado
* Realizado en diciembre 2008
*
*@autor Fernando Martinez
*@version 1.0
*/
public class prueba1 {
//este comentario no aparecera en javadoc

/* este metodo contiene el codigo ejecutable de la clase
*
* @param args Lista de argumentos de la linea de comandos
* @return void
*/

public static void main(String args[]){
system.out.println("prigrama de prueba!");
}
}

2. La sentencia import
___________________________________________________
sintaxis: import paquete.subpaquete.subsubpaquete...clase

ejemplo: import java.util.Date

3. Variables
___________________________________________________
las variables tienen duracion, porque solo tienen como ambito el bloque en las que se les crea
ej:
{
x=12
}
system.out.println(x) //error

3.1 Tipos de variables
__________________________________________
boolean 2byte true,false
byte 1 -128 a 127
short 2 -32768 a 32767
int 4 -2.147.482.648 a 2.147.482.649
long 8 -9E18 a 9E18
double 8 -1.79E308 a 1.79E308
float 4 -3.4E38 a 3.4E38
char 2 Unicode

3.2 Conversion entre tipos (casting)
_______________________________________
int i=12
byte b=(byte)i

4. Operadores
_____________________________________________
operadores de bit
& and
| or
~ not
^ xor
<<>> dezplazameinto a la derecha
<<<>>> dezplazamiento a la derecha con relleno de ceros

4.1 Operador ?
________________________________________
sintaxis:
expresionlogica?valorsiverdadero:valorsifalso;

ejemplo:
paga=(edad>18)?6000:3000;

5. La clase Math
________________________________________

import java.lang.Math;

esta clase posee metodos muy interesantes para calculos complejos

operador:
double ceil(double x) redondea x al entero mayor siguiente
double floor(double x) redondea x al entero menor siguiente
int round(double x) redondea x de la forma clasica
double rind(double x) redondea x igual al anterior pero devuelve un double
double random() numero aleatorio
tiponumero abs(tiponumero x) devuelve valor absoluto
tiponumero min(tiponumero x, tiponumero y) devuelve el menor valor de x o y
tiponumero max(tiponumero x, tiponumero y) devuelve el mayor valor de x o y
double sqrt(double x) calcula la raiz cuadrada
double pow(double x, double y) calcucla x^y
double exp(double x) calcula eX
double log(double x) calcula el logaritmo neperiano de x
double acos(double x) calcula el arco coseno de x

6. Arrays y matrices
________________________________________

7. Clase String
________________________________________

8. La parte importante
_________________________
Programacion orientada a objetos
__________________________________
Un objeto esta formado por propiedades
antes de usar un objeto es necesario definir su clase, de esta forma se pueden crear objetos de la misma clase

Propiedades de la POO
_________________________
Encapsulameinto:en una clase se tienen variables, funcionesque fuera de la clase no se definen
ocultacion: se pueden definir como privada y solo es utilizada por la clase
Polimorfismo: se pueden definir une metodo varias veces dentro de una clase
Herencia: las propiedades de una clase se puede heredar a otra

Concepto
__________________________
Un objeto posee una identidad, un estado y un comportamiento

Clases
_________________________
son las planillas para hacer objetos.
se debe definir,
sus atributos: la parte publica y la privada
sus metodos: las funciones o acciones que puede realizar
codigo de inicializacion: constructor de clases
otras clases: se pueden definir dentro otras clases

Formato general para crear una clase es:
_________________________________________
[acceso] class nombreclasse{
[acceso] [static] tipo atributo;
..

[acceso] [static] tipo metodo(lista de argumentos){
..codigo del metodo
}
}

ejemplo:

class satle{
double radio;
void girar(int velocidad){
.. //definicion del metodo

}
void parar(){
..
}
}

en notacion UML



_______
Objetos_______________________________________________
se puede acceder a una propiedad
objeto.atributo

o a un metodo
objeto.metodo(argumentodelmetodo)

con la herencia se puede crear nuevas clases y heredar los metodos
de la primera a la segunda.

Creacion de objetos de la clase
___________________________________________________
consta de dos pasos:
1. Declaracion
ej:

satle satle222;

se declara enl objeto satle222 como objeto de tipo satle
se supone que arriba ya definimos la clas satle.

2. Creacion
luego para utilizar un objeto hay que crearlo de verdad utilizando el operador new.

satle222 = new satle();

Especificacion de acceso
__________________________________________
hay tres posibilidades:
1. public: el metodo es visible para cualquier tipo de clase
2. protected: visible para estas y las heredadas.
3. private: solo visible para la clase que lo utiliza

si no se utiliza ninguna es frendly: visible para toas las clases del mismo pauete.

Creacion de clases
_________________________________________
Cuando se crea una clase se debe especificar:
1. tipo de propiedad (int, double, etc)
2. el tipo de acceso (public, private, etc)

Para definir las propìedades, variables y datos de la clase:
_________________________________________
ejemplo:

class Persona{
public String nombre; // se puede accesder desde cualquier clase
private int contraseña; // solo se puede acceder desde la clase persona

protected String direccion; //acceden a esta propiedad esta clase y sus descendientes.
}

Para definir los metodos del objeto:
_____________________________________
ejemplo:

public class vehiculo {
/**Funcion principal */

int ruedas;
private double velocidad=0;
String nombre;

/**Aumenta la velocidad*/
public void acelerar(double cantidad){
velocidad+=cantidad;
}

/**Disminuye velocidad*/
public void frenar(double cantidad){
velocidad-=cantidad;
}

/**devuelve velocidad*/
public double obtenerVelocidad(){
return velocidad;
}
}

public static void main(String args[]){
vehiculo miCoche = new vehiculo();
miCoche.acelerar(12);
miCoche.frenar(5);
System.out.println(miCoche.obtenerVelocidad());
} //imprime 7 en pantalla.

otro ejemplo:

public class matematicas{
public double factorial(int n){
double resultado;
for(resultado=n;n>1;n--) resultado*=n;
return resultado;
}

public static void main(String args[]){
matematicas m1=new matematicas(); //m1 es el objeto definido como la clase matematicas!! y tiene el metodo factorial!!
double x=m1.factorial(25);// asi se llama al metodo
}

Paso de parametros por valor y por referencia
_________________________________________________

Paso por valor: se hace una copia de esos datos, la variable que se pasa como argumento no se modifica por el metodo.
Paso por referencia: se recibe la direccion fisica de la variable, y por lo tanto se modifica su valor. no es una copia de la variable.

los tipos int,
char,
double,
byte,
boolean,
float,
short
String ---> Todos estos tipos se pasan por valor.

los objetos,
arrays, --> ytodos estos se pasan por referencia.

Ejemplo1:

class prueba{
public void metodo(int entero){
entero=18;
}
public static void main(String args[]){
int x=24;
prueba miprueba= new prueba();// creo el objeto miprueba de la clase prueba
miprueba.metodo(x);
system.out.println(x);// imprime 24

Ejemplo2:

class prueba{
public void metodo(int[] entero){
entero[0]=18;
}

public static void main(String[] args){
int x[]={24,24};
prueba miprueba = new prueba();
miprueba.metodo(x);
system.out.prientln(x[0]);// imprime 18, porque se modifico el array.

Devolucion de valores
_____________________
class fabricamatriz{
public int[] obtenarray(){
int[] array={1,2,3,4};
return array;
}
}

public class returnarray{
public static void main(String args[]){
fabricamatriz fab=new fabricamatriz();
int nuevoarray[]=fab.obtenarray();
}
}

X. Sobrecarga de metodos (polimorfismo)
________________________________________
Significa crear variantes de un mismo metodo.
ejemplo:

class matematica{
public double suma(double x, double y){
return x+y;
}

public double suma(double x, double y, double z){
return x+y+z;
}

public double suma(double[] array){
double total=0;
for(int i=0, i0){
fact*=n;
}
return fact;
}
}

public class app{
public static void main(String[] args){
System.out.println(calculadora.factorial(5));//imprime 120
}
}

observacion: los metodos Static no utilizan posicion de memoria mas de la que ocupa la clase,
sinembargo los metodos dinamicos utilizan memoria por cada metodo que se defina, se recomienda definir
metodos staticos cuando se tenga atributos que no cambian.

V. El metodo main
_________________
Es un metodo estatico que indica que la clase es ejecutable desde consola. Asi de simple.

public static void main(String[] args){
...instrucciones...
}

se ejecuta asi:
java claseconMain hola quetal

entonces recibe como argumento un array, de modo que;
args[0]="hola"
args[1]="quetal"

S. Destruccion de Objetos
________________________
En C++ se utilizaba la instruccion delete para liberar la memoria que ocupaba un objeto.
En Java exite un garbage collector que detecta automaticamente cuando un objeto hace tiempo que no se utiliza.
Se lo invoca desde el codigo para que trabaje cuando se lea la instruccion:
System.gc()

El metodo system.gc() llama a todos los finalize() pendientes.

El metodo finalize() es un llamado antes de hacer el eliminado final.
un uso comun es en referencias ciculares.
El metodo finalize() es de tipo de acceso protected y es heredado por todas las clases
ya que esta en la clase raiz Object.

ejemplo1:

class uno{
dos d;
uno(){ // constructor
d=new dos();
}
}

class dos{
uno u;
dos(){ // constructor
u=new uno();
}
}

public class app{
public static void main(String[] args){
uno prueba = new uno(); // referencia circular
prueba = null; // no se libera bien la memoria
}
}

Al crearse el objeto de la clase uno se creara el objeto de la clase dos, que al mismo tiempo creara el objeto de la clase uno.
por consiguiente no se libera bien la memoria.

solucion:

class uno{
dos d;
uno(){
d=new dos();
}

protected void finalize(){
d=null; // se elimina d y se espera a la ejecucion de System.gc()
}
}
class dos{
uno u;
dos(){
u= new uno();
}

protected void finalize(){
u=null; // se elimina u y se espera a la ejecucion de System.gc()
}
}

public static void main(String[] args){
uno prueba = new uno();
}

F. Reutilizacion de Clases. Herencia
____________________________________
Esto facilito la tarea de programadores al crearse clases estandares.
para heredar se utiliza la palabra clave extends;

class subclase extends superclase{
...
}

Por defecto se heredan los metodos y las propiedades protected y public,
no se heredan los private!.
Si se utiliza un metodo con el mismo nombre que la super clase no se hereda,
se dice que se esta redefiniendo el metodo!
ejemplo:

class vehiculo{
public int velocidad;
public int ruedas;
public void parar(){
velocidad = 0;
}
public void acelerar(int a){
velocidad+=a;
}

class coche extends vehiculo{
public int ruedas=4;
public int gasolina;
public void cargarcombustible(int litros){
gasolina+=litros;
}
}
...........................................................
public class app{
public static void main(String[] args){
coche micoche = new coche();
coche.acelerar(30); // metodo heredado
coche.cargarcombustible(12);

A. Anulacion de metodos. Palabra clave Super.
_____________________________________________
Cuando se crean metodos con el mismo nombre, tipo y argumentos que la superclase
Se dice que anula el metodo o sobreescribe.

Para referirse al metodo de la Superclase se utiliza la palabra clave Super.
ejemplo:

public class vehiculo{
double velocidad;

public void acelerar(int cantidad){
velocidad+=cantidad;
}
}

public class coche extends vehiculo{
double gasolina;
public void acelerar(int cantidad){
super.acelerar(cantidad); // llama al metodo de la super clase
gasolina*=0.9; // viste como disminuye la gasoline 10% con cada aceleracion?
}

C. Casting de Clases
____________________
Sirve para preparar un objeto para su asignacion.
Solo se puede hacer un casting si el objeto originalmente era de ese tipo.

micoche=(coche)vehiculo1; // se convierte el objeto vehiculo1 de la clase vehiculo a un objetos de la subclase coche, que es una subclase de la super clase Vehiculo.

Si vehiculo es la super clase y coche es la subclase se puede hacer el casting.

Lo siguiente si se permite, ya que micoche es un objeto de la clase coche que hereda las propiedades de la superclase vehiculo.

vehiculo1=micoche;

I. Instanceof
_____________
Se usa para comprobar si un objeto es de una determinada clase, and that's all.
Sintaxis:
objeto instnaceof clase

obs: tambien devuelve verdadero como miembro de su superclase.

K. Clases abstractas
____________________
Son clases bases para herencia.
No se puede crear objetos de clases abstractas.

Son clases teoricas que no se desean implementar del todo. sencillamente se indican para que el desarollador
que desee crear la subclase heredada de la clase abstracta este obligado a sobreescribir el metodo.
Ejemplo:

abstract class vehiculo{
public int velocidad=0;
abstract public void acelera();
public void para(){velocidad=0;}
}

class coche extends vehiculo{
public void acelera(){ //viste como se sobrescribio el metodo abstracto heredado en coche
velcidad+=5;
}
}

public class prueba{
public static void main(String[] args){
coche coche1 = new coche();
coche1.acelera();
System.out.println(coche1.velocidad);
coche1.para();
System.out.println(coche1.velocidad);
}
}

F. Final
________
Se coloca antes de un metodo para que no se sobrescriba en una subclase.
Se coloca antes de una clase para que no tenga descendencia.
Se coloca antes de una propiedad para que pase a ser una constante, ya no se puede modificar desde ningun lado.

C. clases internas
__________________
Se hace esto para crear objetos internos dentro de una clase.
De este modo los objetos pasan a ser atributos de la clase. Asi de simple es.

ejemplo:

public class coche{
public int velocidad;
public Motor motor;
public coche(int cil){
motor=new Motor(cil);
velocidad=0;
}

public class Motor{ //clase interna, de modo que el objeto motor de la clase Motor es un atributo de la clase coche!!
public int cilindrada;
public Motor(int cil){
cilindrada=cil;
}
}

Obs: la clase interna solo se puede crear objetos dentro de la clase contenedora.

I. Interfaces
_____________