Damit man den Code besser lesen kann sollte man mit "Code einfügen" arbeiten, ansonsten wird der Post relativ unübersichtlich.

Man findet es wenn man auf "Antworten" geht und anschließend auf "Erweitert". Hier muss man das Raute Symbol verwenden.

Beim Programm von Brosal sieht das dann so aus

Code:
using System;
 using System.Threading;
 using Microsoft.SPOT;
 using Microsoft.SPOT.Hardware;
 using GHIElectronics.NETMF.FEZ;
 using GHIElectronics.NETMF.Hardware;
 using System.IO.Ports;
 using System.Text;

 namespace MFConsoleApplication1
 {

 public class Program
 {

 public static class GlobalVar
 {
 static int _globalValue;

 public static int GlobalValue
 {
 get { return _globalValue; }
 set { _globalValue = value; } 
 }
 }

 // SerialPort ist nur dann dauerhaft erreichbar wenn als >>>static Globale Variable<<< deklariert ist
 // Das selbe gilt für den Buffer
 // Wenn der Buffer und der Serialport lokal in einer Methode deklariert ist und die Methode verlassen wird
 // wird der Serialport und der Buffer aus dem Speicher gelöscht und ist nicht mehr ansprechbar

 static byte[] Buffer;
 static SerialPort UART = new SerialPort("COM1", 115200);

 public static void Main()
 {

 GlobalVar.GlobalValue = 0;

 //Serialport
 UART.Open();
 //Delegat Interrupt Empfang setzen
 UART.DataReceived += new SerialDataReceivedEventHandler(UART_DataReceived);

 // the pin will generate interrupt on high and low edges
 InterruptPort IntButton =
 new InterruptPort((Cpu.Pin)FEZ_Pin.Interrupt.LDR, true,
 Port.ResistorMode.PullUp,
 Port.InterruptMode.InterruptEdgeLow);

 // add an interrupt handler to the pin
 IntButton.OnInterrupt += new NativeEventHandler(IntButton_OnInterrupt);


 //do anything you like here
 // Thread.Sleep(Timeout.Infinite);

 AnalogIn voltagePort = new AnalogIn((AnalogIn.Pin)FEZ_Pin.AnalogIn.An3);
 OutputPort lowPort = new OutputPort((Cpu.Pin)FEZ_Pin.Digital.An0, false);//???
 OutputPort highPort = new OutputPort((Cpu.Pin)FEZ_Pin.Digital.An2, true);//???

 const double maxVoltage = 3.3;
 const int maxAdcValue = 1023;


 InterruptPort RX =
 new InterruptPort((Cpu.Pin)FEZ_Pin.Interrupt.Di0, true,
 Port.ResistorMode.PullUp,
 Port.InterruptMode.InterruptEdgeLow);

 RX.OnInterrupt += new NativeEventHandler(RX_OnInterrupt);


 while (true)
 {
 double mess = 0;
 int sample = 10000;
 for (int i = 0; i <= (sample - 1); i++)
 {
 mess += (double)voltagePort.Read();
 }
 double valueRaw = mess / sample;
 double valueVoltage = (valueRaw * maxVoltage) / maxAdcValue;
 double valuePercent = (valueVoltage / maxVoltage) * 100;

 Debug.Print("Voltage: " + valueVoltage + "V");
 Debug.Print("Percent: " + valuePercent + "%");

 //Thread.Sleep(1000);

 }
 }
 /// <summary>
 /// Interrupt Routine DataReceived
 /// </summary>
 /// <param name="sender">SerialPort als Object</param>
 /// <param name="e">Daten und </param>
 static void UART_DataReceived(object sender, SerialDataReceivedEventArgs e)
 {
 SerialPort SP = (SerialPort)sender; //Zeiger auf den Serialport der den IRQ gesendet hat setzten
 //somit sind mit SP alle Methoden Eigenschaften und Ereignisse des UART erreichbar
 Buffer = new byte[SP.BytesToRead];
 SP.Read(Buffer, 0, SP.BytesToRead); 
 String IN = new string(UTF8Encoding.UTF8.GetChars(Buffer)); //Empfangene Zeichen in String wandeln
 //Bricht ab bei einem nicht Druckbaren zeiche
 if (IN == "1")
 {
 //Wandelt GlobalVar.GlobalValue zuerst in einen String toString() dann in Bytes
 byte[] TempBuff = UTF8Encoding.UTF8.GetBytes(GlobalVar.GlobalValue.T oString()); 
 SP.Write(TempBuff, 0, TempBuff.Length); //und Absenden
 SP.DiscardInBuffer();// InBuffer löschen
 }

 }

 static void IntButton_OnInterrupt(uint port, uint state,
 DateTime time)
 {
 GlobalVar.GlobalValue++;
 //string zaehler_string = GlobalVar.GlobalValue.ToString(); //Kannst du dir sparen
 //Jede Variable kann man mit .toString() in einen String Wandeln >Achtung Klammern nicht vergessen<
 Debug.Print(GlobalVar.GlobalValue.ToString());
 }



 static void RX_OnInterrupt(uint port, uint state,
 DateTime time)
 {
 /*
 * Du brauchst keinen extra interupt an der Com RX Leitung
 * da der SerialPort DataReceived interrupt sowiso ausgelöst wird wenn
 * Daten hereingekommen sind
 * 
 SerialPort UART = new SerialPort("COM3", 115200);

 // Initial Daten
 int read_count = 0;
 byte[] tx_data;
 byte[] rx_data = new byte[10];
 UART.ReadTimeout = 0;


 read_count = UART.Read(rx_data, 0, rx_data.Length);
 string empfangen = rx_data.ToString();
 string zaehler_string = GlobalVar.GlobalValue.ToString();
 if (empfangen == "1")
 {
 tx_data = Encoding.UTF8.GetBytes(zaehler_string);
 UART.Write(tx_data, 0, tx_data.Length);
 }
 */

 }
 }
 }
MfG Hannes