成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

I2C總線的模擬器的.Net Micro Framework實現

開發 后端
I2C以前沒有怎么接觸過,所以做它的模擬功能,只能靠著感覺走,有不妥之處,還望方家指正。做出了spi相關的模擬功能,做I2C相對也就不難了,只不過用戶操作I2C總線讀寫數據的時候要稍微麻煩一點。

I2C以前沒有怎么接觸過,所以做它的模擬功能,只能靠著感覺走,有不妥之處,還望方家指正。做出了spi相關的模擬功能,做I2C相對也就不難了,只不過用戶操作I2C總線讀寫數據的時候要稍微麻煩一點。

測試程序運行界面:

                         
 
模擬器中的I2C總線的相關代碼如下:
     public class I2CComponent : I2cDevice
    {
        public byte[] bytData = new byte[8];
        protected override void DeviceRead(byte[] data)
        {
            try
            {
                for (int i = 0; i < data.Length; i++)
                {
                    if (i < bytData.Length) data[i] = bytData[i];
                }
           }
            catch { }
            base.DeviceRead(data);
        }
        protected override void DeviceWrite(byte[] data)
        {
            try
            {
                for (int i = 0; i < data.Length; i++)
                {
                    if (i < bytData.Length) bytData[i] = data[i];
                }
            }
            catch { }
            base.DeviceWrite(data);
        }
        protected override void DeviceBeginTransaction()
        {
            base.DeviceBeginTransaction();
        }
        protected override void DeviceEndTransaction()
        {
            base.DeviceEndTransaction();
        }
    }
測試代碼如下(還是在原來程序的基礎上進行擴充):
    static SPI _spi;
    public static void Main()
    {
        OutputPort[] output = new OutputPort[8];
        InputPort[] input = new InputPort[8];
       
        //葉帆模擬器GPIO的pin定義
        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 };
 
        //SPI的pin定義
        _spi=new SPI(new SPI.Configuration((Cpu.Pin)30, true, 0, 0, false, false, 4000, SPI.SPI_module.SPI1));
 
        //I2C定義                           模擬器I2C地址為100 時鐘速度不要設置太小否則會有問題
        I2CDevice I2CBus = new I2CDevice(new I2CDevice.Configuration(100, 200));
 
        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 intNum = 0;
        while (true)
        {
            output[intNum].Write(!output[intNum].Read());
            Debug.Print("I   : "+input[0].Read().ToString() + " " + input[1].Read().ToString() + " " + input[2].Read().ToString() + " " + input[3].Read().ToString() + " " + input[4].Read().ToString()+ " " + input[5].Read().ToString() + " " + input[6].Read().ToString() + " " + input[7].Read().ToString());
            Debug.Print("AD : "+ReadWriteAD((Int16)intNum).ToString() + " " + intNum.ToString());
            //---------------------------------------
 
            //I2C讀寫
            byte[] bytRData = new byte[8];
            byte[] bytWData = new byte[3];
            bytWData[0] = (byte)intNum;
            bytWData[1] = (byte)(intNum * 2);
            bytWData[2] = (byte)(intNum * 3);
            I2CDevice.I2CTransaction[] i2c = new I2CDevice.I2CTransaction[2];
            i2c[0]=I2CBus.CreateReadTransaction(bytRData);
            i2c[1] = I2CBus.CreateWriteTransaction(bytWData);
            I2CBus.Execute(i2c, 100);   //執行
 
            Debug.Print("I2C : " + bytRData[0].ToString() + " " + bytRData[1].ToString() + " " + bytRData[2].ToString() + " " + bytRData[3].ToString() + " " + bytRData[4].ToString() + " " + bytRData[5].ToString() + " " + bytRData[6].ToString() + " " + bytRData[7].ToString());
 
            //---------------------------------------
            if (++intNum > 7) intNum = 0;
            Thread.Sleep(800);
        }
    }
    public static Int16 ReadWriteAD(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;
    }
}
好了,模擬器的工作暫時告一個段落,有時間把該模擬器完善一下,給感興趣的網友共享,這樣就不用購買硬件就可以測試一些有意思的代碼和功能了(一個測試板卡要好幾百美元呢!)。

【編輯推薦】

  1. .Net Micro數據的永久存儲淺析
  2. 在.Net Micro Framework中支持英文輸入法
  3. 詳解.Net Micro實現SideShow窗體界面實例
責任編輯:符甲 來源: CNEMB.com
相關推薦

2009-07-17 13:35:12

IO模擬器研究.Net Micro

2010-06-08 16:25:35

I2C總線協議

2010-07-01 16:45:05

I2C總線協議

2022-06-13 09:21:45

I2C DriverI2C 子系統

2017-03-16 08:30:19

Android ThAndroidI2C

2010-06-08 16:21:50

I2C總線協議

2010-10-08 17:03:59

.NET Micro Visual Stud

2009-07-16 15:02:33

Shapes命名空間Net Micro F

2009-07-09 09:28:19

.Net Micro

2009-06-29 10:19:42

.NET Micro性能優化

2009-07-17 14:51:22

.Net Micro

2009-07-17 14:38:49

Micro Frame

2017-08-11 18:25:25

Linuxi2c

2009-11-17 10:29:39

.NET Micro

2022-05-27 09:00:09

I2C子系統協議

2009-07-17 13:46:52

.Net Micro

2009-07-17 13:56:44

.Net Micro

2023-04-07 09:14:31

硬件通信串口通信實驗

2022-06-12 07:30:13

I3C通訊協議

2021-01-19 19:32:01

Cortex-A9 R嵌入式系統i2c 外設
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美在线视频 | 久久一二| 高清av电影 | 亚洲不卡视频 | 99精品99| 91精品国产综合久久久久久丝袜 | re久久| 欧美视频二区 | 久久久久久色 | 亚洲精品一| 国产精品1| 黄色在线观看网址 | 欧美一区视频 | 女同久久另类99精品国产 | 国产午夜精品一区二区 | 黑人精品欧美一区二区蜜桃 | 成人午夜在线 | 国产精品久久久久久久久动漫 | 国产精品久久精品 | 中文字幕亚洲欧美日韩在线不卡 | 精品亚洲一区二区 | 毛片网在线观看 | 精品乱码一区二区 | 亚洲精品黄色 | 中文字幕人成乱码在线观看 | 日本三级电影免费 | 日韩在线资源 | 99久久99| 国产小视频在线 | 欧美二区三区 | 日韩成人中文字幕 | 久久综合一区 | 精品亚洲一区二区三区四区五区 | 天堂av中文 | 在线观看www高清视频 | 久草青青草 | h视频免费在线观看 | 久久精品一区二区 | 看羞羞视频免费 | 在线成人www免费观看视频 | 日韩aⅴ片 |