0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用C語(yǔ)言編寫(xiě)并行端口2-Wire軟件

星星科技指導(dǎo)員 ? 來(lái)源:ADI ? 作者:ADI ? 2023-02-20 09:32 ? 次閱讀

本應(yīng)用筆記討論了為有興趣為應(yīng)用筆記AN2中所述的并行端口硬件開(kāi)發(fā)3230-Wire軟件的客戶提供的C源代碼。源代碼可在達(dá)拉斯半導(dǎo)體的FTP站點(diǎn)上免費(fèi)獲得,并且可以在任何使用Windows 95或Windows? 98操作系統(tǒng)的PC上運(yùn)行。此外,F(xiàn)TP站點(diǎn)上還提供了一個(gè)簡(jiǎn)單的Windows程序,該程序提供了基本的2-Wire通信軟件,可用于簡(jiǎn)單評(píng)估和調(diào)試并行端口硬件。

本應(yīng)用說(shuō)明中介紹的軟件是免費(fèi)的,并“按原樣”提供給我們的客戶使用。達(dá)拉斯半導(dǎo)體對(duì)軟件可能造成的任何損害不承擔(dān)任何責(zé)任。使用該軟件的風(fēng)險(xiǎn)由您自行承擔(dān)。

軟件要求

如介紹中所述,該程序必須在裝有Windows 95或Windows 98操作系統(tǒng)的PC上運(yùn)行。此軟件直接訪問(wèn)并行端口,基于 Windows NT 的操作系統(tǒng)需要驅(qū)動(dòng)程序才能完成此任務(wù)。

此外,還有多種并行端口操作模式,其中一些與軟件不兼容。已成功使用的兩種模式是 EPP 和 ECP。大多數(shù)PC的并行端口模式都可以在BIOS設(shè)置中更改。

源代碼描述/用途

源代碼(見(jiàn)附錄A)是用ANSI C編寫(xiě)的,因此它應(yīng)該與任何C編譯器兼容。為了使它的使用盡可能簡(jiǎn)單,所有代碼和聲明都在一個(gè)文件(2wire.c)中,因此沒(méi)有一個(gè)頭文件也必須包含在項(xiàng)目中才能使用資源。

要使用2-Wire源代碼:

將“2wire.c”文件放入項(xiàng)目目錄中。

在將訪問(wèn)并行端口的程序頂部添加一個(gè)#include“2wire.c”聲明。

調(diào)用 ParPortSelect(1) 來(lái)選擇并行端口。該參數(shù)確定將使用的端口號(hào)(例如,如圖所示的 LPT1)。有效端口號(hào)為 1、2 和 3。大多數(shù)PC將使用LPT1。

使用表2所示的ChangeDelayCount(int i)命令校準(zhǔn)3-Wire接口時(shí)序。

調(diào)用基本2-Wire函數(shù)或多字節(jié)2-Wire函數(shù),如表1和表2所述。

并行端口時(shí)序在很大程度上取決于執(zhí)行軟件的PC的速度,因此計(jì)算機(jī)之間的差異會(huì)使建立可靠的通信變得困難。為了解決此問(wèn)題,在 SDA 和 SCL 信號(hào)之間插入可變長(zhǎng)度延遲,以確保速度較快的計(jì)算機(jī)上的計(jì)時(shí)不超過(guò)最大額定接口速度(快速模式設(shè)備為 400kbits/秒)。延遲時(shí)間通過(guò)調(diào)用 ChangeDelayCount(int i) 函數(shù)來(lái)控制。此函數(shù)更改 PC 執(zhí)行短延遲的次數(shù)(10 NOP + a

for( ; ; )

循環(huán)的執(zhí)行時(shí)間)。i 的默認(rèn)值為 1000,在 P3 600MHz 計(jì)算機(jī)上提供中等到慢速通信。這將導(dǎo)致大多數(shù)PC上的中等性能,但它應(yīng)該可靠地工作。較低的i值將加快接口速度,但編程人員必須確保通信速度在2-Wire器件的規(guī)格范圍內(nèi)。在速度較快的機(jī)器上,可能需要更大的值 i 才能建立通信,因此如果需要調(diào)試,則需要檢查這一點(diǎn)。

