?? main.c
字號:
#include <msp430x14x.h>
#include <string.h>
#include "xtype.h"
#define AT24LC64_ADDR 0xa0
#define IICSDA 0x01
#define IICSCL 0x20
#define IICSDAIn() P2DIR &= ~IICSDA
#define IICSDAOut() P2DIR |= IICSDA
#define IICSetSDA() P2DIR |= IICSDA;P2OUT |= IICSDA
#define IICClrSDA() P2DIR |= IICSDA;P2OUT &= ~IICSDA
#define IICReadSDA() P2IN & IICSDA
#define IICSetSCL() P1OUT |= IICSCL
#define IICClrSCL() P1OUT &= ~IICSCL
/********************************************************************************************************
** 函數名稱: WriteDelay
** 功能描述:
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
*-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void WriteDelay(void)
{
uint16 i;
for(i=0;i<8000;i++);
}
/********************************************************************************************************
** 函數名稱: IICStart
** 功能描述:
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
*-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IICStart(void)
{
IICSetSDA();
IICSetSCL();
IICClrSDA();
IICClrSCL();
}
/********************************************************************************************************
** 函數名稱: IICStop
** 功能描述:
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
*-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IICStop(void)
{
IICClrSDA();
IICSetSCL();
IICSetSDA();
IICSetSCL();
}
/********************************************************************************************************
** 函數名稱: IICReadAck
** 功能描述:
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
*-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
bit IICReadAck(void)
{
bit status;
IICSetSDA();
IICSetSCL();
IICSDAIn();
status=IICReadSDA();
IICClrSCL();
IICSDAOut();
return(status);
}
/********************************************************************************************************
** 函數名稱: IICWriteAck
** 功能描述:
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
*-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IICWriteAck(void)
{
IICSDAOut();
IICClrSDA();
IICSetSCL();
IICClrSCL();
IICSetSDA();
}
/********************************************************************************************************
** 函數名稱: IICNoAck
** 功能描述:
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
*-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IICNoAck(void)
{
IICSDAOut();
IICSetSDA();
IICSetSCL();
IICClrSCL();
}
/********************************************************************************************************
** 函數名稱: IICWriteByte
** 功能描述:
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
*-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
bit IICWriteByte(uint8 v)
{
uint8 i;
for(i=0;i<8;i++)
{
if(v &0x80)
{
IICSetSDA();
}
else
{
IICClrSDA();
}
IICSetSCL();
IICClrSCL();
v=v<<1;
};
return(IICReadAck());
}
/********************************************************************************************************
** 函數名稱: IICReadByteWithAck
** 功能描述:
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
*-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 IICReadByteWithAck(void)
{
uint8 rc,i;
rc=0;
IICSDAOut();
IICSetSDA();
IICSDAIn();
for(i=0;i<8;i++)
{
rc=rc<<1;
IICSetSCL();
rc=(IICReadSDA())?(rc | 0x01):(rc);
IICClrSCL();
};
IICWriteAck();
return(rc);
}
/********************************************************************************************************
** 函數名稱: IICReadByteWithoutAck
** 功能描述:
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
*-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 IICReadByteWithoutAck(void)
{
uint8 rc,i;
rc=0;
IICSDAOut();
IICSetSDA();
IICSDAIn();
for(i=0;i<8;i++)
{
rc=rc<<1;
IICSetSCL();
rc=(IICReadSDA())?(rc | 0x01):(rc);
IICClrSCL();
};
IICNoAck();
return(rc);
}
/********************************************************************************************************
** 函數名稱: EEPROMWriteData
** 功能描述:
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
*-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
bit EEPROMWriteData(uint16 word_address, uint8 *p, uint16 count)
{
uint16 i;
uint8 word_address1,word_address0;
uint8 slave_address;
slave_address = AT24LC64_ADDR;
i=0;
P1DIR |= IICSCL; //define to output
IICSDAOut(); //define to output
while(i<count)
{
word_address1 = word_address>>8;
word_address0 = word_address&0xff;
IICStart();
slave_address=slave_address&0xfe;
if(IICWriteByte(slave_address))return(1);
if(IICWriteByte(word_address1))return(1);
if(IICWriteByte(word_address0))return(1);
while(i<count)
{
if(IICWriteByte(*p))return(1);
word_address++;
p++;
i++;
if((word_address&0x001f)==0)
break;
};
IICStop();
WriteDelay();
};
return(0);
}
/********************************************************************************************************
** 函數名稱: EEPROMReadData
** 功能描述:
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
*-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
bit EEPROMReadData(uint16 word_address,uint8 *p,uint16 count)
{
uint16 i;
uint8 word_address1,word_address0;
uint8 slave_address;
slave_address=AT24LC64_ADDR;
i=0;
P1DIR |= IICSCL; //define to output
IICSDAOut(); //define to output
while(i<count)
{
word_address1=word_address>>8;
word_address0=word_address&0xff;
IICStart();
slave_address=slave_address&0xfe;
if(IICWriteByte(slave_address)) return(1);
if(IICWriteByte(word_address1)) return(1);
if(IICWriteByte(word_address0)) return(1);
IICStart();
slave_address=slave_address|0x01;
if(IICWriteByte(slave_address))return(1);
while(i<count)
{
word_address++;
i++;
if(((word_address&0x001f)==0)||(i==count))
{
*p=IICReadByteWithoutAck();
}
else
{
*p=IICReadByteWithAck();
};
p++;
if((word_address&0x001f)==0)break;
};
IICStop();
};
return(0);
}
void main(void)
{
uint8 Buf[128],stat;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1&=~XT2OFF; //XT2 available
BCSCTL2|=SELM1; //Mclk,SMCLK=8M
BCSCTL2|=SELS;
do
{
int k = 0xff;
IFG1&=~OFIFG;
for(k=0xff;k>0;k--);
}
while((IFG1&OFIFG)!=0);
for(stat=0;stat<128;stat++)
{
Buf[stat] = stat;
};
while(1)
{
stat = EEPROMWriteData(0x0000, Buf, 128);
memset(Buf,0,sizeof(Buf));
Buf[1]= stat;
stat = EEPROMReadData(0x0000, Buf, 128);
Buf[0]= stat;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -