elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [17] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ... 66
161  Programación / .NET (C#, VB.NET, ASP) / Calcular porcentaje en: 21 Agosto 2017, 12:50 pm
Hola:

Hice esta aplicación para enviar datos a EEPROM tipo 24LCxx por I2C con Arduino. Tabajando con C#, ya puedo enviar los datos al puerto serie. Puede contar los bytes enviados. El problema, que estoy machacando la cabeza que no hay manera de hacer fucnionar en la barra del progreso que me cuenta el "label_Por_ciento" del 0 % al 100 %.



Ya puedeo envair datos y cancelarlo.
Código
  1.        private void TestDoEvents()
  2.        {
  3.            byte[] archivo = File.ReadAllBytes(textBox_ubicacion_archivo.Text); // Carga el archivo en el array.
  4.  
  5.            progressBar_barrra_progreso.Maximum = archivo.Length; // Hasta donde llegue el tamaño del archivo.
  6.  
  7.            for (int i = 0; i <= archivo.GetUpperBound(0); i++)
  8.            {
  9.                serialPort1.Write(archivo, i, 1);
  10.  
  11.                progressBar_barrra_progreso.Value = i;
  12.  
  13.                label_Bytes_transmitidos.Text = i.ToString() + " Bytes.";
  14.  
  15.                Application.DoEvents();
  16.                if (alto == true)
  17.                {
  18.                    alto = false;
  19.                    break; // TODO: might not be correct. Was : Exit For
  20.                }
  21.            }
  22.            button_Cancelar.Text = "Arranque";
  23.        }

Botón.
Código
  1.        private void button_Cancelar_Click(object sender, EventArgs e)
  2.        {
  3.            if (button_Cancelar.Text == "Arranque")
  4.            {
  5.                button_Cancelar.Text = "Cancelar";
  6.                TestDoEvents();
  7.                progressBar_barrra_progreso.Value = 0; // Resetear progressBar a 0.
  8.                label_Bytes_transmitidos.Text = "0";
  9.            }
  10.            else
  11.            {
  12.                if (alto == true)
  13.                {
  14.                    alto = false;
  15.                }
  16.                else
  17.                {
  18.                    alto = true;
  19.                    button_Cancelar.Text = "Arranque";
  20.                }
  21.            }
  22.        }

¿Alguna idea?

Saludos.
162  Programación / Java / Encontrar error en el código en: 18 Agosto 2017, 01:48 am
Hola:

Uso Eclipse oxigeny. En el JFrame puse en el formulario un JButton y un JTextArea. Mi idea es que si pulsas el botón "Mostrar", siga en el JTextArea el mensaje: Hola mundo.



Pulso dos veces el botón Mostrar y me lleva alcódigo.
Código:
				// Variable tipo String.
String variable = "Hola mundo.";

// Mostramos el contenido de la variable en el JTextArea.
textArea.append(variable);

La palabra textArea que es el nombre del JTextArea marca error. No lo detecta. El error indicado es este:
Description   Resource   Path   Location   Type
textArea cannot be resolved   Prueba01.java   /Proyectazo/src/ejercicios   line 53   Java Problem



Código completo:
Código:
package ejercicios;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Prueba01 extends JFrame {

private JPanel contentPane;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Prueba01 frame = new Prueba01();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public Prueba01() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

JButton btnMostrar = new JButton("Mostrar");
btnMostrar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

// Variable tipo String.
String variable = "Hola mundo.";

// Mostramos el contenido de la variable en el JTextArea.
textArea.append(variable);
}
});
btnMostrar.setBounds(165, 11, 89, 23);
contentPane.add(btnMostrar);

JTextArea textArea = new JTextArea();
textArea.setBounds(10, 55, 414, 195);
contentPane.add(textArea);
}

}

¿Alguna idea?

Saludos.
163  Programación / Programación General / ¿Qué compilador usas? en: 17 Agosto 2017, 05:14 am
Hola:

¿Qué compilador usas para programar en C/C++ bajo Windows?

Los más que veo son:
Visual Studio Community 2017.
Code::Blocks.
C++ Builder de Embarcadero.
KDevelop.

Saludos.
164  Programación / Java / Transformar C# en Java en: 16 Agosto 2017, 17:15 pm
Hola:

Tengo este código en C# y quiero hacer lo mismo en Java modo consola. Lo que hace es introducir 16 números o dígitos binarios, es decir, solo puedes introducir 1 y 0 hasta 16, pulsa enter y muestra los resultados en hexadecimal.

Código
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace Binario_cs
  5. {
  6.    class Program
  7.    {
  8.        static void Main(string[] args)
  9.        {
  10.            // Título de la ventana.
  11.            Console.Title = "Binaro a ensamblador de PIC16F84A - C#";
  12.  
  13.            // Muestra texto en pantalla pidiendo que introduzca los datos en binario.
  14.            Console.Write("Introduzca 16 números binarios: ");
  15.  
  16.            String binario = Console.ReadLine();
  17.  
  18.            Console.WriteLine();
  19.  
  20.            if (binario.Count(x => (x != '0') & (x != '1')) == 0 & (binario.Length == 16))
  21.            {
  22.                int NumDec = Convert.ToInt32(binario, 2);
  23.                string NumHex = String.Format("0x{0:X4}", NumDec);
  24.                Console.WriteLine("Binario = " + binario);
  25.                Console.WriteLine("Decimal = " + NumDec.ToString());
  26.                Console.WriteLine("Hexadecimal = " + NumHex);
  27.            }
  28.            else
  29.            {
  30.                Console.WriteLine("Número incorrecto");
  31.            }
  32.            Console.ReadKey();
  33.        }
  34.    }
  35. }

Ni pajonera idea sobre Java, esoty con Eclipse y NetBeans.
¿Alguna idea?

Salu2.
165  Informática / Electrónica / [TUTORIAL] Arduino Consola y puerto serie en: 15 Agosto 2017, 12:11 pm


Tutorial Arduino Consola y puerto serie. Interfaz creado con diversos lenguajes como C#, C++ CLR y VB .net bajo Visual Studio Community que puedes controlar el puerto serie a Arduino encendiendo y apagando un Led, manejar el LCD y recibes mensajes hacia el ordenador o PC.



En este apartado mostramos el código fuente en C#, en el PDF se encuentra C#, C++ CLR y VB .net.

Código C#:
Código:
using System;
using System.IO.Ports;
using System.Text;

namespace Arduino_Consola_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Arduino Consola C#";

            // Tamaño ventana consola.
            Console.WindowWidth = 55; // X. Ancho.
            Console.WindowHeight = 18; // Y. Alto.

            // Cree un nuevo objeto SerialPort con la configuración predeterminada.
            SerialPort Puerto_serie = new SerialPort("COM4");

            Puerto_serie.BaudRate = 115200;
            Puerto_serie.Parity = Parity.None;
            Puerto_serie.StopBits = StopBits.One;
            Puerto_serie.DataBits = 8;
            Puerto_serie.Handshake = Handshake.None;
            Puerto_serie.RtsEnable = true;

            // Establecer los tiempos de espera de lectura / escritura.
            Puerto_serie.ReadTimeout = 500; // Milisegundos.
            Puerto_serie.WriteTimeout = 500;

            // Detecta cualquier dato recibido.
            Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

            Puerto_serie.Open(); // Abrir puerto.

            ConsoleKey tecla;
            Console.WriteLine("Pulse tecla 1 para encender y 2 para apagar:");

            do
            {
                tecla = Console.ReadKey(true).Key; // Espera pulsación de teclas.

                switch (tecla)
                {
                    case ConsoleKey.D1: // Tecla 1 del teclado estandar.
                    case ConsoleKey.NumPad1: // Tecla 1 del número del pad.
                        byte[] miBuffer1 = Encoding.ASCII.GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
                        Puerto_serie.Write(miBuffer1, 0, miBuffer1.Length); // Envía los datos del buffer todo su contenido.
                        Console.WriteLine("Comando \"Luz_ON\" enviado."); // Muestra en pantalla comandos enviado.
                        break;

                    case ConsoleKey.D2:
                    case ConsoleKey.NumPad2:
                        byte[] miBuffer2 = Encoding.ASCII.GetBytes("Luz_OFF");
                        Puerto_serie.Write(miBuffer2, 0, miBuffer2.Length);
                        Console.WriteLine("Comando \"Luz_OFF\" enviado.");
                        break;

                    default:
                        Console.WriteLine("Tecla el 1, el 2 y Escape para salir.");
                        break;
                }
            } while (tecla != ConsoleKey.Escape); // Pulsa Escape para salir del menú.

            Console.WriteLine("Presione cualquier tecla para terminar...");
            Console.WriteLine();
            Console.ReadKey(); // Espera pulsar una tecla cualquiera.
            Puerto_serie.Close(); // Cierra el puerto serie.
        }

        // Detecta cualquier dato entrante.
        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string entradaDatos = sp.ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
            Console.WriteLine("Dato recibido desde Arduino: " + entradaDatos); // Muestra en pantalla los datos recibidos.
        }
    }
}

Código C# Avanzado:
Código:
using System;
using System.IO;
using System.IO.Ports;
using System.Text;
using System.Speech.Recognition; // No olvidar. Micro.
using System.Speech.Synthesis; // No olvidar. Altavoz.

namespace Arduino_Consola_Color_Voz_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            string COM = "";

            // Título de la ventana.
            Console.Title = "Arduino Consola color y voz C#";

            // Tamaño ventana consola.
            Console.WindowWidth = 55; // X. Ancho.
            Console.WindowHeight = 18; // Y. Alto.

            SerialPort Puerto_serie;

            // Crear un nuevo objeto SerialPort con la configuración predeterminada.
            Puerto_serie = new SerialPort();

            // Configuración.
            Console.Write(@"
Introduzca un número para seleccionar puerto COM.
Por ejemplo el 4, sería COM4.

Puerto: ");
            COM = Console.ReadLine(); // Escribir el número del puerto.
            Console.Clear();

            Puerto_serie.PortName = "COM" + COM; // Número del puerto serie.


            Puerto_serie.BaudRate = 115200; // Baudios.
            Puerto_serie.Parity = Parity.None; // Paridad.
            Puerto_serie.DataBits = 8; // Bits de datos.
            Puerto_serie.StopBits = StopBits.Two; // Bits de parada.
            Puerto_serie.Handshake = Handshake.None; // Control de flujo.

            // Establecer la lectura / escritura de los tiempos de espera.
            Puerto_serie.ReadTimeout = 500;
            Puerto_serie.WriteTimeout = 500;

            try
            {
                Puerto_serie.Open(); // Abrir el puerto serie.
            }

            catch (IOException)
            {
                Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
                Console.CursorVisible = false;
                Console.SetCursorPosition(16, 6);
                Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe
                o no lo encuentra.");
                Console.ReadKey();   // Pulse cualquier tecla.
                Environment.Exit(1); // Salir de la aplicación.
            }



            // Detecta cualquier dato recibido.
            Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

            ConsoleKey tecla;
            Console.WriteLine("Pulse tecla 1 para encender, 2 para apagar y \n" +
                "Escape para salir. \n" +
                "--------------------------------------------------------------\n");

            do
            {
                tecla = Console.ReadKey(true).Key; // Espera pulsación de teclas.
                                                   // Inicializar una nueva instancia de SpeechSynthesizer.
                using (SpeechSynthesizer altavoz = new SpeechSynthesizer())
                {
                    // Configure la salida de audio.
                    altavoz.SetOutputToDefaultAudioDevice();

                    // Velocidad de la voz.
                    altavoz.Rate = -2; // Valores entre -10 a 10.

                    // Volumen de la voz.
                    altavoz.Volume = 100; // Valores entre 0 y 100.

                    switch (tecla)
                    {
                        case ConsoleKey.D1: // Tecla 1 del teclado estandar.
                        case ConsoleKey.NumPad1: // Tecla 1 del número del pad.
                            byte[] miBuffer1 = Encoding.ASCII.GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
                            Puerto_serie.Write(miBuffer1, 0, miBuffer1.Length); // Envía los datos del buffer todo su contenido.
                            Console.ForegroundColor = ConsoleColor.Gray;
                            Console.Write("Comando"); // Muestra en pantalla comandos enviado.
                            Console.ForegroundColor = ConsoleColor.Green;
                            Console.Write(" \"Luz_ON\" ");
                            Console.ForegroundColor = ConsoleColor.Gray;
                            Console.WriteLine("enviado.");
                            Console.ForegroundColor = ConsoleColor.Gray;
                            altavoz.Speak("Luz encendida.");
                            break;

                        case ConsoleKey.D2:
                        case ConsoleKey.NumPad2:
                            byte[] miBuffer2 = Encoding.ASCII.GetBytes("Luz_OFF");
                            Puerto_serie.Write(miBuffer2, 0, miBuffer2.Length);
                            Console.ForegroundColor = ConsoleColor.Gray;
                            Console.Write("Comando"); // Muestra en pantalla comandos enviado.
                            Console.ForegroundColor = ConsoleColor.Green;
                            Console.Write(" \"Luz_OFF\" ");
                            Console.ForegroundColor = ConsoleColor.Gray;
                            Console.WriteLine("enviado.");
                            Console.ForegroundColor = ConsoleColor.Gray;
                            altavoz.Speak("Luz apagada.");
                            break;

                        case ConsoleKey.Escape:
                            Console.WriteLine("Saliendo...");
                            altavoz.Speak("Saliendo.");
                            break;

                        default:
                            Console.WriteLine("Tecla el 1, el 2 y Escape para salir.");                         
                            break;
                    }
                }
            } while (tecla != ConsoleKey.Escape); // Pulsa Escape para salir del menú.

            Console.ForegroundColor = ConsoleColor.Yellow;

            Console.WriteLine();
            Console.WriteLine("╔═════════════════════════════════════════════════════╗");
            Console.WriteLine("║ Electrónica PIC                 metaconta@gmail.com ║");
            Console.WriteLine("║                                                     ║");
            Console.WriteLine("║               Ángel Acaymo M. G.                    ║");
            Console.WriteLine("╚═════════════════════════════════════════════════════╝");
            Console.WriteLine();

            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("Pulse cualquier tecla para salir...");
            Console.WriteLine();
            Console.ReadKey(); // Espera pulsar una tecla cualquiera.
            Puerto_serie.Close(); // Cierra el puerto serie.
        }

        // Detecta cualquier dato entrante.
        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string entradaDatos = sp.ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.Write("Dato recibido desde Arduino: "); // Muestra en pantalla los datos recibidos.
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(entradaDatos + "\n");
            Console.ForegroundColor = ConsoleColor.Gray;
        }

        // Maneje el evento SpeechRecognized.
        static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            Console.WriteLine("Texto reconocido: " + e.Result.Text);

            string palabras = e.Result.Text;
        }
    }
}



Código de Aruino:
Código:
// ----- Electrónica PIC -----
//
// Ejercicio 2.
//
// Encendido y apagado del Led 13 mediante puerto serie con pantalla.
// Es lo mismo que el Ejercicoi 1, pero usando el LCD Keypad Shield.

#include

// Inicializa la librería con sus pines indicados.
// RS, RW, Enable, D4, D5, D6, D7.
LiquidCrystal lcd(8, NULL, 9, 4, 5, 6, 7);
// LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// Pin 10 para saber que es luz de fondo.
const byte LuzFondo = 10;

const byte Led = 13;   // Declaramos la variable pin del Led.
char caracter;
String comando;

void setup()
{
  pinMode(Led, OUTPUT);  // Inicializa el pin del LED como salida:
  Serial.begin(115200);     // Puerto serie 115200 baudios.
  lcd.begin(16, 2);         // Formato de pantalla.
  lcd.clear();      // Borra la pantalla y su posición superior izquierda.
  lcd.print("    Arduino     ");
  delay(1000);
}

void loop()
{
  /*
    Voy leyendo carácter a carácter lo que se recibe por el canal serie
    (mientras llegue algún dato allí), y los voy concatenando uno tras otro
    en una cadena. En la práctica, si usamos el "Serial monitor" el bucle while
    acabará cuando pulsamos Enter. El delay es conveniente para no saturar el
    canal serie y que la concatenación se haga de forma ordenada.
  */
  while (Serial.available() > 0)
  {
    caracter = Serial.read();
    comando.concat(caracter);
    delay(10);
  }

  /*
    Una vez ya tengo la cadena "acabada", compruebo su valor y hago que
    la placa Arduino reacciones según sea este. Aquí podríamos hacer lo
    que quisiéramos: si el comando es "tal", enciende un Led, si es cual,
    mueve un motor... y así.
  */

  // Si los carácteres es recibido y verdadero.
  if (comando.equals("Luz_ON") == true)
  {
    digitalWrite(Led, HIGH); // Enciende el Led 13.
    Serial.write("ON - Led encendido.");    // Envía este mensaje al PC.
    lcd.setCursor(0, 1);
    lcd.print("Luz ON.         "); // Mostrar en el LCD.
  }


  if (comando.equals("Luz_OFF") == true)
  {
    digitalWrite(Led, LOW); // Apaga el Led 13.
    Serial.write("OFF - Led apagado. ");  // Envía este mensaje al PC.
    lcd.setCursor(0, 1);
    lcd.print("Luz OFF.        "); // Mostrar en el LCD.
  }

  // Limpiamos la cadena para volver a recibir el siguiente comando.
  comando = "";
}



Ver vídeo.


Ver visor.

Ver PDF.

Un cordial saludo.
166  Programación / Java / DE binaro a ensamblador en: 14 Agosto 2017, 18:13 pm
Hola:

Mi idea es introducir en una consola números binarios que lo detecta y los traduce a código ensamblador.

Hoja de datos PIC16F84A:

Ver enlace.

Página 22. Organización de la memoria de datos:


El archivo p16f84a.inc que encuentras en el directorio en mi caso cuando instalé MPLAB X v4.00.
C:\Program Files (x86)\Microchip\MPLABX\v4.00\mpasmx

p16f84aa.inc:
Código:
        LIST

;==========================================================================
; Build date : May 17 2017
;  MPASM PIC16F84A processor include
;
;  (c) Copyright 1999-2017 Microchip Technology, All rights reserved
;==========================================================================

        NOLIST

;==========================================================================
;  This header file defines configurations, registers, and other useful
;  bits of information for the PIC16F84A microcontroller.  These names
;  are taken to match the data sheets as closely as possible.
;
;  Note that the processor must be selected before this file is included.
;  The processor may be selected the following ways:
;
;       1. Command line switch:
;               C:\MPASM MYFILE.ASM /PIC16F84A
;       2. LIST directive in the source file
;               LIST   P=PIC16F84A
;       3. Processor Type entry in the MPASM full-screen interface
;       4. Setting the processor in the MPLAB Project Dialog
;==========================================================================

;==========================================================================
;
;       Verify Processor
;
;==========================================================================
        IFNDEF __16F84A
           MESSG "Processor-header file mismatch.  Verify selected processor."
        ENDIF



;==========================================================================
;
;       Register Definitions
;
;==========================================================================

W                EQU  H'0000'
F                EQU  H'0001'

;----- Register Files -----------------------------------------------------

;-----Bank0------------------
INDF             EQU  H'0000'
TMR0             EQU  H'0001'
PCL              EQU  H'0002'
STATUS           EQU  H'0003'
FSR              EQU  H'0004'
PORTA            EQU  H'0005'
PORTB            EQU  H'0006'
EEDATA           EQU  H'0008'
EEADR            EQU  H'0009'
PCLATH           EQU  H'000A'
INTCON           EQU  H'000B'

;-----Bank1------------------
OPTION_REG       EQU  H'0081'
TRISA            EQU  H'0085'
TRISB            EQU  H'0086'
EECON1           EQU  H'0088'
EECON2           EQU  H'0089'

;----- STATUS Bits -----------------------------------------------------
C                EQU  H'0000'
DC               EQU  H'0001'
Z                EQU  H'0002'
NOT_PD           EQU  H'0003'
NOT_TO           EQU  H'0004'
IRP              EQU  H'0007'

RP0              EQU  H'0005'
RP1              EQU  H'0006'


;----- PORTA Bits -----------------------------------------------------
RA0              EQU  H'0000'
RA1              EQU  H'0001'
RA2              EQU  H'0002'
RA3              EQU  H'0003'
RA4              EQU  H'0004'


;----- PORTB Bits -----------------------------------------------------
RB0              EQU  H'0000'
RB1              EQU  H'0001'
RB2              EQU  H'0002'
RB3              EQU  H'0003'
RB4              EQU  H'0004'
RB5              EQU  H'0005'
RB6              EQU  H'0006'
RB7              EQU  H'0007'


;----- INTCON Bits -----------------------------------------------------
RBIF             EQU  H'0000'
INTF             EQU  H'0001'
T0IF             EQU  H'0002'
RBIE             EQU  H'0003'
INTE             EQU  H'0004'
T0IE             EQU  H'0005'
EEIE             EQU  H'0006'
GIE              EQU  H'0007'

TMR0IF           EQU  H'0002'
TMR0IE           EQU  H'0005'