基本的2-Wire功能可用于大多數(shù)應(yīng)用訪問(wèn)2-Wire器件。發(fā)送啟動(dòng)條件、寫(xiě)入和讀取字節(jié)以及發(fā)送停止條件的機(jī)制已在這些例程中處理,僅將例程的調(diào)用時(shí)間和順序作為與設(shè)備通信的最后剩余障礙。要使用這些例程,請(qǐng)如上所述調(diào)整時(shí)序,并閱讀器件的數(shù)據(jù)手冊(cè),以確定對(duì)訪問(wèn)寄存器的調(diào)用順序。

多字節(jié)2-Wire功能可用于通過(guò)一個(gè)命令從器件讀取和寫(xiě)入多達(dá)256字節(jié)的信息,但并非所有器件在通信期間都使用相同的數(shù)據(jù)序列。如果考慮使用這些函數(shù),請(qǐng)檢查提供的源代碼,以確保它們與正在訪問(wèn)的設(shè)備兼容。多字節(jié)寫(xiě)入/讀取的主要優(yōu)點(diǎn)是它限制了應(yīng)用程序所需的調(diào)用次數(shù),因?yàn)樗褂脝蝹€(gè)命令傳輸多個(gè)字節(jié),而不是發(fā)送多個(gè)命令來(lái)寫(xiě)入/讀取單個(gè)字節(jié)。多字節(jié)寫(xiě)入和讀取例程使用 SetSlaveAddress() 命令設(shè)置的設(shè)備地址,因此在使用多字節(jié)寫(xiě)入和讀取命令之前必須調(diào)用 SetSlaveAddress()。

LED 使能和禁用功能允許將 AN3230 中顯示的 LED 用作狀態(tài)指示燈。頻閃設(shè)置和清除功能允許使用 LED 引腳觸發(fā)示波器。這些函數(shù)對(duì)于調(diào)試硬件和軟件問(wèn)題非常有用。

表 1.基本2線功能

功能原型 功能說(shuō)明 返回值
int 開(kāi)始() 產(chǎn)生 2 線啟動(dòng)條件。也可以調(diào)用以生成重新啟動(dòng)條件。 1
int Stop() 產(chǎn)生 2 線停止條件 1
int WriteData(unsigned char ucData); 將參數(shù)寫(xiě)入從屬服務(wù)器 如果從站確認(rèn),則為
1,如果從屬服務(wù)器不確認(rèn),則為 0
int ReadDataAck(unsigned char *ucData); 從從站讀取數(shù)據(jù)字節(jié)到 ucData 并確認(rèn) 1
int ReadDataNack(unsigned char *ucData); 從從屬服務(wù)器讀取數(shù)據(jù)字節(jié)到 ucData 并且不確認(rèn) 1
int ResetBus() 時(shí)鐘 SCL 9 次,然后生成停止條件 1

表 2.多字節(jié)2線功能

功能原型 功能說(shuō)明 返回值
int SetSlaveAddress(unsigned char ucADDR) 設(shè)置多字節(jié)讀寫(xiě)訪問(wèn)的從地址 1
int WriteBytes(int iCount, unsigned char ucMemAddr, unsigned char ucData[256]) 將 iCount 字節(jié)寫(xiě)入 SetSlaveAddress() 設(shè)置的設(shè)備地址,從 ucMemAddr 設(shè)置的內(nèi)存地址開(kāi)始。 如果從站確認(rèn),則為
1,如果從站不確認(rèn)任何字節(jié),則為 0。
Int ReadBytes(int iCount, unsigned char ucMemAddr, unsigned char ucData[256]) 從 ucMemAddr 設(shè)置的內(nèi)存地址開(kāi)始,在 SetSlaveAddress() 設(shè)置的設(shè)備地址處讀取 iCount 字節(jié)。 如果從屬在命令寫(xiě)入期間確認(rèn),則為
1,如果從屬在命令寫(xiě)入期間不確認(rèn),則為 0。

表 3.其他端口設(shè)置和調(diào)試功能

功能原型 功能說(shuō)明 返回值
int ParPortSelect(int iLPT) 將并行端口訪問(wèn)變量設(shè)置為指定的端口號(hào)。對(duì)于 LPT1,iLPT = 1。 1 表示成功更改
0 表示失敗
int ChangeDelayCount(int iCount) 這決定了在 SDA 和 SCL 通信期間與 DelayASMx10() 命令一起使用的“i”值。使用較高的 i 值調(diào)用此函數(shù)以使通信速度變慢。默認(rèn)值為 1000,應(yīng)提供中等到較慢的通信速度。這是 i 的安全值。大多數(shù)PC將能夠使用較低的i值來(lái)加快通信速度。 1
無(wú)效延遲ASMx10(int i) 每個(gè) i 延遲 10 個(gè)時(shí)鐘周期。這稱為確定 SDA 和 SCL 計(jì)時(shí)的延遲。它不需要由軟件開(kāi)發(fā)人員調(diào)用,它已經(jīng)嵌入到啟動(dòng)/停止/讀/寫(xiě)命令中。
int EnableLED() 使能 AN3230 電路中的 LED 1
int 禁用指示燈() 禁用 AN3230 電路中的 LED 1
int SetStrobe() 將 AN3230 電路中的 LED 引腳設(shè)置為高電平,以便示波器觸發(fā) 1
int ClearStrobe() 將 AN3230 電路中的 LED 引腳設(shè)置為低電平,以便示波器觸發(fā) 1

