⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eerw.c

📁 c语言写的读写24的holtek程序
💻 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 + -