;----- OPTION_REG Bits -----------------------------------------------------
PSA              EQU  H'0003'
T0SE             EQU  H'0004'
T0CS             EQU  H'0005'
INTEDG           EQU  H'0006'
NOT_RBPU         EQU  H'0007'

PS0              EQU  H'0000'
PS1              EQU  H'0001'
PS2              EQU  H'0002'


;----- TRISA Bits -----------------------------------------------------
TRISA0           EQU  H'0000'
TRISA1           EQU  H'0001'
TRISA2           EQU  H'0002'
TRISA3           EQU  H'0003'
TRISA4           EQU  H'0004'


;----- TRISB Bits -----------------------------------------------------
TRISB0           EQU  H'0000'
TRISB1           EQU  H'0001'
TRISB2           EQU  H'0002'
TRISB3           EQU  H'0003'
TRISB4           EQU  H'0004'
TRISB5           EQU  H'0005'
TRISB6           EQU  H'0006'
TRISB7           EQU  H'0007'


;----- EECON1 Bits -----------------------------------------------------
RD               EQU  H'0000'
WR               EQU  H'0001'
WREN             EQU  H'0002'
WRERR            EQU  H'0003'
EEIF             EQU  H'0004'




;==========================================================================
;
;       RAM Definitions
;
;==========================================================================
       __MAXRAM  H'00CF'
       __BADRAM  H'0007'
       __BADRAM  H'0050'-H'007F'
       __BADRAM  H'0087'

;==========================================================================
;
;       Configuration Bits
;
;   NAME            Address
;   CONFIG            2007h
;
;==========================================================================

; The following is an assignment of address values for all of the
; configuration registers for the purpose of table reads
_CONFIG         EQU  H'2007'

;----- CONFIG Options --------------------------------------------------
_FOSC_LP             EQU  H'3FFC'; LP oscillator
_LP_OSC              EQU  H'3FFC'; LP oscillator
_FOSC_XT             EQU  H'3FFD'; XT oscillator
_XT_OSC              EQU  H'3FFD'; XT oscillator
_FOSC_HS             EQU  H'3FFE'; HS oscillator
_HS_OSC              EQU  H'3FFE'; HS oscillator
_FOSC_EXTRC          EQU  H'3FFF'; RC oscillator
_RC_OSC              EQU  H'3FFF'; RC oscillator

_WDTE_OFF            EQU  H'3FFB'; WDT disabled
_WDT_OFF             EQU  H'3FFB'; WDT disabled
_WDTE_ON             EQU  H'3FFF'; WDT enabled
_WDT_ON              EQU  H'3FFF'; WDT enabled

_PWRTE_ON            EQU  H'3FF7'; Power-up Timer is enabled
_PWRTE_OFF           EQU  H'3FFF'; Power-up Timer is disabled

_CP_ON               EQU  H'000F'; All program memory is code protected
_CP_OFF              EQU  H'3FFF'; Code protection disabled

;----- DEVID Equates --------------------------------------------------
_DEVID1          EQU  H'2006'

;----- IDLOC Equates --------------------------------------------------
_IDLOC0          EQU  H'2000'
_IDLOC1          EQU  H'2001'
_IDLOC2          EQU  H'2002'
_IDLOC3          EQU  H'2003'

        LIST

Página 35. SISTEMA DE INSTRUCCIONES:


Para dejarlo mejor explicado, cogemos por ejemplo el registro MOVF que puedes ver en l apágin a36 de la hoja de datos del PIC16F84A.



Como podrás ver en la tabla, MOVF corresponde al 00 1000, o lo que es lo mismo, añadir dos ceros más al principio, 00001000.

El registro PORTB que muestra en el archivo p16f84a.inc:
Código:
;----- Register Files -----------------------------------------------------

;-----Bank0------------------
PORTB            EQU  H'0006'

Del hexadecimal H'0006' al binario es: 000 0110

Mirando el archivo p16f84a.inc de arriba:
Código:
;==========================================================================
;
;       Register Definitions
;
;==========================================================================

W                EQU  H'0000'
F                EQU  H'0001'

Elegimos la F que corresponde guardar en el propio registro, es un 1. La d es el lugar de destino, W que equivale a 0 se guarda en el registro de trabajo. La F que equivale a 1 se guarda en el registro.

En resumen:
MOVF PORTB, F

MOVF H'0006', H'0001'

00001000 1 000 0110



Pseudocódigo de nuestro compañero del foro explorer:
Código:
bits1413 = (0b11_0000_0000_0000 & opcode) >> 12;      // extraemos los dos bits superiores

switch (bits1413) {
   case 0b00:
      // en este caso, el tercer nibble es la operación, el bit 7 es la suboperación o destino, y el resto, el operando
      nibble3  = (0b00_1111_0000_0000 & opcode) >> 8;
      bit7     = (0b00_0000_1000_0000 & opcode) >> 7;
      operando = (0b00_0000_0111_1111 & opcode);

      switch (bit7) {
         case 0:
            reg = 'W';
            break;
         case 1;
            reg = 'F';
            break;
      }

      switch (nibble3) {
         
         case 0x0:
            switch (bit7) {
               case 1:
                  printf("MOVWF %x\n", operando);
                  break;
               case 0;
                  // aquí pueden ocurrir varios casos, según el primer nibble
                  nibble1 = (0b00_0000_0000_1111 & opcode);
                  switch (nibble1) {
                     case 0x0:
                        printf("NOP\n");
                        break;
                     case 0x4:
                        printf("CLRWDT\n");
                        break;
                     case 0x9:
                        printf("RETFIE\n");
                        break;
                     case 0x8:
                        printf("RETURN\n");
                        break;
                     case 0x3:
                        printf("SLEEP\n");
                        break;
                  }
                  break;
            }
            break;
         case 0x1:
            switch (bit7) {
               case 0:
                  printf("CLRW\n");
                  break;
               case 1;
                  printf("CLRF %x\n", operando);
                  break;
            }
            break;
         case 0x2:
            printf("SUBWF %x,%c\n", operando, reg);
            break;
         case 0x3:
            printf("DECF %x,%c\n", operando, reg);
            break;
         case 0x4:
            printf("IORWF %x,%c\n", operando, reg);
            break;
         case 0x5:
            printf("ANDWF %x,%c\n", operando, reg);
            break;
         case 0x6:
            printf("XORWF %x,%c\n", operando, reg);
            break;
         case 0x7:
            printf("ADDWF %x,%c\n", operando, reg);
            break;
         case 0x8:
            printf("MOVF %x,%c\n", operando, reg);
            break;
         case 0x9:
            printf("COMF %x,%c\n", operando, reg);
            break;
         case 0xA:
            printf("INCF %x,%c\n", operando, reg);
            break;
         case 0xB:
            printf("DECFSZ %x,%c\n", operando, reg);
            break;
         case 0xC:
            printf("RRF %x,%c\n", operando, reg);
            break;
         case 0xD:
            printf("RLF %x,%c\n", operando, reg);
            break;
         case 0xE:
            printf("SWAPF %x,%c\n", operando, reg);
            break;
         case 0xF:
            printf("INCFSZ %x,%c\n", operando, reg);
            break;
      }
      break;
   case 0b01:
      // en este caso, los bits 12 y 11 es la suboperación, los bits 8, 9 y 10 es el número de bit, y el resto, el operando
      subop    = (0b00_1100_0000_0000 & opcode) >> 10;
      bit      = (0b00_0011_1000_0000 & opcode) >> 7;
      operando = (0b00_0000_0111_1111 & opcode);

      switch (subop) {
         case 0x0;
            printf("BCF %x,%d\n", operando, bit);
            break;
         case 0x1;
            printf("BSF %x,%d\n", operando, bit);
            break;
         case 0x2;
            printf("BTFSC %x,%d\n", operando, bit);
            break;
         case 0x3;
            printf("BTFSS %x,%d\n", operando, bit);
            break;
      }
      break;
   case 0b10:
      // ver el bit 12. El resto es el operando
      bit12    = (0b00_1000_0000_0000 & opcode) >> 11;
      operando = (0b00_0111_1111_1111 & opcode);

      switch (bit12) {
         case 0:
            printf("CALL %x\n", operando);
            break;
         case 1:
            printf("GOTO %x\n", operando);
            break;
      }
      break;
   case 0b11:
      // el tercer nibble es la suboperación, y el resto, el operando
      nibble3  = (0b00_1111_0000_0000 & opcode) >> 8;
      operando = (0b00_0000_1111_1111 & opcode);
     
      switch (nibble3) {
         case 0b0000:
         case 0b0001:
         case 0b0010:
         case 0b0011:
            printf("MOVLW %x\n", operando);
            break;
         case 0b0100:
         case 0b0101:
         case 0b0110:
         case 0b0111:
            printf("RETLW %x\n", operando);
            break;
         case 0b1000:
            printf("IORLW %x\n", operando);
            break;
         case 0b1001:
            printf("ANDLW %x\n", operando);
            break;
         case 0b1010:
            printf("XORLW %x\n", operando);
            break;
         case 0b1100:
         case 0b1101:
            printf("SUBLW %x\n", operando);
            break;
         case 0b1110:
         case 0b1111:
            printf("ADDLW %x\n", operando);
            break;
      }
      break;
}

Yo y  un amigo lo valos a traducir por el momento a Java que es el que entiende mejor, luego haré en otros lenguajes para quien le guste, como dije arriba, C#, C++ CLR y VB .net.

Si no tienen algo claro, avisen.

Un cordial saludo.
167  Programación / Scripting / MS-DOS y puerto serie en: 6 Agosto 2017, 09:06 am
Hola:

Quiero enviar datos al puerto serie con el CMD de Windows, o el sustituto del cmd que es PowerShell, hacen lo mismo. Consiste en configurar dicho puerto que se hace así:

MODE COM1:9600,n,8,1

Y en la consola aparece esto:


Quiero crear un archivo .bat en el que solo tengo que pulsar la tecla 1 y envía esto: Luz_ON.

Si pulso la tecla 2, envía por el puerto serie Luz_OFF.

¿Existe la posibilidad de hacerlo?

Si es así. ¿Cómo se hace?

Saludos.
168  Programación / Programación C/C++ / No me funciona este código en: 31 Julio 2017, 18:38 pm
Hola:

Estoy probando y modificando este código en C++ con Visual Studio Community 2017. En el C++ CLR.
Sigo este enlace.
https://msdn.microsoft.com/es-es/library/system.io.ports.serialport.datareceived(v=vs.110).aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-2

