|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Meta
1
« en: Martes 11 de Junio de 2019, 21:38 »
Buenas: En la consola C# me aparece el asunto a la hora de leer el último email del, pero no aparece el mensaje. Quiero que me aparezca en pantalla tanto el asunto y el mensaje. No se su código del pop3 para leer mensajes, si me envian un mensaje nuevo y luego ejecuto el programa, me apecere así sin mensaje porque no se como programarlo. Ver zoom. Código C#: using System; using System.Collections.Generic; using OpenPop.Pop3;
namespace Recibir_email_Consola_01 { class Program { static void Main(string[] args) { // Título de la ventana. Console.Title = "Recibir e-mail con Consola C#";
// Tamaño ventana consola. Console.WindowWidth = 80; // X. Ancho. Console.WindowHeight = 40; // Y. Alto.
// Cursor invisible. Console.CursorVisible = false;
// Título del programa. Console.WriteLine("\t\t----------------------------------------"); Console.WriteLine("\t\t\tRecibir Correo Electrónico"); Console.WriteLine("\t\t----------------------------------------");
try { ConnectPop3 oC = new ConnectPop3();
List<OpenPop.Mime.Message> lstMessages = oC.GetMessages();
if (lstMessages != null) {
foreach (var oMessage in lstMessages) { Console.WriteLine("ASUNTO: " + oMessage.Headers.Subject + "\n"); // Asunto. //Console.WriteLine(); Console.WriteLine("MENSAJE: "); // Aquí se pone código del mensaje que no se cual es. } } Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas. Console.WriteLine(); Console.WriteLine("FIN DEL PROGRAMA."); Console.ReadKey(); // Pulse cualquier tecla para salir. }
catch (Exception ex) { Console.WriteLine(ex); } } }
public class ConnectPop3 { public string email = "celltium@gmail.com"; public string contraseña = "g0923490xgh0945g450Xj4025g"; // Ficticio. public int puerto = 995; public bool usarSLL = true; public string Hostame = "pop.gmail.com";
public List<OpenPop.Mime.Message> GetMessages() { using (Pop3Client oClient = new Pop3Client()) { oClient.Connect(Hostame, puerto, usarSLL); oClient.Authenticate(email, contraseña);
int messageCount = oClient.GetMessageCount(); List<OpenPop.Mime.Message> lstMessages = new List<OpenPop.Mime.Message>(messageCount);
for (int i = messageCount; i > 0; i--) { lstMessages.Add(oClient.GetMessage(i)); }
return lstMessages; } } } } Lo que si le logrado es poner email, fecha y algunos más datos, precisamente el que más quiero que es el mensaje no se como hacerlo o como buscarlo. ¿Alguna idea? Saludos.
2
« en: Martes 5 de Febrero de 2019, 20:36 »
Hola: Usando el modo consola de C# 2017. Hice un mini menú de opciones gracias a los compañeros de este foro. Puedo seleccionar con los botones arriba y abajo las opciones. Se usa formato de la pantalla 16x2. En este caso lo que hace es seleccionar opciones en el menú, pero no hace nada más. Las opciones en el menú se llama. Menú ▲▼ 1. UNO 2. DOS 3. TRES 4. CUATRO 5. ESC - SALIR Por ejemplo, seleccionamos el 3. TRES. Pulse Enter y justo una línea de abajo dice: 3. TRES ▲▼ Después de pulsar Enter, se sustituye el texto 3. TRES ▲▼ por otro abajo. Alum. ●●●●●●○○ En el cual podemos hacer cosas, estando ya en la subopción indicado arriba. Si pulsamos Enter, de Alum. ●●●●●●○○ vuelve al menú principal en este caso donde estaba, llamdo 3. TRES ▲▼. Si etás todavía en Alum. ●●●●●●○○, puedes pulsar la teclas arriba y abajo para mover las opciones indicadas de esta manera mostrada abajo. Son 8 puntos. Lo que hace es alumbrar el brillo de una luz, el brillo más débil es de esta manera. Alum. ○○○○○○○○. El brillo máximo es de otra manera, Alum. ●●●●●●●●. Con las flechas del teclado arriba y abajo, seleccionamos un punto, de 1 hasta 8. La mitad sería así: Alum. ●●●●○○○○. Pulsa enter, guarda la configuración en una variable para que la recuerde y sale al menú principal. Espero que se entienda lo que quiero hacer. Dejo el código base, solo selecciona opciones pero al pulsar Enter tiene que hacer al menos el 3. TRES. Código consola C#: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace Menu_consola_09_cs { class Program { static void Main(string[] args) { // Título de la ventana. Console.Title = "Menú de opciones";
// Tamaño ventana consola. // X anchura. Console.WindowWidth = 16;
// Y altura. Console.WindowHeight = 2;
// Oculto el cursor. Console.CursorVisible = false;
// Contador de teclas y navegador. int contador = 0;
// Capturar tecla para luego validar. ConsoleKey tecla;
do {
//****************************************************************** // Dibujo el menú. // Rellenar fondo verde. Console.BackgroundColor = ConsoleColor.Green;
// Letras negras. Console.ForegroundColor = ConsoleColor.Black; // Limpiar pantalla. Console.Clear();
if (contador == 0) { Console.SetCursorPosition(0, 0); Console.Write("MENú ▲▼"); }
if (contador == 1) { Console.SetCursorPosition(0, 0); Console.WriteLine("1. UNO"); }
if (contador == 2) { Console.SetCursorPosition(0, 0); Console.WriteLine("2. DOS"); }
if (contador == 3) { Console.SetCursorPosition(0, 0); Console.WriteLine("3. TRES"); }
if (contador == 4) { Console.SetCursorPosition(0, 0); Console.WriteLine("4. CUATRO"); }
if (contador == 5) { Console.SetCursorPosition(0, 0); Console.WriteLine("5. ESC = SALIR"); }
// Fin de pintar el menú. //******************************************************************
// Leer tecla ingresada por el usuario. tecla = Console.ReadKey(true).Key;
//validar el tipo de tecla if (tecla == ConsoleKey.DownArrow) { contador += 1; }
if (tecla == ConsoleKey.UpArrow) { contador -= 1; }
// Si está en la última opción, salta a la primera. if (contador > 5) { contador = 0; }
// Si está en la primera posición, salta a la última. if (contador < 0) { contador = 5; }
// Uso la tecla escape como salida. } while (tecla != ConsoleKey.Escape); } } }
Captura: Una cosa a tener en cuenta. En vez de aparecer MENú ▲▼ En pantalla, lo primero que debe aparecer en el programa en HOLA. Si pulsas Enter, entonces ya aparece el Menú. Si pulsa salir apareces en HOLA. Luego hacer lo demás con el 3. TRES indicado arriba. ¿Alguna ayuda? Saludos.
3
« en: Domingo 5 de Abril de 2015, 20:40 »
Hola a todos y a todas: Gracias a muchos sitios he logrado enviar comandos o datos al puerto serie para que Arduino lo entienda, ya se puede apagar y encender un Led. En estos momentos me falta lograr que desde el puerto serie con VB 6 me lleguen los datos y se muestre en el componente Text como indica esta imagen. Su código es hecho hasta el momento es: Private Sub Form_Load() With Me.ComboBoxCOM Set WMIObjectSet = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_PnPEntity") For Each wmiobject In WMIObjectSet If InStr(wmiobject.Name, "COM") Then ComboBoxCOM.AddItem wmiobject.Name Dim nCom% ' Buscamos el número del puerto: nCom = InStrRev(wmiobject.Name, "COM", , vbTextCompare) nCom = Val(Mid(wmiobject.Name, nCom + 3)) ComboBoxCOM.ItemData(ComboBoxCOM.NewIndex) = nCom End If Next Set WMIObjectSet = Nothing If ComboBoxCOM.ListCount = 0 Then MsgBox "No se encontraron puertos COM." Exit Sub End If
' Para seleccionar el primer puerto encontrado: ComboBoxCOM.ListIndex = 0 End With End Sub
Private Sub ComboBoxCOM_Click() ' Configurar MSComm With Me.ComboBoxCOM MSComm_Puerto_Serie.CommPort = ComboBoxCOM.ItemData(ComboBoxCOM.ListIndex) End With End Sub
' Si ya has seleccionado un puerto en el comboBox ' Si pulsas conectar abre el puerto y si no lo cierra. Private Sub Command_CONECTAR_Click() If Not MSComm_Puerto_Serie.PortOpen Then MSComm_Puerto_Serie.PortOpen = True ' Abrir puerto serie. Command_CONECTAR.Caption = "DESCONECTAR" ' Mostrar texto en el botón. ComboBoxCOM.Enabled = False Command_Led_8_ON.Enabled = True ' Activar botón ON. Command_Led_8_OFF.Enabled = True ' Activar botón OFF. Else MSComm_Puerto_Serie.PortOpen = False ' Cerrar puerto serie. Command_CONECTAR.Caption = "CONECTAR" ' Mostrar texto en el botón. ComboBoxCOM.Enabled = True Command_Led_8_ON.Enabled = False ' Desactivar botón ON. Command_Led_8_OFF.Enabled = False ' Desactivar botón OFF. End If End Sub
Private Sub Command_Led_8_OFF_Click() ' Envía este cadena de carácter por el puerto serie. MSComm_Puerto_Serie.Output = "Led_8_OFF" End Sub
Private Sub Command_Led_8_ON_Click() ' Envía este cadena de carácter por el puerto serie. MSComm_Puerto_Serie.Output = "Led_8_ON" End Sub
Aquí dejo un enlace temporal de un tutorial en pdf para novatos de como hacer su propia interfaz con VB 6. https://www.dropbox.com/s/4s6txlfkit9d1xv/Tutorial%20VB6%20puertoCOM.pdf?dl=0Como dije antes, necesito una ayudita sobre recibir datos desde el puerto serie para completas este tutorial. ¿Estás dispuesto a ayudar? Un cordial saludo. PD: Tengo otro con VB .net, C++, C# y Java de lo mismo en PDF, el que lo quiera lo hace saber y pongo unenlace temporal aquí mismo.PD2: Dejo claro que el tutorial está aún incompelto, sobre todo me falta la parte de la electrónica y en tutorial de VB 6 será colocado dentro del mismo pdf que los demás lenguajes.
4
« en: Lunes 30 de Marzo de 2015, 17:22 »
Hola: Te dejo el tutorial del 2008 portado a pdf con todo detalle, eso si, contola Visual C# y el PIC. http://electronica-pic.blogspot.com.es/2008/11/electrnica-pic.htmlEn este mismo momento, estoy haciendo un tutorial controlando Arduino con Visual C#/C++/VB .net / VB 6 y Java. El que lo quiera, me puede enviar su correo electrónico y le envío lo que tengo hecho hasta el momento, a pesar que tiene ejemplos completos, aún me falta la parte de Arduino. Puedes valorar el tutorial en PDF y me cuentan que opina para mejorarlo. Saludos.
5
« en: Lunes 30 de Marzo de 2015, 17:14 »
Hola: Estoy creando un menú sobre puerto serie. Debe aparecer el menú principal al iniciar el programa. Si lograse ejecutarlo, pulsa la tecla número 2 del teclado y tienes que configurar el puerto serie como quieras o lo dejas predeterminado. Código y errores. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
using System.IO.Ports; // No olvidar. using System.Threading;
namespace PuertoCOM_CS_PRUEBA { class Program { static void Main(string[] args) { new Program().Modal(); }
void Modal() { for (; ; ) { Console.Title = "Interfaz puerto serie - v 0.04"; // Mostrar título en la ventana de la consola.
string Menu_Principal = @" ╔═════════════════════════════════════════════════════════════════════════════╗ ║ MENÚ PRINCIPAL ║ ╠═════════════════════════════════════════════════════════════════════════════╣ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ 0. Salir. ║ ║ 1. Interfaz. ║ ║ 2. Configuración. ║ ║ 3. Guardar configuración. ║ ║ 4. Información desde el dispositivo. ║ ║ 5. Ayuda. ║ ║ 6. Acerca de ... ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ╚═════════════════════════════════════════════════════════════════════════════╝ "; Console.CursorVisible = false; // Ocultar cursor. Console.Clear(); // Limpiar pantalla. Console.Write(Menu_Principal); // Mostrar menú principal. ConsoleKeyInfo switchExpression = Console.ReadKey(); // Detactar una tecla del teclado.
switch (switchExpression.KeyChar) { case '0': return;
case '1': new Interfaz().Modal_Interfaz(); break;
case '2': new Configuracion().Modal_Configuracion(); break;
case '3': new Guardar_Configuracion().Modal_Guardar_Configuracion(); break;
case '4': new Informacion().Modal_Informacion(); break;
case '5': new Ayuda().Modal_Ayuda(); break;
case '6': new Acerca_de().Modal_Acerca_de(); break;
default: Console.WriteLine("No has elegido ninguna opción. Vuelva teclear del 0 al 68."); break; } }
} }
class Interfaz { public void Modal_Interfaz() { for (; ; ) { Console.Clear(); Console.WriteLine("===== INTERFAZ ====="); Console.WriteLine("Pulse 0 para vovler al menú principal.");
ConsoleKeyInfo op = Console.ReadKey();
switch (op.KeyChar) { case '0': return;
default: break; } } } }
class Configuracion { public void Modal_Configuracion() { for (; ; ) { Console.Clear(); Console.WriteLine(@" ┌─────────────────────────────────────────────────────────────────────────────┐ │ CONFIGURACIÓN │ └─────────────────────────────────────────────────────────────────────────────┘
"); //Console.WriteLine("Pulse 0 para vovler al menú principal.");
Puerto_serie();
ConsoleKeyInfo op = Console.ReadKey();
switch (op.KeyChar) { case '0': return;
default: break; } } }
private void Puerto_serie() { bool _continue; SerialPort _serialPort;
string name; string message;
StringComparer stringComparer = StringComparer.OrdinalIgnoreCase; Thread readThread = new Thread(Read);
// Crear un nuevo objeto SerialPort con la configuración predeterminada. _serialPort = new SerialPort();
// Permitir al usuario configurar las propiedades adecuadas. _serialPort.PortName = SetPortName(_serialPort.PortName); _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate); _serialPort.Parity = SetPortParity(_serialPort.Parity); _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits); _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits); _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);
// Establecer los tiempos de espera de lectura / escritura. _serialPort.ReadTimeout = 500; _serialPort.WriteTimeout = 500;
_serialPort.Open(); _continue = true; readThread.Start();
Console.Write("Name: "); name = Console.ReadLine();
Console.WriteLine("Type QUIT to exit");
while (_continue) { message = Console.ReadLine();
if (stringComparer.Equals("quit", message)) { _continue = false; } else { _serialPort.WriteLine( String.Format("<{0}>: {1}", name, message)); } }
readThread.Join(); _serialPort.Close(); }
public static void Read() { while (_continue) { try { string message = _serialPort.ReadLine(); Console.WriteLine(message); } catch (TimeoutException) { } } }
// Mostrar los valores de puerto y pedirle al usuario entrar en un puerto. public static string SetPortName(string defaultPortName) { string portName;
Console.WriteLine("Puertos disponibles:"); foreach (string s in SerialPort.GetPortNames()) { Console.WriteLine(" {0}", s); }
Console.Write("Introducir el valor de puerto COM (Predeterminado: {0}): ", defaultPortName); portName = Console.ReadLine();
if (portName == "" || !(portName.ToLower()).StartsWith("com")) { portName = defaultPortName; } return portName; } // Visualizar valores BaudRate y pedirle al usuario introducir un valor. public static int SetPortBaudRate(int defaultPortBaudRate) { string baudRate;
Console.Write("Velocidad en baudios(predeterminado:{0}): ", defaultPortBaudRate); baudRate = Console.ReadLine();
if (baudRate == "") { baudRate = defaultPortBaudRate.ToString(); }
return int.Parse(baudRate); }
// Valores PortParity pantalla y pedirle al usuario que introduzca un valor. public static Parity SetPortParity(Parity defaultPortParity) { string parity;
Console.WriteLine("Opciones de paridad disponibles:"); foreach (string s in Enum.GetNames(typeof(Parity))) { Console.WriteLine(" {0}", s); }
Console.Write("Introducir el valor de paridad (Predeterminado: {0}):", defaultPortParity.ToString(), true); parity = Console.ReadLine();
if (parity == "") { parity = defaultPortParity.ToString(); }
return (Parity)Enum.Parse(typeof(Parity), parity, true); } // Mostrar DataBits valores y pedirle al usuario que introduzca un valor. public static int SetPortDataBits(int defaultPortDataBits) { string dataBits;
Console.Write("Introducir el valor de DataBits (Predeterminado: {0}): ", defaultPortDataBits); dataBits = Console.ReadLine();
if (dataBits == "") { dataBits = defaultPortDataBits.ToString(); }
return int.Parse(dataBits.ToUpperInvariant()); }
// Mostrar StopBits valores y pedirle al usuario que introduzca un valor. public static StopBits SetPortStopBits(StopBits defaultPortStopBits) { string stopBits;
Console.WriteLine("Opciones StopBits disponibles:"); foreach (string s in Enum.GetNames(typeof(StopBits))) { Console.WriteLine(" {0}", s); }
Console.Write("Introducir el valor de StopBits (None (Ninguno) no es compatible y \n" + "plantea una ArgumentOutOfRangeException. \n (Default: {0}):", defaultPortStopBits.ToString()); stopBits = Console.ReadLine();
if (stopBits == "") { stopBits = defaultPortStopBits.ToString(); }
return (StopBits)Enum.Parse(typeof(StopBits), stopBits, true); } public static Handshake SetPortHandshake(Handshake defaultPortHandshake) { string handshake;
Console.WriteLine("Opciones de toma de contacto disponibles:"); foreach (string s in Enum.GetNames(typeof(Handshake))) { Console.WriteLine(" {0}", s); }
Console.Write("Terminar valor Handshake (Predeterminado: {0}):", defaultPortHandshake.ToString()); handshake = Console.ReadLine();
if (handshake == "") { handshake = defaultPortHandshake.ToString(); }
return (Handshake)Enum.Parse(typeof(Handshake), handshake, true); } }
class Guardar_Configuracion { public void Modal_Guardar_Configuracion() { for (; ; ) { Console.Clear(); Console.WriteLine("===== GUARDAR CONFIGURACIÓN ====="); Console.WriteLine("Pulse 0 para vovler al menú principal.");
ConsoleKeyInfo op = Console.ReadKey();
switch (op.KeyChar) { case '0': return;
default: break; } } } }
class Informacion { public void Modal_Informacion() { for (; ; ) { Console.Clear(); Console.WriteLine("===== INFORMACION ====="); Console.WriteLine("Pulse 0 para vovler al menú principal.");
ConsoleKeyInfo op = Console.ReadKey();
switch (op.KeyChar) { case '0': return;
default: break; } } } }
class Ayuda { public void Modal_Ayuda() { for (; ; ) { Console.Clear(); Console.WriteLine("===== AYUDA ====="); Console.WriteLine("Pulse 0 para vovler al menú principal.");
ConsoleKeyInfo op = Console.ReadKey();
switch (op.KeyChar) { case '0': return;
default: break; } } } }
class Acerca_de { public void Modal_Acerca_de() { for (; ; ) { Console.Clear(); Console.WriteLine("===== ACERCA DE ... ====="); Console.WriteLine("Pulse 0 para vovler al menú principal.");
ConsoleKeyInfo op = Console.ReadKey();
switch (op.KeyChar) { case '0': return;
default: break; } } } } }
Error 1 El nombre '_continue' no existe en el contexto actual C:\Users\Usuario\Documents\Visual Studio 2013\Projects\PuertoCOM_CS_PRUEBA\PuertoCOM_CS_PRUEBA\Program.cs 212 20 PuertoCOM_CS_PRUEBA Error 2 El nombre '_serialPort' no existe en el contexto actual C:\Users\Meta\Documents\Visual Studio 2013\Projects\PuertoCOM_CS_PRUEBA\PuertoCOM_CS_PRUEBA\Program.cs 216 38 PuertoCOM_CS_PRUEBA Un cordial saludo.
6
« en: Lunes 17 de Marzo de 2014, 21:19 »
Hola: Si abro una aplicación, con Cheat Engine puede buscar las variables de un juego. Son 3, se llaman Vida, Balas y Maná. Al menos quiero centrarme en la variable Vida, cuya dirección se puede ver abajo en "2. VIDA" ya encontrada. Usando el lenguaje C# en modo consola, preferiblemente con Windows Form, el más que les guste, quiero lograr leer esas variables de ese proceso y mostrarlo C# en tiempo real, es decir, si el juego tiene 100 Vidas, en tu aplicación C# debe aprecer también 100, si de repente tienes 95 en el juego o proceso, también debe aparecer 95 en tu aplicación. Hace un tiempo estuve con ello bajo C++ 2013 y que va, me pego media vida y encima creando dll. Al menos si alguien es capaz de enseñar como se hace realmente. O algún ejemplo si es posible y entendible. Saludo.
7
« en: Miércoles 9 de Febrero de 2011, 02:39 »
Hola:
Haciendo un ejemplo tonto cualquiera sea con el VB .net o el C# 2010 Express. Creo un botón con un mensaje. Dentro del Form agrego un label y un botón que al pulsarlo muestre Hola mundo por poner un ejemplo sencillo.
¿Hay alguna forma de examinar con cual lenguaje se ha programado ese ejecutable .exe?
Se que puedo cambiar los textos con un editor hexadecimal, también puedo cambiar la versión y nombre de los botones y versiones del programa, cosas así. No se si habrá programa ya hechos para modificar o entender que se ha hecho con ese .exe o al menos hacer un programa nosotros mismo muy sencillo para detectar abrir un .exe y que sepa de qué lenguaje es, otro ejemplo, poner una imagen en el centro de un form1, cosas así.
¿Es posible?
Saludo.
8
« en: Jueves 23 de Diciembre de 2010, 19:01 »
Hola:
Me han llamado algunos conocidos que dicen pagarme por hacerle un trabajo al PIC. Les comenté que depende de lo laborioso y majadero lo hago o no. Quieren que les de todo completo, los esquemas ya lo tienen ellos. Se me ocurre hacer una parte del código aprovechando la EEPROM interna que al usarlo una determinadas de veces el PIC quede bloqueado, hasta que no me paguen sabrán que la única forma es reprogramarlo. Ya me la han querido jugar.
La otra opción es buscarse la vida o ir a por otro siempre que no estén apurado.
Otra técnica que hay que hacer es si el PIC que me dan para programarlo no tiene EEPROM. Lo que puedo hacer es guardar un valor en la RAM, cuando haga una serie de funciones determinatas, por ejemplo, si haz pulsado el mismo botón 5 veces, el PIC se bloquea porque lo pongo a modo goto $, o le hago un desbordamiento de pila. Si te descuidas tienen un truco, que si pulsa Reset vuelve a empezar y les funciona. Lo bueno del 16F88 que puede desactivar el Reset y no les funcionará.
Si conocen alguna técnica más las pueden contar por aquí.
Felices fiestas 2010.
10
« en: Domingo 19 de Diciembre de 2010, 17:23 »
Hola: He estado mirando programas de este tipo como ic-prog y winpic800. Siento curiosidad como hacen para enviar un archivo a los PIC por puerto serie. Se enviar tramas de bytes y texto pero no logro que un archivo .hex de los PIC se meta dentro. Uso el TE20: Quiero hacer una interfaz sencilla, con tal de enviar el .hex y leerlo desde el TE20x. El código fuente que he hecho hasta ahora no me funciona. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; // No olvidar estos using. //http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/86149304-c26f-4dcf-b003-198a8879decf namespace RS232_a { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button_Abrir_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { textBox1.Text = openFileDialog1.FileName; } } private void button_Enviar_Click(object sender, EventArgs e) { serialPort1.Open(); byte[] mBuffer = Encoding.ASCII.GetBytes(textBox1.Text); serialPort1.Write(mBuffer, 0, mBuffer.Length); serialPort1.Close(); MessageBox.Show("Enviado."); } } }
Saludo.
11
« en: Sábado 18 de Diciembre de 2010, 14:32 »
Hola: Estoy pasando si es posible todos los ejercicios poco a poco del 16F84A al 16F88. Cuando acabe todos los subo con esquemas de Proteus incluidos. Precisamente no logro hacer funcionar el temporizador con el 16F88. Antes que nada, he modificado los tiempos que tenías del 16F84A como máximo 4:15 desde el LCD y ahora se puede hacer hasta 99:99. Te paso un adjunto de lo que he hecho hasta el momento. Funciona la parte cuando pulsa el botón modo, pones al menos 15 segundos y vuelves a poner modos, cuando quieres activar la cuenta atrás no se activa, a partir de ahí no te responde nada. He intentado por varios medios y he logrado lo que he logrado, hasta ahí no paso. DataSheet: PIC16F88 http://ww1.microchip.com/downloads/en/d ... 30487c.pdfDescarga: (Código fuente y esquema Proteus). https://sites.google.com/site/metaconta ... ects=0&d=1Felices fiestas 2010.
12
« en: Martes 7 de Diciembre de 2010, 07:33 »
A veces me he dado cuenta que BANKSEL no funciona o no es fiable al 100 % o simplemente no se usarlo bien. En esas cosas de cambiar bancos mejor usar macros.
13
« en: Jueves 28 de Octubre de 2010, 15:50 »
Hola: Viendo este ejercicio. Ver ejercicioNo se si he interpretado bien lo que me pide y siguiendo los ejemplos del PDF he modificado este código. cadena = raw_input('Escribe una frase: ') while cadena != '': cambios = 0 for i in range(1, len(cadena)): if cadena[i] == ' ' and cadena[i-1] != ' ': cambios = cambios + 1 if cadena[-1] == ' ': cambios = cambios - 1 palabras = cambios + 1 print 'Palabras:', palabras, 'palabras y', i, 'carácteres.' cadena = raw_input('Escribe una frase: ')
Su resultado es este. Escribe una frase: Vale más una imagen, que mil palabras. Palabras: 7 palabras y 38 carácteres. Escribe una frase: ¿Qué opinas?
14
« en: Lunes 25 de Octubre de 2010, 12:41 »
El ejercicio 129) por lo que parece se hace así: Num1 = 20 Num2 = 10 Aux1 = Num1 Aux2 = Num2 Rest = 1 mcd = 1 mcm = 1 while Aux2 != 0: Rest = Aux1 % Aux2 Aux1 = Aux2 Aux2 = Rest mcd = Aux1 mcm = Num1 * Num2 / mcd print mcm
Ahora el 130) como indica aquí. No me sale.
15
« en: Miércoles 20 de Octubre de 2010, 13:22 »
Hola: http://www.subeimagenes.com/img/129-130-4950.gifnum = int(raw_input('Agrega un número: ')) creo_que_es_primo = True divisor = 2 while divisor < num and creo_que_es_primo: if num % divisor == 0: creo_que_es_primo = False divisor += 1 if creo_que_es_primo: print 'El número', num, 'es primo' else: print 'El número', num, 'no es primo'
Hice algo de esto pero no se si tiene que ver. num = int(raw_input('Agrega un número: ')) num_2 = int(raw_input('Agrega otro número: ')) creo_que_es_primo = True divisor = 2 while divisor < num and creo_que_es_primo: if num % divisor == 0: creo_que_es_primo = False divisor += 1 if creo_que_es_primo: print 'El número', num, 'es primo' else: print 'El número', num, 'no es primo' creo_que_es_primo_2 = True divisor_2 = 1 while divisor_2 < num_2 and creo_que_es_primo_2: if num_2 % divisor_2 == 0: creo_que_es_primo_2 = False divisor_2 += 1 if creo_que_es_primo_2: print 'El número', num_2, 'es primo' else: print 'El número', num_2, 'no es primo' # Como dice que los divida, me imagino que se refiere a esto. n = num / num_2 print n
Estamos tratando del ejercicio sólo por ahora el 129. Aquí hay algo que no se si realmente viene al cuento. http://es.wikipedia.org/wiki/M%C3%A1xim ... An_divisorEstos ejercicios que me estoy aprendiendo y parecen interesantes lo he encontrado en esta guía de Python que puedes leer aquí. http://marmota.act.uji.es/mtp/pdf/python.pdfSaludo.
16
« en: Domingo 17 de Octubre de 2010, 08:29 »
Estoy haciendo un buen menú con Python pero no me sale. Cuando pulso la opción a) para introducir datos, me vuelve al menú principal, lo mismo para las demás opciones excepto la i) que es para finalizar programa es cuando se acaba y te preguntará este mensaje print 'Gracias por usar el programa.'. Hay solcuión para ello, cada vez que introduzco los datos de la opción b), el menú principal no vuelve, parece que el programa se ha acabado o se bloqueó. ¿Hay solución? from math import acos, pi, sqrt opcion = '' while opcion <= 'a' or opcion >= 'i': #while opcion in 'abcdefghi': print '''Selecciona una opción: a) Introducir el primer vector. b) Introducir el segundo vector. c) Calcular la suma. d) Calcular la diferencia. e) Calcular el producto escalar. f) Calcular el producto vectorial. g) Calcular el ángulo (en gastos) entre ellos. h) Calcular la longitud. i) Finalizar. ''' opcion = raw_input('Pulsa a, b, c, d, e, f, g, h o i, luego pulsa retorno de carro: ') # Primer vector. if opcion == 'a': x1 = float(raw_input('Introduce valor x1: ')) y1 = float(raw_input('Introduce valor y1: ')) z1 = float(raw_input('Introduce valor z1: ')) print 'Haz ingresado estos valores', x1, y1, z1, 'del primer vector.' # Segundo vector. elif opcion == 'b': x2 = float(raw_input('Introduce valor x2: ')) y2 = float(raw_input('Introduce valor y2: ')) z2 = float(raw_input('Introduce valor z2: ')) print 'Haz ingresado estos valores', x2, y2, z2, 'del segundo vector.' # Suma. elif opcion == 'c': suma = (x1 + x2, y1 + y2, z1 + z2) print suma # Diferencia. elif opcion == 'd': diferencia = (x1 - x2, y1 - y2, z1 - z2) print diferencia # Producto escalar. elif opcion == 'e': producto = (x1 * x2 + y1 * y2 + z1 * z2) print producto # Producto vectorial. elif opcion == 'f': vectorial = (y1 * z2 - z1 * y2, z1 * x2 - x1 * z2, x1 * y2 - y1 * x2) print vectorial # Ángulo. elif opcion == 'g': angulo = (180 / pi) * acos * (x1 * x2 + y1 * y2 + z1 * z2) / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2)) print angulo # Longitud. elif opcion == 'h': x = float(raw_input('Introduce valor x: ')) y = float(raw_input('Introduce valor y: ')) z = float(raw_input('Introduce valor z: ')) longitud = sqrt(x**2+y**2+z**2) print longitud elif opcion == 'i': print 'Gracias por usar el programa.' break else: print 'Puedes teclear estas siguientes opciones: a, b, c, d, e, f, g, h o i. Usted haz tecleado', opcion
17
« en: Martes 12 de Octubre de 2010, 23:29 »
Muchas gracias amigo.
18
« en: Lunes 11 de Octubre de 2010, 07:42 »
if (a/2)%3 == 0: _____return True else: _____return False Muchas gracias.
19
C/C++ / [Código Fuente] meta
« en: Lunes 4 de Octubre de 2010, 02:38 »
Puedes hacer un instalador para que coja las .dll necesarios y ponerlas en system o donde te lo pidan. Antes me pasaba eso hasta con Delphi.
Por cierto.
Buen trabajo.
20
« en: Lunes 4 de Octubre de 2010, 02:24 »
Hay un programa que se me resiste. un programa que calcule el desglose en billetes y monedas de una cantidad exacta de euros. Hay billetes de 500, 200, 100, 50, 20, 10 y 5 euros y monedas de 2 y 1 euros. Por ejemplo, si deseamos conocer el desglose de 434 euros, el programa mostrará por pantalla el siguiente resultado: 2 billetes de 200 euros. 1 billete de 20 euros. 1 billete de 10 euros. 2 monedas de 2 euros. (¿Que cómo se efectúa el desglose? Muy fácil. Empieza por calcular la división entera entre la cantidad y 500 (el valor de la mayor moneda): 434 entre 500 da 0, así que no hay billetes de 500 euros en el desglose; divide a continuación la cantidad 434 entre 200, cabe a 2 y sobran 34, así que en el desglose hay 2 billetes de 200 euros; dividimos a continuación 34 entre 100 y vemos que no hay ningún billete de 100 euros en el desglose (cabe a 0); como el resto de la última división es 34, pasamos a dividir 34 entre 20 y vemos que el desglose incluye un billete de 20 euros y aún nos faltan 14 euros por desglosar. . . )He guardado todos los billetes y moneda en cada variable. He intentado y sigo con ello usando los if-else con sus operadores ==, !=, <=, and, or, etc, etc, etc. Este tipo de ejercicio es mucho para mi. Aún así sigo para aprender aunque sea un tocho de código que haga y ustedes muy pequeño. Sigo experimentando pero necesito ideas. # Introducir datos a la variable. E = int(raw_input('Ingresar Capital: ')) # Variables Billetes. a = 500 b = 200 c = 100 d = 50 e = 20 f = 10 g = 5 # Variables Monedas. h = 2 i = 1 #R = (a / 500 != 0) or (b / 200 != 0) or (c / 100 != 0) or (d / 50 != 0) or (e / 20 != 0) or (f / 10 != 0) or (g / 5 != 0) or (h / 2 != 0) or (i / 1 != 0) #print R if (E / a) == 0: a1 = E print a1 if (a1 / b) == 0: a2 = a1 print a2 etc. print '%d billetes de 500 €uros.' % a1 print '%d billetes de 200 €uros.' % a2 print '%d billetes de 100 €uros.' % a3 print '%d billetes de 50 €uros.' % a4 print '%d billetes de 20 €uros.' % a5 print '%d billetes de 10 €uros.' % a6 print '%d billetes de 5 €uros.' % a7 print '%d monedas de 2 €uros.' % a8 print '%d monedas de 1 €uros.' % a9
21
C/C++ / [Código Fuente] Hola
« en: Sábado 2 de Octubre de 2010, 15:21 »
No me funciona el .exe para Windows 7 64 bits.
Mejor hacer las cosas con Visual Studio .net está por delante que Borland por eso lo avandoné y me metí con .net.
22
« en: Sábado 2 de Octubre de 2010, 14:38 »
Hola: ¿Cómo hago con Python 2.6, al introducir un número, determine si éste es el doble de un número impar. ? Debo poner esto para que me pida un número: a = raw_input(' Introduce un número par o impar: ')
(Ejemplo: 14 es el doble de 7, que es impar.) Saludo.
23
« en: Viernes 3 de Septiembre de 2010, 09:52 »
Hola: Quiero hacer la tabla de 6 bits y me parece el error de los 256 bits usados. ¿Hay alguna manera de resolverlo? Otra opción es usar una memoria EEPROM Externa como el 24LC256. ¿Valdrá la pena? ; ZONA DE DATOS ********************************************************************** TITLE "LCD Sensor PS2" SUBTITLE "Revisión 1.00" LIST P=16F886 INCLUDE <P16F886.INC> __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __CONFIG _CONFIG2, _WRT_OFF & _BOR21V CBLOCK 0x20 CONTADOR ENDC #DEFINE RESET_RC0 PORTC,0 #DEFINE EJECT_RC1 PORTC,1 #DEFINE OPEN_RC2 PORTC,2 #DEFINE CLOSE_RC3 PORTC,3 #DEFINE GREEN_RC4 PORTC,4 #DEFINE RED_RC5 PORTC,5 #DEFINE Auxiliar_6 PORTC,6 #DEFINE Auxiliar_7 PORTC,7 ; ZONA DE CÓDIGOS ******************************************************************** ORG 0 ; El programa comienza en la dirección 0. Inicio call LCD_Inicializa BANKSEL TRISC ; Banco 1. bsf RESET_RC0 ; Se configura como entradas. bsf EJECT_RC1 bsf OPEN_RC2 bsf CLOSE_RC3 bsf GREEN_RC4 bsf RED_RC5 bsf Auxiliar_6 bsf Auxiliar_7 BANKSEL PORTC ; Banco 0. clrw Principal movf PORTC,W ; Lee los sensores. andlw b'00111111' ; Máscara para quedarse con el valor de los sensores. addwf PCL,F ; Salta a la configuración adecuada. goto Configuracion0 ; 0 0 0 0 0 0 goto Configuracion1 ; 0 0 0 0 0 1 goto Configuracion2 ; 0 0 0 0 1 0 goto Configuracion3 ; 0 0 0 0 1 1 goto Configuracion4 ; 0 0 0 1 0 0 goto Configuracion5 ; 0 0 0 1 0 1 goto Configuracion6 ; 0 0 0 1 1 0 goto Configuracion7 ; 0 0 0 1 1 1 goto Configuracion8 ; 0 0 1 0 0 0 goto Configuracion9 ; 0 0 1 0 0 1 goto Configuracion10 ; 0 0 1 0 1 0 goto Configuracion11 ; 0 0 1 0 1 1 goto Configuracion12 ; 0 0 1 1 0 0 goto Configuracion13 ; 0 0 1 1 0 1 goto Configuracion14 ; 0 0 1 1 1 0 goto Configuracion15 ; 0 0 1 1 1 1 goto Configuracion16 ; 0 1 0 0 0 0 goto Configuracion17 ; 0 1 0 0 0 1 goto Configuracion18 ; 0 1 0 0 1 0 goto Configuracion19 ; 0 1 0 0 1 1 goto Configuracion20 ; 0 1 0 1 0 0 goto Configuracion21 ; 0 1 0 1 0 1 goto Configuracion22 ; 0 1 0 1 1 0 goto Configuracion23 ; 0 1 0 1 1 1 goto Configuracion24 ; 0 1 1 0 0 0 goto Configuracion25 ; 0 1 1 0 0 1 goto Configuracion26 ; 0 1 1 0 1 0 goto Configuracion27 ; 0 1 1 0 1 1 goto Configuracion28 ; 0 1 1 1 0 0 goto Configuracion29 ; 0 1 1 1 0 1 goto Configuracion30 ; 0 1 1 1 1 0 goto Configuracion31 ; 0 1 1 1 1 1 goto Configuracion32 goto Configuracion33 goto Configuracion34 goto Configuracion35 goto Configuracion36 goto Configuracion37 goto Configuracion38 goto Configuracion39 goto Configuracion40 goto Configuracion41 goto Configuracion42 goto Configuracion43 goto Configuracion44 goto Configuracion45 goto Configuracion46 goto Configuracion47 goto Configuracion48 goto Configuracion49 goto Configuracion50 goto Configuracion51 goto Configuracion52 goto Configuracion53 goto Configuracion54 goto Configuracion55 goto Configuracion56 goto Configuracion57 goto Configuracion58 goto Configuracion59 goto Configuracion60 goto Configuracion61 goto Configuracion62 goto Configuracion63 Configuracion0 goto ActivaSalida Configuracion1 goto ActivaSalida Configuracion2 goto ActivaSalida Configuracion3 goto ActivaSalida Configuracion4 goto ActivaSalida Configuracion5 goto ActivaSalida Configuracion6 goto ActivaSalida Configuracion7 goto ActivaSalida Configuracion8 goto ActivaSalida Configuracion9 goto ActivaSalida Configuracion10 goto ActivaSalida Configuracion11 goto ActivaSalida Configuracion12 goto ActivaSalida Configuracion13 goto ActivaSalida Configuracion14 goto ActivaSalida Configuracion15 goto ActivaSalida Configuracion16 goto ActivaSalida Configuracion17 goto ActivaSalida Configuracion18 goto ActivaSalida Configuracion19 goto ActivaSalida Configuracion20 goto ActivaSalida Configuracion21 goto ActivaSalida Configuracion22 goto ActivaSalida Configuracion23 goto ActivaSalida Configuracion24 goto ActivaSalida Configuracion25 goto ActivaSalida Configuracion26 goto ActivaSalida Configuracion27 goto ActivaSalida Configuracion28 goto ActivaSalida Configuracion29 goto ActivaSalida Configuracion30 goto ActivaSalida Configuracion31 goto ActivaSalida Configuracion32 goto ActivaSalida Configuracion33 goto ActivaSalida Configuracion34 goto ActivaSalida Configuracion35 goto ActivaSalida Configuracion36 goto ActivaSalida Configuracion37 goto ActivaSalida Configuracion38 goto ActivaSalida Configuracion39 goto ActivaSalida Configuracion40 goto ActivaSalida Configuracion41 goto ActivaSalida Configuracion42 goto ActivaSalida Configuracion43 goto ActivaSalida Configuracion44 goto ActivaSalida Configuracion45 goto ActivaSalida Configuracion46 goto ActivaSalida Configuracion47 goto ActivaSalida Configuracion48 goto ActivaSalida Configuracion49 goto ActivaSalida Configuracion50 goto ActivaSalida Configuracion51 goto ActivaSalida Configuracion52 goto ActivaSalida Configuracion53 goto ActivaSalida Configuracion54 goto ActivaSalida Configuracion55 goto ActivaSalida Configuracion56 goto ActivaSalida Configuracion57 goto ActivaSalida Configuracion58 goto ActivaSalida Configuracion59 goto ActivaSalida Configuracion60 goto ActivaSalida Configuracion61 goto ActivaSalida Configuracion62 goto ActivaSalida Configuracion63 goto ActivaSalida ActivaSalida ; movwf PORTB goto Principal ; ; "Mensajes" ---------------------------------------------------------------------------- ; Mensajes addwf PCL,F Mensaje1 DT " STAND BY ", 0x00 Mensaje2 DT "MEnsaje 1.", 0x00 Mensaje3 DT "Mensaje 2 ", 0x00 Mensaje4 DT "Mensaje 3 ", 0x00 Mensaje5 DT " Msm ", 0x00 Mensaje6 DT "Motor girando...", 0x00 Mensaje7 DT "marca", 0x00 Mensaje8 DT "Mensaje 4-2 ", 0x00 FinTabla ;MensajeAnuncio ; DT " anuncio--- ", 0x00 IF (FinTabla > 0xFF) ERROR "¡CUIDADO!: La tabla ha superado el tamaño de la página de los" MESSG "primeros 256 bytes de memoria ROM. NO funcionará correctamente." ENDIF INCLUDE <LCD_4BIT.INC> INCLUDE <LCD_MENS.INC> INCLUDE <RETARDOS.INC> END
Saludo.
24
« en: Jueves 10 de Junio de 2010, 01:36 »
Puede descargar el cósigo fuente del C# completo y funcionamuy bien. Se incluye la librería inpout32.dll.
25
« en: Jueves 10 de Junio de 2010, 00:17 »
Outport(0x3f8,55);
int valor=Input(0x3f8);No entiendo lo del 3F8. ¿No será 378? En cuanto al 55. ¿Qué significa el 55? El 378 es la dirección. Puse algo así: #include "StdAfx.h" #include "PortInterop.h" PortInterop::PortInterop(void) { Outport(0x378,55); int valor=Input(0x378); }
ME dice esto: ------ Operación Generar iniciada: proyecto: Puerto Paralelo cpp, configuración: Debug Win32 ------ PortInterop.cpp PortInterop.cpp(6): error C3861: 'Outport': no se encontró el identificador PortInterop.cpp(8): error C3861: 'Input': no se encontró el identificador ========== Generar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ========== En C#, al hacer doble click en el botón, podemos ver el código fuente que es este: private void button_D0_ON_Click(object sender, EventArgs e) { D0 = 1; opciones(); }
#region Opciones. public void opciones() { int value = 0; if (D0 == 1) { value += (int)Math.Pow(2, 0); LoadNewPict_D0(); } else LoadOldPict_D0(); value += 0; if (D1 == 1) { value += (int)Math.Pow(2, 1); LoadNewPict_D1(); } else LoadOldPict_D1(); value += 0; if (D2 == 1) { value += (int)Math.Pow(2, 2); LoadNewPict_D2(); } else LoadOldPict_D2(); value += 0; if (D3 == 1) { value += (int)Math.Pow(2, 3); LoadNewPict_D3(); } else LoadOldPict_D3(); value += 0; if (D4 == 1) { value += (int)Math.Pow(2, 4); LoadNewPict_D4(); } else LoadOldPict_D4(); value += 0; if (D5 == 1) { value += (int)Math.Pow(2, 5); LoadNewPict_D5(); } else LoadOldPict_D5(); value += 0; if (D6 == 1) { value += (int)Math.Pow(2, 6); LoadNewPict_D6(); } else LoadOldPict_D6(); value += 0; if (D7 == 1) { value += (int)Math.Pow(2, 7); LoadNewPict_D7(); } else LoadOldPict_D7(); value += 0; try { Puerto_paralelo.PortInterop.Output(adress, value); } catch (DllNotFoundException) { Alerta_1(); } } #endregion
EDITO: Estoy viendo el Test2.c y me sale esto: /**************************************************/ /*** ***/ /*** Test2.c -- test interface to inpout32.dll ***/ /*** ( http://www.logix4u.net/inpout32.htm ) ***/ /*** ***/ /*** Copyright (C) 2005, Douglas Beattie Jr. ***/ /*** ***/ /*** ***/ /*** http://www.hytherion.com/beattidp/ ***/ /*** ***/ /**************************************************/ /* Last Update: 2006.05.14 */ /*******************************************************/ /* */ /* Builds with Borland's Command-line C Compiler */ /* (free for public download from Borland.com, at */ /* http://www.borland.com/bcppbuilder/freecompiler ) */ /* */ /* Compile with: */ /* */ /* BCC32 -IC:BORLANDBCC55INCLUDE TEST2.C */ /* */ /* */ /* Be sure to change PPORT_BASE (Port Base address) */ /* accordingly if your LPT port is addressed */ /* elsewhere. */ /* */ /*******************************************************/ #include #include #include /* Definitions in the build of inpout32.dll are: */ /* short _stdcall Inp32(short PortAddress); */ /* void _stdcall Out32(short PortAddress, short data); */ /* prototype (function typedef) for DLL function Inp32: */ typedef short (_stdcall *inpfuncPtr)(short portaddr); typedef void (_stdcall *oupfuncPtr)(short portaddr, short datum); #define PPORT_BASE 0x378 // Prototypes for Test functions void test_read8(void); void test_write(void); void test_write_datum(short datum); /* After successful initialization, these 2 variables will contain function pointers. */ inpfuncPtr inp32fp; oupfuncPtr oup32fp; /* Wrapper functions for the function pointers - call these functions to perform I/O. */ short Inp32 (short portaddr) { return (inp32fp)(portaddr); } void Out32 (short portaddr, short datum) { (oup32fp)(portaddr,datum); } int main(void) { HINSTANCE hLib; short x; int i; /* Load the library */ hLib = LoadLibrary("inpout32.dll"); if (hLib == NULL) { fprintf(stderr,"LoadLibrary Failed.n"); return -1; } /* get the address of the function */ inp32fp = (inpfuncPtr) GetProcAddress(hLib, "Inp32"); if (inp32fp == NULL) { fprintf(stderr,"GetProcAddress for Inp32 Failed.n"); return -1; } oup32fp = (oupfuncPtr) GetProcAddress(hLib, "Out32"); if (oup32fp == NULL) { fprintf(stderr,"GetProcAddress for Oup32 Failed.n"); return -1; } /*******************************************************/ /** IF WE REACHED HERE, INITIALIZED SUCCESSFUL ******/ /*******************************************************/ /* now test the functions */ /***** Read 8 bytes at I/O base address */ test_read8(); /***** Write 0x75 to data register and verify */ test_write(); /***** One more time, different value */ test_write_datum(0xAA); /* finished - unload library and exit */ FreeLibrary(hLib); return 0; } /* TEST: Read inputs of 8 registers from PORT_BASE address */ void test_read8(void) { short x; int i; /* Try to read 0x378..0x37F, LPT1: */ for (i=PPORT_BASE; (i<(PPORT_BASE+8)); i++) { x = Inp32(i); printf("Port read (%04X)= %04Xn",i,x); } } /* TEST: Write constant 0x77 to PORT_BASE (Data register) */ void test_write(void) { short x; int i; /***** Write the data register */ i=PPORT_BASE; x=0x75; /***** Write the data register */ Out32(i,x); printf("Port write to 0x%X, datum=0x%2Xn" ,i ,x); /***** And read back to verify */ x = Inp32(i); printf("Port read (%04X)= %04Xn",i,x); /***** Set all bits high */ x=0xFF; Out32(i,x); /***** Now, set bi-directional and read again */ Out32(PPORT_BASE+2,0x20); // Activate bi-directional x = Inp32(i); printf("Set Input, read (%04X)= %04Xn",i,x); Out32(PPORT_BASE+2,0x00); // Set Output-only again x = Inp32(i); printf("Reset Ouput, read (%04X)= %04Xn",i,x); } /* TEST: Write data from parameter */ void test_write_datum(short datum) { short x; int i; i=PPORT_BASE; x = datum; /***** Write the data register */ Out32(i,x); printf("Port write to 0x%X, datum=0x%2Xn" ,i ,x); /***** And read back to verify */ x = Inp32(i); printf("Port read (%04X)= %04Xn",i,x); }
Voy a investigar el enlace a ver que tal. Recuerda que uso el Visual C++ 2010.
|
|
|