📄 eerw.c
字号:
/***************************************************************************************
the program is eeprom read and write control program
***************************************************************************************/
#include<ht46r47.H>
#define uchar unsigned char
#define uint unsigned int
uchar Wr_Address;
uchar WrData_address;
unsigned char temp_set ; //set temperature variable of the whole
unsigned char ration_setsgl ;
unsigned char ration_setdou ;
bit ErrorBit ;
/**************************eeprom definition*******************************************/
#define scl_c _15_3
#define sda_c _19_0 //方向控制位
#define scl _pb3 //PB3 口
#define sda _pd0 //PD0 口
#define NOP5() _nop();_nop();_nop();_nop();_nop();
/*******************************************************************
*******************************************************************/
void start()
{
sda_c=0; //pin口设置为输出模式
scl_c=0;
sda=1;
NOP5();
scl=1;
NOP5();
sda=0;
NOP5(); //起始信号 SCL为高电平时,SDA的下降沿
scl=0; //SCL为低电平时,SDA可以变化
NOP5();
}
/**************************************************************/
void NoAck()
{
sda=1;
NOP5();
scl=1;
NOP5();
scl=0;
NOP5();
}
/*****************************************************************/
void Ack()
{
sda=0;
NOP5();
scl=1;
NOP5();
scl=0;
NOP5();
sda=1;
}
/*************************************************************/
void stp()
{
sda=0;
NOP5();
scl=1;
NOP5(); //停止信号 SCL高电平时,SDA上升沿
sda=1;
NOP5();
scl=0;
NOP5();
}
/***************************************************************/
void testack()
{
sda=1;
sda_c=1; //设置为输入
NOP5();
scl=1;
NOP5();
ErrorBit=sda;
NOP5();
scl=0;
sda_c=0; //设置为输出
// return(ErrorBit);
}
/***************************************************************/
/*******************写一个字节***********************************/
void send(uchar Data)
{
uchar i,temp=0;
temp=Data;
for(i=0;i<8;i++)
{
sda=temp&0x80;
NOP5();
scl=1;
NOP5();
scl=0;
NOP5();
temp<<=1;
}
}
/*********************读一个字节***********************************/
uchar Read()
{
uchar i,BYTE=0;
sda_c=1; //设置为输入
for(i=0;i<8;i++)
{
scl=1;
BYTE<<=1;
BYTE|=sda;
scl=0;
}
sda_c=0; //设置成输出模式
Ack();
return(BYTE);
}
/////////////////1ms////////////////////////////////////////
void delay_ms(unsigned char n)
{
unsigned int temp;
for(;n!=0;n--)
{
for(temp=1120;temp!=0;temp--) ;
}
}
/****************************************************/
void iic_write(uchar Wr_Address,uchar WrData_Address,uchar data )
{
start();
send(Wr_Address);
testack();
send(WrData_address);
testack();
send(data); //发送数据
testack();
stp();
delay_ms(10);
}
///////////////////////////////////////////////////////////////////////////
uchar iic_read(uchar Wr_Address,uchar WrData_Address )
{
unsigned char a ;
start();
send(Wr_Address); //发送设备地址0A0H
testack();
send(WrData_address); //发送数据地址
testack();
start();
send(0xa1); //设置从机为读模式,读模式第0位是1 0A1h
testack();
a =Read();
NoAck();
stp();
return a ;
}
/***************************************************************************************
the program is main program
***************************************************************************************/
void main (void)
{
_pac=0x00; //set pa output
_pbc=0x00;
_pdc=0x00;
iic_write(0xa0 , 0x00 , 65) ;
delay_ms(100) ;
iic_write(0xA0 , 0x10 ,95);
delay_ms(100) ;
iic_write(0xA0 , 0x20 , 180);
delay_ms(100) ;
ration_setsgl = (iic_read(0xA0 , 0x10));
if(ration_setsgl<=35)ration_setsgl = 98 ;
ration_setdou = (iic_read(0xA0,0x20)) ;
if(ration_setdou<=100)ration_setdou = 174 ;
temp_set = (iic_read(0xA0 , 0x00 )) ;
if(ErrorBit)temp_set=62; //如果写入有问题,默认102度
while(1) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -