试验平台:Digi MF开发板

 

 .Net Micro Framework研究—IO读写_Framework


(图MF071028001.jpg)

与IO相关的部分如下:

(3)拨码开关SW1 (4)拨码开关SW2 (11)GPIO灯—output (10)GPIO—input(参见下图)

 

 

 .Net Micro Framework研究—IO读写_Net_02

 


(图MF071028003.jpg)

 

首先,要操作相关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读写_Net_03


(图MF071028002.jpg)

 

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

分别为0,1,2,5,6。对编程的影响就是,不能同时操作 GPIO入和GPIO出,如果强行同时操作,虽然代码可以编译成功,但运行时会跳出如下异常。

 

 .Net Micro Framework研究—IO读写_Framework_04


(图MF071028004.jpg)

 

下面是读IO入的代码:

   

  1. using System;  
  2.  
  3.     using System.Collections;  
  4.  
  5.     using System.Net;  
  6.  
  7.     using System.Net.Sockets;  
  8.  
  9.     using System.Runtime.CompilerServices;  
  10.  
  11.     using System.Text;  
  12.  
  13.     using System.Threading;  
  14.  
  15.     using Microsoft.SPOT;  
  16.  
  17.     using Microsoft.SPOT.Hardware;  
  18.  
  19.     using Microsoft.SPOT.Net;  
  20.  
  21.     using Microsoft.SPOT.Net.NetworkInformation;  
  22.  
  23.    
  24.  
  25.     public class DigiTest  
  26.  
  27.     {  
  28.  
  29.         public static void Main()  
  30.  
  31.         {  
  32.  
  33.             InputPort[] input = new InputPort[5];  
  34.  
  35.             Cpu.Pin[] pin = new Cpu.Pin[5] { (Cpu.Pin)0, (Cpu.Pin)1, (Cpu.Pin)2, (Cpu.Pin)5, (Cpu.Pin)6 };  
  36.  
  37.    
  38.  
  39.             for (int i = 0; i < 5; i++)  
  40.  
  41.             {  
  42.  
  43.                 input[i] = new InputPort(pin[i], false, Port.ResistorMode.PullUp);  
  44.  
  45.             }  
  46.  
  47.             while (true)  
  48.  
  49.             {              
  50.  
  51.                 Debug.Print(input[0].Read().ToString() + " " + input[1].Read().ToString() + " " + input[2].Read().ToString() + " " + input[3].Read().ToString() + " " + input[4].Read().ToString());  
  52.  
  53.                 Thread.Sleep(1000);  
  54.  
  55.             }  
  56.  
  57.         }  
  58.  
  59.     }  
  60.  
  61.    
  62.  

下面是写IO出的代码,部署运行后你会发现,GPIO会闪烁。

   

  1. using System;  
  2.  
  3.     using System.Collections;  
  4.  
  5.     using System.Net;  
  6.  
  7.     using System.Net.Sockets;  
  8.  
  9.     using System.Runtime.CompilerServices;  
  10.  
  11.     using System.Text;  
  12.  
  13.     using System.Threading;  
  14.  
  15.     using Microsoft.SPOT;  
  16.  
  17.     using Microsoft.SPOT.Hardware;  
  18.  
  19.     using Microsoft.SPOT.Net;  
  20.  
  21.     using Microsoft.SPOT.Net.NetworkInformation;  
  22.  
  23.    
  24.  
  25.     public class DigiTest  
  26.  
  27.     {  
  28.  
  29.         public static void Main()  
  30.  
  31.         {  
  32.  
  33.             OutputPort[] output = new OutputPort[5];  
  34.  
  35.             Cpu.Pin[] pin = new Cpu.Pin[5] { (Cpu.Pin)0, (Cpu.Pin)1, (Cpu.Pin)2, (Cpu.Pin)5, (Cpu.Pin)6 };  
  36.  
  37.    
  38.  
  39.             for (int i = 0; i < 5; i++)  
  40.  
  41.             {  
  42.  
  43.                 output[i] = new OutputPort(pin[i], false);  
  44.  
  45.             }  
  46.  
  47.             while (true)  
  48.  
  49.             {  
  50.  
  51.                 for (int i = 0; i < 5; i++)  
  52.  
  53.                 {  
  54.  
  55.                     output[i].Write(!output[i].Read());  
  56.  
  57.                 }                   
  58.  
  59.                 Thread.Sleep(1000);  
  60.  
  61.             }  
  62.  
  63.    
  64.  
  65.         }  
  66.  
  67.     }  
  68.  
  69.  
  70.