基本2線功能示例

本節(jié)介紹如何將兩個(gè)字節(jié)寫(xiě)入DS1086 DAC寄存器,然后使用基本的2-Wire功能讀回。DS1086的從地址為B0h,DAC寄存器為2字節(jié),從存儲(chǔ)器地址08h開(kāi)始。

要將 0180h 寫(xiě)入地址 08h 和 09h,可以使用以下過(guò)程。

unsigned char fail = 0;

Start();                   // Generates Start Condition
fail |= !WriteData(0xB0);  // Writes the slave address
fail |= !WriteData(0x08);  // Writes the memory address of the DAC register
fail |= !WriteData(0x01);  // Writes the MSB of the DAC register
fail |= !WriteData(0x80);  // Writes the LSB of the DAC register
Stop();                    // Generates Stop Condition
if(fail == 1)
      Error("Device failed to acknowledge during write attempt");
若要讀取剛剛寫(xiě)入 DAC 寄存器的字節(jié),可以使用以下代碼。
unsigned char ucDataMSB=0;        // define variable for MSB data to be stored after the read
unsigned char ucDataLSB=0;        // define variable for LSB data to be stored after the read
unsigned char fail = 0;

Start();                          // Generate Start Condition
fail |= !WriteData(0xB0);         // Write the slave address, LSbit=0 to signify write byte
fail |= !WriteData(0x08);         // Write the memory address of the DAC register
Start();                          // Generates a re-start condition
WriteData(0xB1);                  // Writes the slave address, LSbit=1 to signify read byte
ReadDataAck(&ucDataMSB);          // Reads the MSB of DAC and sends acknowledgement to the slave
ReadDataNack(&ucDataLSB);         // Reads the LSB of DAC and does not acknowledge the slave
Stop();                           // Generates Stop Condition
if(fail ==1)
      Error("Device failed to acknowledge during read attempt");

視窗并行端口2線軟件

圖1所示的軟件是為了演示“2wire.c”軟件的基本功能而編寫(xiě)的,也可用于調(diào)試AN3230硬件。

poYBAGPyzbiADMiaAAB3l43HILc219.gif?imgver=1


圖1.Windows并行端口到2-Wire軟件的示例。

該軟件可以與“并行端口選擇”部分中列出的 3 個(gè)并行端口中的任何一個(gè)進(jìn)行通信。

2-Wire函數(shù)部分中的按鈕只需接受對(duì)話框中的參數(shù),然后調(diào)用相應(yīng)的“2wire.c”函數(shù)。Start 生成一個(gè)啟動(dòng)條件,寫(xiě)入數(shù)據(jù)將按鈕右側(cè)框中的參數(shù)寫(xiě)入從站。兩個(gè)讀取按鈕都從從站讀取一個(gè)字節(jié),但一個(gè)確認(rèn)數(shù)據(jù)傳輸,另一個(gè)不確認(rèn)數(shù)據(jù)傳輸。停止按鈕生成停止條件。寫(xiě)入字節(jié)按鈕在LSbit設(shè)置為零時(shí)寫(xiě)入2-Wire器件地址框中的值,讀取按鈕在LSbit設(shè)置為<>時(shí)寫(xiě)入相同的值。這些按鈕允許寫(xiě)入數(shù)據(jù)按鈕用于數(shù)據(jù)和存儲(chǔ)器地址,而不必在每次訪問(wèn)器件時(shí)頻繁地將其中一個(gè)值更改為從地址。

單字節(jié)寫(xiě)入將單個(gè)數(shù)據(jù)字節(jié)(Data)傳輸?shù)?-Wire器件地址框中列出的從地址,位于Addr框中列出的存儲(chǔ)器地址處。

