标题:
PMS154C 24C02 DOME
[打印本页]
作者:
tianshizhiren
时间:
2024-11-3 13:52
标题:
PMS154C 24C02 DOME
//********************************************************************************//
// 功能名称: 24C02模块(EEPROM)
// 功能编号: 180201
// 适应芯片: 适用于所有芯片
//--------------------------------------------------------------------------------//
//程序说明:
// 封装引脚图如下
// ┌─┐
// A0┤ ├VCC
// A1┤ ├WP
// A2┤ ├SCL
// GND┤ ├SDA
// └─┘
// 引脚A0~A2地址输入引脚,案例全接GND
// WP引脚写保护,接GND进行正常读写,接VCC只读模式,案例接GND
// 案例为写入一个地址0数据49,然后再读出该地址的数据
// 地址和数据可以随意改动,数据的范围为0~255,
// 超过的范围请参考连写或连读
//注意事项:
// 1.案例为PMS154C,其他芯片原理都相同
// 2.连读或连写请参考对应的程序
//********************************************************************************//
#include "extern.h"
#define _5us 5*2
bit SCL : PA.3;//用于产生器件所有数据发送或接收的时钟
bit SDA : PA.4;//用于器件所有数据的发送或接收
byte Address;
byte data;
byte Read_Data;
byte Write_Data;
void init(void)//初始化函数
{
SCL = 1;
.delay _5us;
SDA = 1;//控制信号拉高
.delay _5us;
}
void start(void)//启动信号子函数//向ROM发送一个开始的信号
{
SDA = 1;
.delay _5us;
SCL = 1;
.delay _5us;
SDA = 0;
.delay _5us;
}
void stop(void)//停止信号子函数//向ROM发送一个停止的信号
{
SDA = 0;
.delay _5us;
SCl = 1;
.delay _5us;
SDA = 1;
.delay _5us;
}
void respons(void)//应答信号子函数//接收一信号后应答
{
$ SDA in,pull;
.delay 100;
SCL = 1;
.delay _5us;
while(SDA==1)
nop;
SCL = 0;
.delay _5us;
$ SDA out,high;
.delay 100;
}
void write_byte(void)//写入一个字节数据//向E2PROM写数据
{
byte temp = 0,i = 8;
while(i--)
{
SCL = 0;//数据可以改变
.delay _5us;
temp = data & 0x80;//保留最高位
if(temp)//写一位
SDA = 1;
else
SDA = 0;
.delay _5us;
data <<= 1;//要存的数据左移一位
SCL = 1;//数据稳定不能写了
.delay _5us;
}
SCL = 0;
.delay _5us;
SDA = 1;//稳定数据
.delay _5us;
}
void read_byte(void)//读回一个字节
{
byte i = 8;
SCL = 0;//数据改变
.delay _5us;
SDA = 1;//可读信号
.delay _5us;
$ SDA in,pull;
.delay 100;
Read_Data = 0;
while(i--)
{
Read_Data = Read_Data << 1;//写入时从高位写,读出时也一样
SCL = 1;//数据稳定,可从SDA读出一位
.delay _5us;
if(SDA)
Read_Data = Read_Data | 0x01;
else
Read_Data = Read_Data & 0xfe;
SCL = 0;//数据改变准备下一位
.delay _5us;
}
$ SDA out,high;
.delay 100;
}
void write_add(void)//片内随意地址写任意数//根据起始地址、数据个数及数据写入E2PROM中
{ //Write_Data address变量
start();//起始
data = 0xa0;//E2PROM地址(ATC02为0xa0)//器件地址+写控制位
write_byte();
respons();//应答
data = address;//写入数据要存放的地址
write_byte();
respons();//应答
data = Write_Data;//写入数据
write_byte();
respons();//应答
stop();//终止
}
void read_add(void)//片内随意地址读数据//根据起始地址和读出个数,从E2PROM中读出一串数据
{ //address变量
start();//起始
data = 0xa0;//器件地址+写控制位
write_byte();
respons();//应答
data = address;//数据地址
write_byte();
respons();//应答
start();//起始
data = 0xa1;//器件地址+读控制位
write_byte();
respons();
read_byte();
.delay 1000;
stop();//停止
}
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/8, IHRC=16MHz, VDD=5V;
$ SDA out,high;
$ SCL out,high;
Address = 0;
init();
.delay 100;
while (1)
{
Address = 0;//地址
Write_Data = 49;//数据
write_add();//写入一个数据
.delay 5000*2;//延时一下
Address = 0;
read_add();//读出写入的数据
nop;
}
}
void Interrupt (void)
{
pushaf;
if (Intrq.T16)
{ // T16 Trig
// User can add code
Intrq.T16 = 0;
//...
}
popaf;
}
复制代码
原理图: 无
仿真: 无
代码:
PMS154C 24C02.zip
(11.35 KB, 下载次数: 1)
2024-11-3 13:51 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1