91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-10-28 09:23:37 來源:億速云 閱讀:211 作者:柒染 欄目:編程語言

這篇文章將為大家詳細講解有關I2C總線的模擬器的.Net Micro Framework實現分析,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

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

測試程序運行界面:

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

模擬器中的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;
}
}
好了,模擬器的工作暫時告一個段落,有時間把該模擬器完善一下,給感興趣的網友共享,這樣就不用購買硬件就可以測試一些有意思的代碼和功能了(一個測試板卡要好幾百美元呢!)。

關于I2C總線的模擬器的.Net Micro Framework實現分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

崇信县| 东宁县| 长汀县| 海原县| 玉门市| 南开区| 红安县| 修文县| 红河县| 曲麻莱县| 孟连| 旬阳县| 汉中市| 普兰县| 沙坪坝区| 长寿区| 渑池县| 修水县| 兴城市| 磴口县| 英吉沙县| 丽江市| 蒙城县| 尼勒克县| 南漳县| 塔河县| 水城县| 贵南县| 额尔古纳市| 缙云县| 宝鸡市| 葵青区| 遵义县| 太保市| 柞水县| 九龙城区| 高清| 左云县| 达拉特旗| 交口县| 农安县|