資源簡介
P89LPC932硬件I2C軟件包,此軟件包由C語言編寫,是以查詢方式完成各種總線操作的,在使用前應(yīng)對總線進(jìn)行檢查,并使用看門狗,以防等待總線而造成死機(jī)。

代碼片段和文件信息
/*******************************************************************
* P89LPC932硬件I2C軟件包(主)
*?1??使用I2C總線軟件包時P1.2,P1.3切勿寫為0,并要設(shè)置為開漏輸出。
*?2??總線定義為P1.2=SCL,P1.3=SDA,需外接上拉電阻2-10k。
*?3??相應(yīng)寄存器:
*????地址寄存器??I2ADR???用于存放自身從地址(從方式時才有用)
*????數(shù)據(jù)寄存器??I2DAT???接收/發(fā)送數(shù)據(jù)用
*????控制寄存器??I2CON???用于硬件I2C的設(shè)置、使能、啟動、結(jié)束,
*???????????????????????應(yīng)答控制,中斷標(biāo)志等。
*????狀態(tài)寄存器??I2STAT??指示I2C總線的操作狀態(tài)碼,高5位有效,
*???????????????????????若I2C中斷志置位,可查詢此寄存器判斷
*????????????????????????總線情況。
*????SCL占空比寄存器??I2SCLH、I2SCLL??設(shè)置SCL的頻率發(fā)生。
*????????????????????????
*????此軟件包是以查詢方式完成各種總線操作的,在使用前應(yīng)對總線進(jìn)行檢查,并
*?使用看門狗,以防等待總線而造成死機(jī)。
* ?文件名:HI2C_C51.C
*??????????????????????????????????更新時間:2002.11.05
*******************************************************************/
/*******************************************************************
*修訂說明:
*1.增加無子地址發(fā)送多字節(jié)數(shù)據(jù)函數(shù)?ISendStrExt
*2.增加無子地址讀取多字節(jié)數(shù)據(jù)函數(shù)?IRcvStrExt
*
* 2004.12.25
*******************************************************************/
#include?“hi2c_c51.h“
/*?定義LPC932的I2C相關(guān)寄存器的定義?*/
sfr I2ADR??=?0xDB;
sfr?? I2DAT??=?0xDA;
sfr I2CON??=?0xD8;
sfr I2STAT?=?0xD9;
sfr I2SCLH?=?0xDD;
sfr I2SCLL?=?0xDC;
sbit STA ???=?I2CON^5;
sbit SI ???=?I2CON^3;
#define?uchar? unsigned?char
#define?GENERATE_STOP????????0x54?????/*?置位?STO?復(fù)位?STA?、?SI??????????*/
#define?RELEASE_BUS_ACK??????0x44?????/*?復(fù)位?STOSTASI?并置位??AA?(ack)??*/
#define?RELEASE_BUS_NOACK????0x40?????/*?復(fù)位?STOSTASI?并置位?AA?(noack)?*/
#define?RELEASE_BUS_STA??????0x64?????/*?起動總線/重新起動總線?置位?STA???*/
/*******************************************************************
*??????????????????申請總線
*?功能:進(jìn)行I2C總線的初始化--包括時鐘選擇,I2C使能,發(fā)送起始信號等等。
*???????I2EN為1,設(shè)置為主機(jī);CRSEL位為0,使用內(nèi)部SCL發(fā)生器。
*******************************************************************/
void?GetBus()
{?I2SCLH?=?15; /*?設(shè)置SCL高電平的PCLK周期數(shù)? ????*/
??I2SCLL?=?15;??????????????/*?設(shè)置SCL低電平的PCLK周期數(shù),6MHz時為100Kbit/S?*/
??/*?申請成為主機(jī),起動總線。使用內(nèi)部SCL發(fā)生器,I2EN和AA置位。??????????????*/
??I2CON?=?RELEASE_BUS_STA;?
??while(?SI==0?);???????? /*?等待起始位的發(fā)送?????????????????????????????*/
}
/*******************************************************************
*????????????????????發(fā)送數(shù)據(jù)函數(shù)
*?功能:用于向總線發(fā)送數(shù)據(jù)?
*?入口參數(shù):ACC???待發(fā)送的數(shù)據(jù)???????????????????
*******************************************************************/
void?SendByte(uchar?c)
{?I2DAT?=?c;
??I2CON?=?RELEASE_BUS_ACK;???? /*?清除SI位等等??? */
??while(?SI==0?);???????? /*?等待數(shù)據(jù)的發(fā)送? */
}
/*******************************************************************
*????????????????????向無子地址器件發(fā)送字節(jié)數(shù)據(jù)函數(shù)???????????????
*?功能:從啟動總線到發(fā)送地址,數(shù)據(jù),結(jié)束總線的全過程。
*?入口參數(shù):sla 從器件地址
*???????????c 待發(fā)送的數(shù)據(jù)
*?出口參數(shù):返回1表示操作成功,否則操作有誤。
********************************************************************/
bit?ISendByte(uchar?sla?uchar?c)
{?GetBus();????????????????? /*?啟動總線????????????????????*/
??SendByte(sla);???????????? /*?發(fā)送器件地址,并接收應(yīng)答位??*/
??if(?I2STAT!=0X18?) /*?無從機(jī)應(yīng)答則退出操作????????*/
??{?I2CON?=?GENERATE_STOP;
????return(0);
??}
??SendByte(c);?????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3858??2004-12-27?08:37??HI2C_C51.h
?????文件???????9233??2010-03-31?15:19??HI2C_C51.c
-----------?---------??----------?-----??----
????????????????13091????????????????????2
- 上一篇:熱電偶查表
- 下一篇:C語言編寫的空間桁架計算程序
評論
共有 條評論