资源简介
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
相关资源
- C8051F340 SMBus的c程序代码
- STM32F4 I2C从机中断
- 80C51F040使用手册--中文
- DM8050_Quick_Reference.pdf
- RTL8189ES_linux_v5.3.3.1_27418.20180502.zip
- CrazyBox_20180509
- c8051f040例程
- C8051F040开发板原理图
- SOT-23-3包含3D
- c8051F040例程(可移植)
- Multisim10国产三极管数据库如SS8050.ra
- SMBUS1.1 SMBUS110 中文注释版
- 最详细smbus命令解析
- System Management Bus (SMBus) Specificatio
- c8051f040单片机的全部详细例程c程序
- 从pspice导出供multisim用的9012131415;805
- Scamper-20180504源代码
- MLX90614和STC12C5604AD的SMBusPWM;_通信
- 901390128050,8550三极管的Multisim及SPIC
评论
共有 条评论