天天看點

.Net Micro Framework研究—IO讀寫

試驗平台:Digi MF開發闆

.Net Micro Framework研究—IO讀寫

與IO相關的部分如下:

(3)撥碼開關SW1 (4)撥碼開關SW2 (11)GPIO燈—output (10)GPIO—input(參見下圖)

.Net Micro Framework研究—IO讀寫

首先,要操作相關IO部分,必須撥碼開關SW1的撥碼全部撥到右邊,這時候GPIO有效。(SW1開關是切換序列槽和GPIO的)。

這時候如果你對撥碼開關SW2進行操作,你會發現,當SW2的撥碼在右邊的時候相對應GPIO燈會亮,撥到左邊則滅(這時候要保證沒有任何程式運作或有程式運作但無操作GPIO燈的指令操作)。

如果你要使用最右邊的GPIO入來控制GPIO燈,你必須使SW2的撥碼在左邊,這時候GPIO燈亮。你用一個短接線,把pin9和pin10端口短接(如上圖),這時候你發現GPIO第1個燈滅,斷開,則IO燈亮。相對應你也可以控制GPIO其它燈的亮滅。

好了,知道上面的知識,我們就可以進行相應的IO程式設計了。

首先我們要知道GPIO的pin,請參見下表。

.Net Micro Framework研究—IO讀寫

很遺憾,從上表得知,SW1、SW2、GPIO共用同一批GPIO Pin。

分别為0,1,2,5,6。對程式設計的影響就是,不能同時操作 GPIO入和GPIO出,如果強行同時操作,雖然代碼可以編譯成功,但運作時會跳出如下異常。

.Net Micro Framework研究—IO讀寫
下面是讀IO入的代碼:

using System;

    using System.Collections;

    using System.Net;

    using System.Net.Sockets;

    using System.Runtime.CompilerServices;

    using System.Text;

    using System.Threading;

    using Microsoft.SPOT;

    using Microsoft.SPOT.Hardware;

    using Microsoft.SPOT.Net;

    using Microsoft.SPOT.Net.NetworkInformation;

 

    public class DigiTest

    {

        public static void Main()

        {

            InputPort[] input = new InputPort[5];

            Cpu.Pin[] pin = new Cpu.Pin[5] { (Cpu.Pin)0, (Cpu.Pin)1, (Cpu.Pin)2, (Cpu.Pin)5, (Cpu.Pin)6 };

 

            for (int i = 0; i < 5; i++)

            {

                input[i] = new InputPort(pin[i], false, Port.ResistorMode.PullUp);

            }

            while (true)

            {           

                Debug.Print(input[0].Read().ToString() + " " + input[1].Read().ToString() + " " + input[2].Read().ToString() + " " + input[3].Read().ToString() + " " + input[4].Read().ToString());

                Thread.Sleep(1000);

            }

        }

    }           

下面是寫IO出的代碼,部署運作後你會發現,GPIO會閃爍。

   using System;

    using System.Collections;

    using System.Net;

    using System.Net.Sockets;

    using System.Runtime.CompilerServices;

    using System.Text;

    using System.Threading;

    using Microsoft.SPOT;

    using Microsoft.SPOT.Hardware;

    using Microsoft.SPOT.Net;

    using Microsoft.SPOT.Net.NetworkInformation;

 

    public class DigiTest

    {

        public static void Main()

        {

            OutputPort[] output = new OutputPort[5];

            Cpu.Pin[] pin = new Cpu.Pin[5] { (Cpu.Pin)0, (Cpu.Pin)1, (Cpu.Pin)2, (Cpu.Pin)5, (Cpu.Pin)6 };

 

            for (int i = 0; i < 5; i++)

            {

                output[i] = new OutputPort(pin[i], false);

            }

            while (true)

            {

                for (int i = 0; i < 5; i++)

                {

                    output[i].Write(!output[i].Read());

                }                

                Thread.Sleep(1000);

            }

 

        }

    }           

繼續閱讀