新聞中心

PIC16F72-AT24C02讀寫

作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
用PIC單片機(jī)控制EEPROM AT24C02讀寫操作程序

/*************PIC16F72單片機(jī)程序******************************/
/*********************************************************************/
/*****File Function : PIC 讀寫AT24C02 *****/
/*****Program Author : ZhengWen(ClimberWin)*****/
/*****MCU : PIC16F72 外部晶振12MHZ*****/
/*****Compile Date : 2011/04/15 *****/
/*****Edition Info : V1.0 *****/
/*************************************************************/
#include
#include"WIN24C02.H"
__CONFIG(11111110111010);//bit13-bit7=1;bit6 欠壓使能(1 enable);bit5=1;bit4 代碼保護(hù)(0保護(hù));
//bit3 上電延時(shí)(0 enable);bit2 看門狗(1 enable);bit1-bit0 時(shí)鐘選擇 (11 RC 10 HS 01 XT OO LP)

本文引用地址:http://butianyuan.cn/article/201611/316072.htm

#define uchar unsigned char
#define uint unsigned int

void Init(void); //初始化子程序
void delayms(unsigned int count);

#define KEY RB0//外部中斷


#define LED16 RC0
#define LED15 RC1
#define LED14 RC2
#define LED13 RC3
#define LED12 RC4
#define LED11 RC5
#define LED10 RC6
#define LED9 RC7


/*********************************************/
void delayms(unsigned int count)
{
uint i,j;
for(i=0;ifor(j=0;j<120;j++);
}
/*********************************************/
void Init(void)
{

PORTB = 0B00000000;
PORTC = 0B00000000;

TRISB = 0B00000001;//設(shè)置RB0為輸入,作為按鍵口
TRISC = 0B00000000;//設(shè)置RC輸出

RBPU=0;//PORTB上拉使能

}


////////////主程序/////////////////////////
void main (void)
{
uint win;
uint i;

Init();//初始化程序
delayms(100);
PORTC=0XFF;
PORTB=0XFF;
PORTA=0XFF;


WIN24C02_write(0x01,0x81);//存數(shù)據(jù)到EEPROM
delayms(50);
WIN24C02_write(0x02,0x18);//存數(shù)據(jù)到EEPROM
delayms(50);

while(1)
{
delayms(1000); //延時(shí)
PORTC=~WIN24C02_read(0x01);//讀取24C02地址00H中的數(shù)據(jù)
delayms(1000); //延時(shí)
PORTC=~WIN24C02_read(0x02);//讀取24C02地址00H中的數(shù)據(jù)
}

}

頭文件:

WIN24C02.h

/**********************中文版本*******************************/
/*****功能描述 : PIC單片機(jī) 24C02 讀寫程序*****/
/*****作 者 : ClimberWin *****/
/*****編寫日期 : 2011年4月14日*****/
/*****版本信息 : V1.0 *****/
/*****修改日期 : *****/
/*************************************************************/
#ifndef __WIN24C02_H__
#define __WIN24C02_H__

#include

#define uchar unsigned char
#define uint unsigned int


#define SCL RB2 //SCL 引腳定義
#define SDA RB1 //SDA 引腳定義

uchar WIN24C02_read(uchar address); //從24c02的地址address中讀取一個(gè)字節(jié)數(shù)據(jù)

void WIN24C02_write(uchar address,uchar info); //向24c02的address地址中寫入一字節(jié)數(shù)據(jù)info

void WIN24C02_init(); //24C02初始化子程序

void delay1(uchar x);

void start();

void stop();

void writex(uchar j);

uchar readx();

void clock();

void delay1(uchar x)
{
uint i;
for(i=0;i}


void WIN24C02_init()
{
TRISB = 0B00000001;//設(shè)置RB1 SDA為輸出
SCL=1;
asm("NOP");
SDA=1;
asm("NOP");
}

void start()
{
TRISB = 0B00000001;//設(shè)置RB1 SDA為輸出
SDA=1;
asm("NOP");
SCL=1;
asm("NOP");
SDA=0;
asm("NOP");
SCL=0;
asm("NOP");
}

void stop()

{
TRISB = 0B00000001;//設(shè)置RB1 SDA為輸出
SDA=0;
asm("NOP");
SCL=1;
asm("NOP");
SDA=1;
asm("NOP");
}

void writex(uchar j)

{
uchar i,temp;
TRISB = 0B00000001;//設(shè)置RB1 SDA為輸出
temp=j;

for (i=0;i<8;i++)
{

SCL=0;
asm("NOP");

if (temp & 0x80) //讀取
{
SDA=1;
}
else
{
SDA=0;
}
temp=temp<<1;
//SDA=CY;


asm("NOP");
SCL=1;
asm("NOP");
}

SCL=0;
asm("NOP");
SDA=1;
asm("NOP");

}

uchar readx()
{
uchar i,j,k=0;
TRISB = 0B00000001;//設(shè)置RB1 SDA為輸出

SCL=0;
asm("NOP");

SDA=1;

TRISB = 0B00000011;//設(shè)置RB1 SDA為輸入
for (i=0;i<8;i++)
{
asm("NOP");

SCL=1;
asm("NOP");

if (SDA==1) j=1;
else j=0;
k=(k<<1)|j;
SCL=0;

}
TRISB = 0B00000001;//設(shè)置RB1 SDA為輸出

asm("NOP");
return(k);

}

void clock()

{
uchar i=0;
TRISB = 0B00000011;//設(shè)置RB1 SDA為輸入
SCL=1;

asm("NOP");
while ((SDA==1)&&(i<255))i++;
SCL=0;
asm("NOP");
TRISB = 0B00000001;//設(shè)置RB1 SDA為輸出

}

uchar WIN24C02_read(uchar address)

{
uchar i;
start();
writex(0xa0);
clock();
writex(address);
clock();
start();
writex(0xa1);
clock();
i=readx();
stop();
delay1(10);
return(i);

}

void WIN24C02_write(uchar address,uchar info)

{

// GIE=0;//關(guān)閉中斷
start();
writex(0xa0);
clock();
writex(address);
clock();
writex(info);
clock();
stop();
// GIE=1;//打開中斷
delay1(50);

}

#endif



關(guān)鍵詞: PIC16F72AT24C02讀

評(píng)論


技術(shù)專區(qū)

關(guān)閉