2字節(jié)從<>線器件地址盒中列出的從地址從“地址”從“地址”框中列出的存儲(chǔ)器地址讀取一個(gè)字節(jié)。對(duì)話框?qū)⒃诓淮_認(rèn)的情況下讀取,以指示它只讀取一個(gè)字節(jié)。

雙字節(jié)寫(xiě)入將兩個(gè)數(shù)據(jù)字節(jié)(數(shù)據(jù)MSB和數(shù)據(jù)LSB)傳輸?shù)?-Wire器件地址框中列出的從地址,位于Addr框中列出的存儲(chǔ)器地址。

雙字節(jié)讀取從機(jī)讀取從機(jī)的兩個(gè)數(shù)據(jù)字節(jié),從2-Wire器件地址框中列出的從地址開(kāi)始,從“地址”框中列出的存儲(chǔ)器地址開(kāi)始。對(duì)話框?qū)⒋_認(rèn)第一個(gè)數(shù)據(jù)字節(jié)讀取,但不確認(rèn)第二個(gè)數(shù)據(jù)字節(jié)讀取。

“查找地址”按鈕寫(xiě)入2-Wire總線(00h-FEh)上的每個(gè)從地址,檢查確認(rèn)地址以確定哪些地址具有從地址。響應(yīng)確認(rèn)的地址將列在狀態(tài)框中。該按鈕可用于確定AN3230硬件設(shè)置是否正確,以及能夠接收數(shù)據(jù)的從機(jī)是否連接到2-Wire總線。

Comm. Delay 按鈕調(diào)用 ChangeDelayCount() 函數(shù),并將按鈕右側(cè)的整數(shù)作為參數(shù)。這可用于調(diào)整2-Wire接口的時(shí)序。

LED 按鈕啟用和禁用 AN3230 電路中顯示的指示 LED。選通使能使軟件在單字節(jié)和雙字節(jié)寫(xiě)/讀功能之前將LED引腳設(shè)置為高電平,并在通信結(jié)束后將LED引腳設(shè)置為低電平。

“測(cè)試”按鈕執(zhí)行環(huán)回測(cè)試,確保當(dāng)SDA輸出設(shè)置為低電平時(shí),SDA輸入讀數(shù)為低電平,同樣,對(duì)于高電平條件也是如此。它還測(cè)試LED引腳是否可以設(shè)置為低電平和高電平,暫停足夠長(zhǎng)的時(shí)間,以便用戶看到LED閃爍然后熄滅。

上面列出的所有命令都在“狀態(tài)”窗口中提供用戶反饋。

結(jié)論

本應(yīng)用筆記演示了使用AN2所示的并行端口2-Wire電路以及“3230wire.c”文件中提供的源代碼對(duì)2-Wire器件進(jìn)行編程的簡(jiǎn)便性?!?wire.c”中的例程執(zhí)行信令功能,使程序員能夠?qū)W⒂谡{(diào)整接口時(shí)序,并按照2-Wire器件數(shù)據(jù)手冊(cè)中概述的正確通信順序調(diào)用2-Wire例程。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 半導(dǎo)體
    +關(guān)注

    關(guān)注

    334

    文章

    26855

    瀏覽量

    214303
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7594

    瀏覽量

    135857
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1617

    瀏覽量

    49015
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    介紹一個(gè)C語(yǔ)言編寫(xiě)的硬件外設(shè)訪問(wèn)庫(kù)

    今天要介紹的開(kāi)源軟件c-periphery,一個(gè) C 語(yǔ)言編寫(xiě)的硬件外設(shè)訪問(wèn)庫(kù)。
    的頭像 發(fā)表于 10-26 10:36 ?1116次閱讀
    介紹一個(gè)<b class='flag-5'>用</b><b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>編寫(xiě)</b>的硬件外設(shè)訪問(wèn)庫(kù)

    DS1629 pdf datasheet (2-Wire D

    The DS1629 2-Wire Digital Thermometer and Real Time Clock integrates the critical functions of a
    發(fā)表于 12-08 15:52 ?18次下載

    MAX9621,pdf datasheet (2-wire Hall-effect sensors to low voltage microprocessors)

    includes the MAX9921. The MAX9621 provides a single-chip solution to interface two 2-wire Hall-effect sensors to low voltage microprocessors
    發(fā)表于 12-17 13:10 ?41次下載

    2-Wire Intercom circuits-雙路對(duì)講機(jī)

    2-Wire Intercom
    發(fā)表于 03-15 09:47 ?1155次閱讀
    <b class='flag-5'>2-Wire</b> Intercom circuits-雙路對(duì)講機(jī)

    Writing Parallel-Port 2-Wire S

    Abstract: Provides instruction and source code for writting parallel port 2-wire software for use
    發(fā)表于 04-28 10:37 ?1611次閱讀
    Writing Parallel-Port <b class='flag-5'>2-Wire</b> S

    2-Wire Communication Using Lab

    2-Wire Com
    發(fā)表于 05-08 09:08 ?1924次閱讀
    <b class='flag-5'>2-Wire</b> Communication Using Lab

    軟件實(shí)現(xiàn)1-Wire通信

    摘要:在沒(méi)有專用總線主機(jī)(如DS2480B、DS2490)的情況下,微處理器可以輕松地產(chǎn)生1-Wire時(shí)序信號(hào)。本應(yīng)用筆記給出了一個(gè)采用‘C語(yǔ)言編寫(xiě)、支持標(biāo)準(zhǔn)速率的1-
    發(fā)表于 05-08 12:02 ?2206次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>軟件</b>實(shí)現(xiàn)1-<b class='flag-5'>Wire</b>通信

    turbo c2.0_編寫(xiě)C語(yǔ)言的好軟件

    turbo C作為新手編寫(xiě)C語(yǔ)言的好軟件,簡(jiǎn)單易懂、便于操作
    發(fā)表于 11-03 17:45 ?15次下載

    C語(yǔ)言編寫(xiě)程序?qū)崿F(xiàn)通過(guò)按鍵使LED燈周期閃爍

    C語(yǔ)言編寫(xiě)程序?qū)崿F(xiàn)通過(guò)按鍵使LED燈周期閃爍。
    發(fā)表于 03-30 16:54 ?10次下載

    關(guān)于c語(yǔ)言編寫(xiě)的算法程序

    關(guān)于c語(yǔ)言編寫(xiě)的算法程序
    發(fā)表于 04-09 17:47 ?12次下載

    C語(yǔ)言里如何編寫(xiě)精確的微量延時(shí)

    眾所周知,相比于其他編程語(yǔ)言,C語(yǔ)言編寫(xiě)嵌入式編程中有著絕對(duì)的優(yōu)勢(shì)。但它總也有缺點(diǎn)的:它的時(shí)序性比較差,不容易編寫(xiě)精準(zhǔn)的延時(shí)。而在
    發(fā)表于 05-23 16:33 ?1654次閱讀

    AT89S52單片機(jī)并行端口模擬I2C總線協(xié)議讀寫(xiě)AT24C04的設(shè)計(jì)

    AT24C04是具有I2C總線接口的EEPROM.大小為512*8bit.單片機(jī)AT89S52本身不具有I2C總線結(jié)口,所以可編寫(xiě)程序
    發(fā)表于 08-14 14:34 ?2672次閱讀

    AD5306/AD5316/AD5326:2.5V對(duì)5.5 V、400 A、2-Wire接口、Quad Voltion輸出8/10/12位數(shù)據(jù)Sheet

    AD5306/AD5316/AD5326:2.5V對(duì)5.5 V、400 A、2-Wire接口、Quad Voltion輸出8/10/12位數(shù)據(jù)Sheet
    發(fā)表于 04-14 10:28 ?0次下載
    AD5306/AD5316/AD5326:2.5V對(duì)5.5 V、400 A、<b class='flag-5'>2-Wire</b>接口、Quad Voltion輸出8/10/12位數(shù)據(jù)Sheet

    如何使用PC并口與2-Wire設(shè)備通信

    本篇應(yīng)用筆記目的是演示如何使用PC并口構(gòu)建一種快速、簡(jiǎn)單和經(jīng)濟(jì)的2-Wire(與I2C兼容)接口。本片應(yīng)用筆記專門(mén)為接收或者訂購(gòu)Dallas Semiconductor器件樣片且意識(shí)到他們需要與
    的頭像 發(fā)表于 06-09 17:08 ?1117次閱讀
    如何使用PC并口與<b class='flag-5'>2-Wire</b>設(shè)備通信

    C語(yǔ)言編寫(xiě)并行端口2軟件

    本應(yīng)用筆記討論了為有興趣為應(yīng)用筆記AN2中所述的并行端口硬件開(kāi)發(fā)3230-Wire軟件的客戶提供的C
    的頭像 發(fā)表于 06-13 17:17 ?533次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>編寫(xiě)</b><b class='flag-5'>并行</b><b class='flag-5'>端口</b><b class='flag-5'>2</b>線<b class='flag-5'>軟件</b>