El codigo nuevo que he indicado es este.
Código
  1. // Envio_y_recepcion_puerto_serie_cpp.cpp: archivo de proyecto principal.
  2.  
  3. #include "stdafx.h"
  4. #using <System.dll>
  5.  
  6. using namespace System;
  7. using namespace System::Text;
  8. using namespace System::IO::Ports;
  9.  
  10. // array<System::String ^> ^args
  11.  
  12. ref class PortDataReceived
  13. {
  14. public:
  15. static void Main()
  16. {
  17. // Título de la ventana.
  18. Console::Title = "Recibir datos desde Arduino con C++ CLR";
  19.  
  20. // Tamaño ventana consola.
  21. Console::WindowWidth = 55; // X. Ancho.
  22. Console::WindowHeight = 18; // Y. Alto.
  23.  
  24. SerialPort^ Puerto_serie = gcnew SerialPort("COM4");
  25.  
  26. Puerto_serie->BaudRate = 115200;
  27. Puerto_serie->Parity = Parity::None;
  28. Puerto_serie->StopBits = StopBits::One;
  29. Puerto_serie->DataBits = 8;
  30. Puerto_serie->Handshake = Handshake::None;
  31. Puerto_serie->RtsEnable = true;
  32.  
  33. Puerto_serie->DataReceived += gcnew SerialDataReceivedEventHandler(DataReceivedHandler);
  34.  
  35. Puerto_serie->Open();
  36.  
  37. ConsoleKey tecla;
  38. Console::WriteLine("Pulse tecla 1 para encender y 2 para apagar:");
  39.  
  40. do
  41. {
  42. tecla = Console::ReadKey(true).Key; // Espera pulsación de teclas.
  43.  
  44. switch (tecla)
  45. {
  46. case ConsoleKey::D1: // Tecla 1 del teclado estandar.
  47. case ConsoleKey::NumPad1: // Tecla 1 del número del pad.
  48.  
  49. array<Byte> ^miBuffer1 = Encoding::ASCII->GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
  50. Puerto_serie->Write(miBuffer1, 0, miBuffer1->Length); // Envía los datos del buffer todo su contenido.
  51. Console::WriteLine("Comando \"Luz_ON\" enviado."); // Muestra en pantalla comandos enviado.
  52. break;
  53.  
  54. case ConsoleKey::D2:
  55. case ConsoleKey::NumPad2:
  56. array<Byte> ^miBuffer2 = Encoding::ASCII->GetBytes("Luz_OFF");
  57. Puerto_serie->Write(miBuffer2, 0, miBuffer2->Length);
  58. Console::WriteLine("Comando \"Luz_OFF\" enviado.");
  59. break;
  60.  
  61. default:
  62. Console::WriteLine("Tecla el 1, el 2 y Escape para salir.");
  63. break;
  64. }
  65. } while (tecla != ConsoleKey::Escape); // Pulsa Escape para salir del menú.
  66.  
  67. Console::WriteLine("Presione cualquier tecla para terminar...");
  68. Console::WriteLine();
  69. Console::ReadKey(); // Espera pulsar una tecla cualquiera.
  70. Puerto_serie->Close(); // Cierra el puerto serie.
  71.  
  72. }
  73.   // Detecta cualquier dato entrante.
  74.  
  75. private:
  76. static void DataReceivedHandler(Object^ sender, SerialDataReceivedEventArgs^ e)
  77. {
  78. SerialPort^ sp = (SerialPort^)sender;
  79. String^ entradaDatos = sp->ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
  80. Console::WriteLine("Dato recibido desde Arduino: " + entradaDatos); // Muestra en pantalla los datos recibidos.;
  81. }
  82. };
  83.  
  84. int main(array<System::String ^> ^args)
  85. {
  86. PortDataReceived::Main();
  87. }

En apariencia no parece tener errores, al compilar me suelta estos 5 errrores.
Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Error   C1854   no se puede sobrescribir la información realizada durante la creación del encabezado precompilado en el archivo objeto: 'c:\users\meta\documents\visual studio 2017\projects\envio_y_recepcion_puerto_serie_cpp\envio_y_recepcion_puerto_serie_cpp\debug\stdafx.obj'   Envio_y_recepcion_puerto_serie_cpp   C:\Users\Meta\documents\visual studio 2017\Projects\Envio_y_recepcion_puerto_serie_cpp\Envio_y_recepcion_puerto_serie_cpp\stdafx.cpp   5   


Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Error   C2361   la inicialización de 'miBuffer2' se omite en la etiqueta 'default'   Envio_y_recepcion_puerto_serie_cpp   C:\Users\Meta\documents\visual studio 2017\Projects\Envio_y_recepcion_puerto_serie_cpp\Envio_y_recepcion_puerto_serie_cpp\Envio_y_recepcion_puerto_serie_cpp.cpp   64   


¿Cómo lo soluciono?

Saludos.
169  Seguridad Informática / Hacking / ¿Cómo meten Linux en dispositivos? en: 27 Julio 2017, 05:27 am
Hola:

He visto que han kackeado la NES Mini.
https://www.linuxadictos.com/hacker-consigue-hackear-la-nintendo-classic-mini-e-instalar-gnulinux.html

¿Cómo logran Meter Ubunto dentro de ella y hacer lo que les da la gana?

Esto ocurrió hasta con un marco de fotos digital, con Wii y vete a saber que más dispositivo acepta Linux.

Saludos.
170  Programación / Programación C/C++ / Elegir el evento exacto en: 26 Julio 2017, 01:14 am
Hola:

