用模拟器零成本体验MF开发

目前针对.Net Micro Framework无论是开发GPIOSPII2C,还是串口通信都离不开硬件,前段时间我扩展了官方的MF模拟器,可以不用硬件,零成本的体验上述技术开发。

要体验MF开发,必须具备如下条件:

Ø PC机上已安装VS2005

Ø http://msdn.microsoft.com/zh-cn/embedded/bb267253(en-us).aspx 下载并安装MF 2.5 SDK

Ø http://www.sky-walker.com.cn/MFEmulator_SDK.rar文档;

Ø 根据说明,在本机上注册该模拟器;

一、模拟器的使用

1、模拟器下载

http://www.sky-walker.com.cn/MFEmulator_SDK.rar下载模拟器。

2、模拟器注册

压缩包“YFMF模拟器”目录中有一个YFEmulatorReg.exe文件,运行该文件,并选择打开模拟器文件,完成注册。

3、模拟器配置

新建一个MF工程,打开该工程的属性页,在Micro Framework选项中,设定我们扩展的模拟器。

4、启动后的模拟器

二、应用开发示例

1GPIO测试

模拟器中相关GPIOPIN值如下:

I0~I7 Pin=10~17

Q9~Q7 Pin=20~27

完整的测试代码如下:

using System;

using Microsoft.SPOT;

using Microsoft.SPOT.Hardware;

using System.Threading;

namespace GPIOTest

{

public class Program

{

static OutputPort[] output = new OutputPort[8];

static InputPort[] input = new InputPort[8];

public static void Main()

{

//叶帆模拟器GPIOpin定义

Cpu.Pin[] pin_I = new Cpu.Pin[8] { (Cpu.Pin)10, (Cpu.Pin)11, (Cpu.Pin)12, (Cpu.Pin)13, (Cpu.Pin)14, (Cpu.Pin)15, (Cpu.Pin)16, (Cpu.Pin)17 };

Cpu.Pin[] pin_Q = new Cpu.Pin[8] { (Cpu.Pin)20, (Cpu.Pin)21, (Cpu.Pin)22, (Cpu.Pin)23, (Cpu.Pin)24, (Cpu.Pin)25, (Cpu.Pin)26, (Cpu.Pin)27 };

//GPIO

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

{

input[i] = new InputPort(pin_I[i], false, Port.ResistorMode.PullDown);

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

}

int Index = 0;

while (true)

{

GPIOTest(ref Index);

Thread.Sleep(200);

}

}

//GPIO测试

public static void GPIOTest(ref int Index)

{

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

if (++Index > 7) Index = 0;

string strPace = " ";

Debug.Print("Input : I0 I1 I2 I3 I4 I5 I6 I7");

Debug.Print(" "+(input[0].Read() ? "1" : "0") + strPace + (input[1].Read() ? "1" : "0") + strPace + (input[2].Read() ? "1" : "0") + strPace + (input[3].Read() ? "1" : "0") + strPace + (input[4].Read() ? "1" : "0") + strPace + (input[5].Read() ? "1" : "0") + strPace + (input[6].Read() ? "1" : "0") + strPace + (input[7].Read() ? "1" : "0"));

Debug.Print("Output: Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7");

Debug.Print(" " + (output[0].Read() ? "1" : "0") + strPace + (output[1].Read() ? "1" : "0") + strPace + (output[2].Read() ? "1" : "0") + strPace + (output[3].Read() ? "1" : "0") + strPace + (output[4].Read() ? "1" : "0") + strPace + (output[5].Read() ? "1" : "0") + strPace + (output[6].Read() ? "1" : "0") + strPace + (output[7].Read() ? "1" : "0"));

}

}

}

测试结果:

2SPI测试

模拟器中相关SPIPIN值如下:

PIN=30

完整的测试代码如下:

using System;

using Microsoft.SPOT;

using Microsoft.SPOT.Hardware;

using System.Threading;

namespace SPITest

{

public class Program

{

static SPI _spi;

static int QAW = 0;

public static void Main()

{

//SPIpin定义

_spi = new SPI(new SPI.Configuration((Cpu.Pin)30, true, 0, 0, false, false, 4000, SPI.SPI_module.SPI1));

while (true)

{

SPITest();

Thread.Sleep(200);

}

}

//读写SPI数据

private static Int16 SPIReadWrite(Int16 value)

{

byte[] bout = new byte[2];

byte[] bin = new byte[2];

bout[0] = (byte)(value >> 8);

bout[1] = (byte)(value & 0xff);

_spi.WriteRead(bout, bin);

Int16 aw0 = (Int16)((bin[0] << 8) + bin[1]);

return aw0;

}

//SPI测试

public static void SPITest()

{

if (QAW++ > 100) QAW = 0;

Debug.Print("SPI: DI=" + SPIReadWrite((Int16)QAW).ToString() + " DO=" + QAW.ToString());

}

}

}

测试结果:

3I2C测试

模拟器中相关I2C的地址如下:

地址=100

完整的测试代码如下:

using System;

using Microsoft.SPOT;

using Microsoft.SPOT.Hardware;

using System.Threading;

namespace I2CTest

{

public class Program

{

//I2C定义 模拟器I2C地址为100 时钟速度不要设置太小否则会有问题

static I2CDevice I2CBus = new I2CDevice(new I2CDevice.Configuration(100, 200));

static int IntI2CNum = 0;

public static void Main()

{

while (true)

{

I2CTest();

Thread.Sleep(200);

}

}

//I2C测试

public static void I2CTest()

{

if (++IntI2CNum > 10) IntI2CNum = 0;

//I2C读写

byte[] bytRData = new byte[8];

byte[] bytWData = new byte[3];

bytWData[0] = (byte)IntI2CNum;

bytWData[1] = (byte)(IntI2CNum * 2);

bytWData[2] = (byte)(IntI2CNum * 3);

I2CDevice.I2CTransaction[] i2c = new I2CDevice.I2CTransaction[2];

i2c[0] = I2CBus.CreateReadTransaction(bytRData);

i2c[1] = I2CBus.CreateWriteTransaction(bytWData);

I2CBus.Execute(i2c, 100); //执行

string strPace = " ";

string strInfo = "I2C(Byte0-7):" + bytRData[0].ToString() + strPace + bytRData[1].ToString() + strPace + bytRData[2].ToString() + strPace + bytRData[3].ToString() + strPace + bytRData[4].ToString() + strPace + bytRData[5].ToString() + strPace + bytRData[6].ToString() + strPace + bytRData[7].ToString();

Debug.Print(strInfo);

}

}

}

测试结果:

4、其它测试

串口、鼠标等等测试,暂略,有兴趣的朋友可以自行测试。

三、嵌入式开发资源

Windows Embedded中文官方网站

http://www.microsoft.com/china/windows/embedded

.NET Micro Framework

http://msdn2.microsoft.com/zh-cn/embedded/bb267253.aspx

Microsoft Robotics Studio

http://msdn2.microsoft.com/zh-cn/robotics/default.aspx

微软嵌入式开发者论坛

http://forums.microsoft.com/china/default.aspx?ForumGroupID=493&SiteID=15

微软中国嵌入式开发者博客

http://blogs.msdn.com/yunxu/

Mike Hall的博客

http://msdn2.microsoft.com/zh-cn/embedded/ Aa731228.aspx

Windows Embedded 专题

http://we.cnblogs.com/

叶帆工作室(CSDN

http://blog.csdn.net/yefanqiu/

叶帆工作室(博客园)

http://www.cnblogs.com/yefanqiu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值