91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 155.18 KB
    文件類型: .rar
    金幣: 1
    下載: 0 次
    發布日期: 2024-09-14
  • 語言: 其他
  • 標簽: 8050??F040??smbus??i2c??

資源簡介

8051F040SMBUS多機通信包括SMBUS的總線設計及程序的詳細設計與實現,8051F040的smbus與I2c兼容

資源截圖

代碼片段和文件信息

#include?“i2c.h“

/*****************SMBUS中用到得常量*************************************/
#define?WRITE?0xfe?//?寫方向位
#define?READ?0x01?//?讀方向位

#define?SMB_BUS_ERROR?0x00?//?對所有方式總線錯誤
#define?SMB_START?0x08?//?(MT?&?MR)?起始條件已發送
#define?SMB_RP_START?0x10?//?(MT?&?MR)?重復起始條件
/*********************************************************/

/**************內部所用函數*****************/
//主從設備都用到的函數
static?void?SMBUS_ISR();???//I2C中斷函數
static?void?DoSomething();?//用作出錯處理
//主器件所用函數
static?void?AddressSend(unsigned?char?CurrentState);
static?void?ResetDataQueue();??????//將數據發送重置
static?void?DataSendMaster();??????//主設備發送數據的函數
static?void?DataReceiveMaster();???//主設備接收數據的函數
//從器件所用函數
static?void?DataSendSlave();???????//從設備發送數據的函數
static?void?DataReceiveSlave();????//從設備接收數據的函數
static?void?ResetSlaveBuffer();???//重置從設備接收器
/*******************************************/

/***************內部所用數據*******************/

//主設備用到的數據
static?unsigned?char?i2csendchecker?=?0;?//主設備用于校驗
static?unsigned?char?i2cslaveaddress?=?0;?//需要連接的從設備地址
static?unsigned?char?*smbusdata*smbustranslatestate;//smbusdata:要發送的數據
?????????????????????????????????????????????????//smbustranslatestate:數據傳輸狀態?是否傳輸完畢
static?unsigned?char?i2ctempstate?=?0;//從設備地址+傳輸狀態,傳輸狀態有正在傳輸,傳輸完畢,數據無法到達3種
??????????????????????????????????????//其實是一個臨時數據,會被賦值給*smbustranslatestate
static?unsigned?char?i2cerror?=?0i2ccommandstore;//commandstore用于暫存smbus發送命令
static?unsigned?char?i2cresendcount?=?0;//resendcount重發次數的計數如果重發次數大于10次則認為是不能連通
?????????????????????????????????????//主設備用到的計數器
static?unsigned?char?smbus_send_size;//需要發送的字節數
static?unsigned?char?smbus_send_counter;//發送計數器
//從設備用到的數據
static?unsigned?char?*i2creceivedbuf;//接收緩沖區?
static?unsigned?char?smbus_receive_size;//需接收的字節數
static?unsigned?char?smbus_recieve_counter;//接收計數器
static?unsigned?char?i2creceivecommand;?//接收的命令
static?unsigned?char?i2creceivechecker;?//接收時用到的檢驗碼
static?unsigned?char?i2cmasteraddr;?//某次通信主設備地址
/****************************************/


/********************對外提供得接口*************************************/
void?CreateI2CDevice(unsigned?char?DeviceAddressunsigned?char?*ReceiveData)
//創建i2c的通信設備?需要配置緩沖區以及收到的字節數大小和收到字節計數器
{
???unsigned?char?oldpage;
???i2creceivedbuf?=?ReceiveData;//配置數據接收的緩沖區
???smbus_receive_size=0;????//需接收的字節數為0當收到從主設備發送過來的字節數之后會改變這個值
???smbus_recieve_counter=0;??//計數器,在接收時改變這個值
???i2creceivecommand=0;
???i2creceivechecker=0;
???//操作寄存器
???oldpage=SFRPAGE;
???SFRPAGE=SMB0_PAGE;
???SMB0CN?=?0x44;??????????????????//使能I2C端口及應答位
???SMB0CR?=?-25;???????????????????//配置I2C設備速度到達400k?bits
???SMB0ADR?=?DeviceAddress;????????//設置設備地址
???SI?=?0;??????????????????????????//清除中斷標志
???SFRPAGE=oldpage;
}
void?I2CSend(unsigned?char?slavedeviceaddrunsigned?char?*comu_dataunsigned?char?datasizeunsigned?char?commandunsigned?char?*translatestate)
//發送數據?slavedeviecaddr:從設備地址,comu_data需要發送的數據,datasize,發送數據的字節數
//translatestate傳輸狀態
//0000數據正在傳輸中
//0001數據傳輸經重試后仍無法

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件??????16763??2009-05-19?11:05??i2c.c

?????文件?????423424??2009-05-20?15:49??I2C接口設計.doc

?????文件???????1161??2009-05-19?11:02??i2c.h

-----------?---------??----------?-----??----

???????????????441348????????????????????3


評論

共有 條評論