He creado un evento. Se trata de usar el código correcto para que al recibir datos por el puerto serie, lo detecte y lo muestre en patalla.


Uso la ibrería https://github.com/Gmatarrubia/LibreriasTutoriales

El evento generado es este:
Código
  1. void CMFC_ArduinoDlg::OnEnUpdateEditMensajeDesdeArduino()
  2. {
  3.  
  4. }

Introduje este código. Lo que debe hacer es, al detectar el puerto serie, se guarde en la variable lectura. Lo que tenga guardado en la variable lectura, lo uestra en el componente Rich del formulario.
Código
  1. void CMFC_ArduinoDlg::OnEnUpdateEditMensajeDesdeArduino()
  2. {
  3. // TODO:  Si éste es un control RICHEDIT, el control no
  4. // enviará esta notificación a menos que se invalide CDialogEx::OnInitDialog()
  5. // función para enviar el mensaje EM_SETEVENTMASK al control
  6. // con la marca ENM_UPDATE ORed en la máscara lParam.
  7.  
  8. // TODO:  Agregue aquí el controlador de notificación de controles.
  9.  
  10. int n = Puerto->ReadData(lectura, 49);
  11. if (n > 0)
  12. {
  13. lectura[n + 1] = '\0';
  14. IDC_EDIT_MENSAJE_DESDE_ARDUINO->text = lectura;
  15. }
  16. }

Al compilar me da dos erroes.
Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Error (activo)   E0044   la expresión debe tener un tipo de puntero   MFC_Arduino   c:\Users\usuario\Documents\Visual Studio 2017\Projects\MFC_Arduino\MFC_Arduino\MFC_ArduinoDlg.cpp   155   



Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Error   C2227   el operando izquierdo de '->text' debe señalar al tipo class/struct/union/generic   MFC_Arduino   c:\users\meta\documents\visual studio 2017\projects\mfc_arduino\mfc_arduino\mfc_arduinodlg.cpp   155   


¿Alguna solución?

Saludos.

MOD: imagen adaptada a lo permitido.




Edito 3:

Hola de nuevo:

Si me deja escribir por aquí. Leyendo y leyendo por internet, hasta en ruso, encontré este enlace.

SetDlgItemText

En C# sería algo así cmo indiqué arriba, pero no lo es:
Código
  1. Rich.txt = Lectura.toString();

Se usa así:
Código
  1. SetDlgItemText(IDC_EDIT_MENSAJE_DESDE_ARDUINO, lectura); // Mostrar texto.

En parte me ha funcionado, solo en parte, es decir. Si pulso el botón ON o OFF, no pasa nada. Si escribo una letra en el Rich, aparece ya los textos desde el puerto serie. Vuelvo a pulsar el botón ON o el OFF, no pasa nada, si escribo otra letra en el Rich que se llama IDC_EDIT_MENSAJE_DESDE_ARDUINO, vuelve aparecer nuevos datos desde el puerto serie. Esto ocurre así porque he usado este evento que puedes ver aquí. No encuentro otro evento que valga la pena.

Código de este evento:
Código
  1. void CMFC_ArduinoDlg::OnEnUpdateEditMensajeDesdeArduino()
  2. {
  3. int n = Puerto->ReadData(lectura, 49);
  4. if (n > 0)
  5. {
  6. lectura[n + 1] = '\0';
  7. SetDlgItemText(IDC_EDIT_MENSAJE_DESDE_ARDUINO, lectura);
  8. }
  9. }

Si escribo una letra, en el Rich, me aparece por fin el mensaje, solo si escribe una letra, lo que sea con tal de detectar algo. Por lo que se ve, este método no es el adecuado.


Hice otro truco a ver si cuela, pero tampoco funciona como quiero. Puede el código en cada botón, el ON y OFF, usando el mismo código, y sin usar el void para reutilización de código, no quería perder el tiempo.
Código
  1. void CMFC_ArduinoDlg::OnBnClickedButton1()
  2. {
  3. Puerto->WriteData(Luz_OFF, sizeof(Luz_OFF) - 1);
  4. int n = Puerto->ReadData(lectura, 49);
  5. if (n > 0)
  6. {
  7. lectura[n + 1] = '\0';
  8. SetDlgItemText(IDC_EDIT_MENSAJE_DESDE_ARDUINO, lectura);
  9. }
  10. }

Tiene comportamiento no deseado. Si uso ON, luego pulso OFF, me aparece el mensaje del ON, si vuelvo a pulsar OFF, me aparece el mensaje del OFF por fin, pero, debo pulsar dos veces el mismo botón para que me aparezca el mensaje adecuado. A parte de esto, si desde el puerto serie me aparece una entrada de texto sin yo solicitarlo desde el ordenador o PC, nunca me aparece el texto en pantalla.

La forma ideal es, desde que me llegue datos al puerto serie, desde que detecte algo, algún carácter, lo muestra en pantalla. Hay que buscar un evento o una función que cumpla esos requisitos.

Ahí no tengo idea, al menos he logrado que se muestre algo, porque desde hace meses no me comía una rosca, y desde los foros oficiales de Microsoft tanto en español como en Inglés, no tienen idea del tema de los puertos series y Arduino.

Sólo falta saber una buena función que detecte las entradas de datos en el Rich y asunto resuelto.

Saludos.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [17] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ... 66
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines