网名叶帆,06/07年两届微软MVP获得者,从事软件开发已有十余年的历史,从最初的DOS平台下的Basic、C、foxbase,到现在的Windows平台下的VB、VC、C#,顺着微软技术为主的技术路线一路走来,上规模的大型程序(上千行过万行的代码)不少,小程序更是多如繁星;以前主要用C/VB/VC开发程序,现在主要用VS2005(C#)/EVC/Python开发嵌入式系统和上位机监控系统。 其它技能:对PLC编程(主要为西门子、AB、欧姆龙、三菱系列PLC)、现场总线、数据通信、OPC Server/Client开发等相关技术有5年多的工控经验。 主要作品:API浏览器、VB源码之友、PPI控件、Modbus控件、CP243控件、叶帆密码箱、正则表达式工具等等; 主要项目:二型计量监控系统、焦炉四大机车自动化系统、烧结配水监控系统、隧道广告影像系统、通用组态软件、嵌入式系统组态、LED视频影像系统、ICU病室输液管理等等; [叶帆工作室]:https://blog.csdn.net/yefanqiu
上一篇:Digi开发板初探
https://blog.csdn.net/yefanqiu/archive/2007/10/27/1848438.aspx
试验平台:Digi MF开发板
(图MF071028001.jpg)
与IO相关的部分如下:
(3)拨码开关SW1 (4)拨码开关SW2 (11)GPIO灯—output (10)GPIO—input(参见下图)
(图MF071028003.jpg)
首先,要操作相关IO部分,必须拨码开关SW1的拨码全部拨到右边,这时候GPIO有效。(SW1开关是切换串口和GPIO的)。
这时候如果你对拨码开关SW2进行操作,你会发现,当SW2的拨码在右边的时候相对应GPIO灯会亮,拨到左边则灭(这时候要保证没有任何程序运行或有程序运行但无操作GPIO灯的指令操作)。
如果你要使用最右边的GPIO入来控制GPIO灯,你必须使SW2的拨码在左边,这时候GPIO灯亮。你用一个短接线,把pin9和pin10端口短接(如上图),这时候你发现GPIO第1个灯灭,断开,则IO灯亮。相对应你也可以控制GPIO其它灯的亮灭。
好了,知道上面的知识,我们就可以进行相应的IO编程了。
首先我们要知道GPIO的pin,请参见下表。
(图MF071028002.jpg)
很遗憾,从上表得知,SW1、SW2、GPIO共用同一批GPIO Pin。
分别为0,1,2,5,6。对编程的影响就是,不能同时操作 GPIO入和GPIO出,如果强行同时操作,虽然代码可以编译成功,但运行时会跳出如下异常。
(图MF071028004.jpg)
下面是读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);
}
}
}
下一篇:串口操作
https://blog.csdn.net/yefanqiu/archive/2007/10/28/1852015.aspx
Trackback: https://tb.blog.csdn.net/TrackBack.aspx?PostId=1851355 |