当前位置:首页 > 单片机 > 单片机
[导读] /******************************************************************** ** File : I2C.c " Master Read Write | ** Version : 1.0 ** Description:

 

/******************************************************************

**
** File : I2C.c " Master Read Write |
** Version : 1.0
** Description: I2C 查询法读写24C02
** Author : LightWu
** Date : 2013-4-26
** 必须注意多字节数据读取时,发送停止位需要在最后一个字节读取之前
** 否则数据读取后,停止位发送容易失败,导致从机接收不到停止位。
*******************************************************************/


#include


//注意:两次发送间隔必须要有延时,否则不能再次发送,串口发送格式:


unsigned char PTxData[250]; // Pointer to TX data
unsigned char PRxData[250]; // Pointer to RX data




void UartInit(void)
{
if (CALBC1_1MHZ==0xFF) // If calibration constant erased
{
while(1); // do not load, trap CPU!!
}
DCOCTL = 0; // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P3SEL |= 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600; (104)decimal = 0x068h
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
}
void UartSend( unsigned char Data )
{
UCA0TXBUF = Data; // TX -> RXed character
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?,发送缓冲区空

}
void IICInit(void)
{
UCB0CTL1 |= UCSWRST; // Enable SW reset
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
UCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0xA0>>1; // Slave Address is ,注意地址需要右移一位,24C02地址为0XA0,故要写入0X50
// 7位地址模式,器件会发送一位读写位,正好8位。
UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation

}


/*******************************************
函数名称:Ucb0I2c_Start(void)
功 能:I2C主机模式,发送写起始条件
参 数:无

返回值 :无
********************************************/
void Ucb0I2c_Start(void)
{
UCB0I2CSA = 0x50; // Slave Address is 0xd0
while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent
UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition
while(!(IFG2&UCB0TXIFG)); //等待传送完
IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag
}
void IICSendData( unsigned char Addr ,unsigned char Data )
{
int i;
for(i=3000;i>0;i--); //两次发送间隔必须要有延时,否则不能再次发送


Ucb0I2c_Start();

UCB0TXBUF = Addr; // Load TX buffer
while(!(IFG2&UCB0TXIFG)); //等待传送完成
IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag

UCB0TXBUF = Data; // Load TX buffer
while(!(IFG2&UCB0TXIFG)); //等待传送完成
IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag

UCB0CTL1 |= UCTXSTP; // I2C stop condition

}


void IICReadData( unsigned char Addr )
{
int i;
for(i=3000;i>0;i--); //两次发送间隔必须要有延时,否则不能再次发送

Ucb0I2c_Start();

UCB0TXBUF = Addr; // Load TX buffer
while(!(IFG2&UCB0TXIFG)); //等待传送完成
IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag

UCB0CTL1 &= ~UCTR ; // I2C RX, Read
UCB0CTL1 |= UCTXSTT; // I2C RX, start condition

while(!(IFG2&UCB0RXIFG)); //等待接收完成
IFG2&=~UCB0RXIFG;
PRxData[0] = UCB0RXBUF; // Read RX buffer
while(!(IFG2&UCB0RXIFG)); //等待接收完成
IFG2&=~UCB0RXIFG;
PRxData[1] = UCB0RXBUF; // Read RX buffer
while(!(IFG2&UCB0RXIFG)); //等待接收完成
IFG2&=~UCB0RXIFG;
PRxData[2] = UCB0RXBUF; // Read RX buffer
while(!(IFG2&UCB0RXIFG)); //等待接收完成
IFG2&=~UCB0RXIFG;

//必须注意发送停止位在最后一个字节读取之前
UCB0CTL1 |= UCTXSTP; // I2C stop condition

PRxData[3] = UCB0RXBUF; // Read RX buffer
}
int main(void)
{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL |= 0x06; // Assign I2C pins to USCI_B0

IICInit();

UartInit();


while (1)
{
UartSend('M');

IICSendData(0X00,'A');
IICSendData(0X01,'B');
IICSendData(0X02,'C');
IICSendData(0X03,'D');
IICSendData(0X04,'E');
IICSendData(0X05,'F');
IICSendData(0X06,'H');
IICSendData(0X07,'J');



IICReadData(0x00);
UartSend(PRxData[0]);
UartSend(PRxData[1]);
UartSend(PRxData[2]);
UartSend(PRxData[3]);



}
}

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

开创中国文旅产业AI深度应用新样本 北京2025年8月22日 /美通社/ -- 以下为来自亿欧的报道: 8月22日,桂林旅游股份有限公司旗下银子岩景区联合合作伙伴正式发布全球首款AI伴游财神玩具 —— "五...

关键字: AI IP 数字化 硬件

北京2025年8月18日 /美通社/ -- 2025年8月,软通动力集团一项关键决策引发行业瞩目——以自有资金8亿元向全资子公司软通计算机有限公司完成实缴增资,使其注册资本增加至23亿元。这笔战略注资不仅彰显集团对信创核...

关键字: AI 硬件 计算机 智能化

在科技飞速发展的今天,硬件更新换代的速度日新月异。然而,许多企业或个人仍在使用着老旧硬件设备,这些设备虽然性能有限,但在一些对性能要求不高的场景中,仍有其存在的价值。通过合理的内核参数调优和轻量级服务部署方案,我们可以充...

关键字: 硬件 内核参数

北京 2025年5月27日 /美通社/ -- 日前,软通华方(清华同方)推出全新超锐T40-Z70国产笔记本,主打更轻、更强、更安全。这款新品国产笔记本采用铝合金材质机身,搭载国产高性能兆芯开先KX-7000八核处理器...

关键字: 笔记本电脑 铝合金 硬件 BSP

随着科技的飞速发展,人工智能(AI)已经从科幻作品中的概念逐渐走进了我们的日常生活,深刻地改变着各个行业的面貌。在这一变革中,硬件作为 AI 技术运行的物理基础,其重要性不言而喻。对于硬件工程师而言,如何在人工智能时代找...

关键字: 人工智能 硬件 工程师

上海 2025年5月15日 /美通社/ -- 近日在CHINASHOP2025期间,商米以"SUPER Solution双系统高效切换助力商业环保"的案...

关键字: 硬件 BSP 双系统 大赛

在软件和硬件之间,似乎还有一些不软不硬的存在?没错,那就是固件(Firmware)。固件,其实也是一种软件,但他比普通的软件更硬。一般是不能随便改的,改了以后可能整个系统都得完蛋。它是连接普通软件和硬件的桥梁。

关键字: 软件 硬件

北京2025年4月23日 /美通社/ -- 4月22日,在千年大运河的粼粼波光中,软通华方"京牌京产"首台下线仪式于国家网络安全产业园区(通州园)隆重举行。通州区委常委、副区长吴孔安,软通动力集团董事...

关键字: 数字经济 软件 数字化 硬件

北京2025年4月20日 /美通社/ -- 4月19日,在北京亦庄举办的2025北京亦庄半程马拉松暨人形机器人半程马拉松赛开跑,20支人形机器人参赛队和9000余名人类跑者同时出发。这是全球首个人形机器人半程马...

关键字: 机器人 BSP 大众 硬件

创新企业、行业专家齐聚一堂,洞察趋势,共探破局之路 深圳2025年4月10日 /美通社/ -- 3月26日,世界经理人携手消费者科技及创新平台CTIS、深圳工业展ITES、深圳国际电子智能制造展EIMS联合举办&quo...

关键字: 硬件 TE AI 供应链
关闭