日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 簡(jiǎn)單記錄LPC1788學(xué)習(xí)過(guò)程的寄存器操作---I2C學(xué)習(xí) 寄存器的直接操作可以比較直觀學(xué)習(xí),深入了解芯片功能! 特別注意事項(xiàng):如果使用I2C0的P0_27與P0_28時(shí)一定要加外部上拉電阻!#include "i2c_

簡(jiǎn)單記錄LPC1788學(xué)習(xí)過(guò)程的寄存器操作---I2C學(xué)習(xí)

寄存器的直接操作可以比較直觀學(xué)習(xí),深入了解芯片功能!

特別注意事項(xiàng):如果使用I2C0的P0_27與P0_28時(shí)一定要加外部上拉電阻!



#include "i2c_lpc1788.h"


/*------------I2C0初始化-------------*/
void I2C0_Init(uint32_t clk, uint32_t clockrate)
{
uint32_t temp;

LPC_IOCON->P0_27=0x21;
LPC_IOCON->P0_28=0x21;//配置IO

LPC_SC->PCONP "=(1<<7);//I2C0外設(shè)時(shí)鐘開(kāi)啟

temp=clk/clockrate;//時(shí)鐘頻率分頻寄存器
LPC_I2C0->SCLH=(uint32_t)(temp/2);
LPC_I2C0->SCLL=(uint32_t)(temp-LPC_I2C0->SCLH);

LPC_I2C0->CONCLR=(1<<2)|(1<<5)|(1<<6);//清標(biāo)志位
LPC_I2C0->CONSET=(1<<6); //使能I2C0主模式
}
/*------------發(fā)送起始信號(hào)------------*/
void I2C0_Start(void)

{

uint32_t i=2000;

LPC_I2C0->CONSET=(1<<5); //發(fā)送起始信號(hào)
while((LPC_I2C0->STAT !=0x08)&&(i--)); //等待返回狀態(tài)
LPC_I2C0->CONCLR=(1<<5); //清除發(fā)送標(biāo)識(shí)
}
/*------------發(fā)送停止信號(hào)-----------*/
void I2C0_Stop(void)
{
LPC_I2C0->CONSET=(1<<4); //發(fā)送停止信號(hào)
LPC_I2C0->CONCLR=(1<<3); //復(fù)位SI信號(hào)
}
/*------------寫(xiě)8位數(shù)據(jù)----------*/
void I2C0_WriteByte(uint8_t data)
{
LPC_I2C0->DAT=data;//寫(xiě)數(shù)據(jù)
LPC_I2C0->CONCLR=(1<<3); //數(shù)據(jù)載入后復(fù)位SI信號(hào)
}
/*------------寫(xiě)地址與讀寫(xiě)模式-----------*/
void I2C0_WriteAddr(uint8_t addr,uint8_t rORw)

{

uint32_t i=2000;

I2C0_WriteByte(addr + rORw); //后一位標(biāo)識(shí)讀或者寫(xiě)
if(rORw==1)while((LPC_I2C0->STAT!=0x40)&&(i--)); //讀-返回狀態(tài)
elsewhile((LPC_I2C0->STAT!=0x18)&&(i--));//寫(xiě)-返回狀態(tài)
}
/*------------寫(xiě)數(shù)據(jù)-----------*/
void I2C0_WriteData(uint8_t data)

{

uint32_t i=2000;

I2C0_WriteByte(data);
while((LPC_I2C0->STAT!=0x28)&&(i--)); //數(shù)據(jù)寫(xiě)完成返回狀態(tài)
}
/*------------讀8位數(shù)據(jù)-----------*/
uint8_t I2C0_ReadByte(uint8_t last)

{

uint32_t i=2000;

if(last) //讀最后一位數(shù)據(jù)

{

LPC_I2C0->CONCLR=(1<<2)|(1<<3);
while((LPC_I2C0->STAT!=0x58)&&(i--));
}
else

{

i=2000;

LPC_I2C0->CONCLR=(1<<2)|(1<<3);
while((LPC_I2C0->STAT!=0x50)&&(i--));
}
return LPC_I2C0->DAT;//數(shù)據(jù)讀
}
/*------------控制PCF8574-----------*/
void WritePCF8574(uint8_t addr,uint8_t pBuffer)
{
I2C0_Start();
I2C0_WriteAddr(addr,0); //寫(xiě)地址-寫(xiě)模式
I2C0_WriteData(pBuffer); //寫(xiě)數(shù)據(jù)
I2C0_Stop();

}


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