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

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