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

📄 public.c

📁 基于ADE7166/7169的单相表程序
💻 C
字号:

/************************************
** 函数原型: void Delay(uchar MS); **
** 功    能: 延时time=MS ms.     **
************************************/
void Delay(unsigned char MS)
{
 uchar ucA,ucB;

 for(ucA=0;ucA<MS;ucA++) for(ucB=0;ucB<0xf0;ucB++);
}


uchar HEX2BCD(uchar ucA)
{
  return(ucA/10*0x10+ucA%10);
}

/************************************
** 函数原型: void Error(void);     **
** 功    能: 出错后进入死循环.     **
************************************/
/*
void  Error(void)
{
  di();
  while(1){;}
}
*/
/************************************
** 函数原型: void watchdog(void);  **
** 功    能: 复位IMP813.           **
************************************
void  watchdog(void)
{
  CLRWDT();
}


// 函数原型: void HEX2BCD(uchar a);
// 功    能: HEX码转换为BCD码.     


uchar BcdInt(uchar ucA)
{
 uchar	g;
 
 g=ucA&0x0f;			// 00000x.00 
 g+=1;

 if(g<0x0a){
    ucA++;
    return(ucA);
 }

 g=ucA&0xf0;			// 0000x0.00 
 g+=0x10;

 if(g<0xa0){
   
    return(g);
 }
 else  return(0);
}
//
// 函数原型: void BCD2HEX(uchar b);**
// 功    能: BCD码转换为HEX.       **
//

// ************************************
// ** 函数原型: void int2HEX(int b);**
// ** 功    能: BCD码转换为HEX.       **
// ************************************/
uchar INT2HEX(uchar ucA)
{
  return ((ucA/16)*16+(ucA%16));
}

uchar BCD2HEX(uchar ucA)
{
  return(((ucA&0xf0)>>4)*10+(ucA&0x0f));
}
// ************************************
// ** 函数原型: void BCD2INT(uchar b);**
// ** 功    能: BCD码转换为INT.       **
// ************************************/
int HEX2INT(uchar ucA)
{
	return ((ucA/16)*16+ucA%16);
}
/************************************
** 函数原型: void BCDInc(uchar n); **
** 功    能: BCD码加1.             **
************************************/
//
//uchar BCDInc(uchar ucN)
//{
 // uchar ucA;

 // ucA=((ucN & 0xf0)>>4)*10+(ucN & 0x0f);
 // ucA++;
 // if(ucA>=100) { return(0);}
 // else         { return(ucA/10*0x10+ucA%10);}
//}
//

// **************************************************************
// ** 函数原型: bit readEEone(uchar instr,uchar addr,uchar num); **
// ** 功    能: 从S42WD42中读取num个字节的数据,采用序列读操作方  **
// **           式从片内Address地址开始连续读取数据.S42WD42不接  **
// **           受指定的地址则返回0(FALSE).                      **
// ***************************************************************/

void readEEone(uchar instr,uchar addr,uchar num)
{
  uchar i;
 for(i=0;i<num;i++)
  {
    EEbuf[i]=E_READ(addr+i);
  }   
    
 
}

// **************************************************************
// ** 函数原型: bit readEE(uchar instr,uchar addr,uchar num);    **
// ** 功    能: 从S42WD42中读取num个字节的数据,采用序列读操作方  **
// **           式从片内Address地址开始连续读取数据.S42WD42不接  **
// **           受指定的地址则返回0(FALSE).                      **
// ***************************************************************/
void readEE(uchar addr,uchar num)
{
 uchar i;
 for(i=0;i<num;i++)
  {
    EEbuf[i]=E_READ(addr+i);
  }  
}

/****************************************************************
** 函数原型: bit writeEEone(uchar instr,uchar addr,uchar num); **
** 功    能: 将EEbuf[]单元中的数据写入S42WD42的num个字节.    **
**           采用页写操作方式,每次写入时都需要指定片内地址.    **
**           如果S42WD42不接受指定的地址或某个传送的字节未收到 **
**           应答信号ACK,则返回0(FALSE).                       **
****************************************************************/
uchar writeEEone(uchar addr,uchar num)
{
 uchar i,ucA,ucB=0;
 
 
 for(i=0;i<num;i++)
 {
  for(ucA=0;ucA<3;ucA++)
  {
   E_WRITE(addr+i,EEbuf[i]);
   if(EEbuf[i]==E_READ(addr+i)) break;
   if(ucA==2) ucB=addr+i;
  }
}
 return(ucB);
}

/****************************************************************
** 函数原型: bit writeEE(uchar instr,uchar addr,uchar num);    **
** 功    能: 将EEbuf[]单元中的数据写入S42WD42的num个字节.    **
**           采用页写操作方式,每次写入时都需要指定片内地址.    **
**           如果S42WD42不接受指定的地址或某个传送的字节未收到 **
**           应答信号ACK,则返回0(FALSE).                       **
****************************************************************/
unsigned char writeEE(uchar addr,uchar num)
{

// for(i=0;i<3;i++){
    if(writeEEone(addr,num)){return(0);}
 //}
 //ei();
 
 return(1);
}

/*
BANKSEL 0X80 ;select Bank1
CLRF EEADR ;start at address 0
BCF INTCON, GIE ;disable interrupts
BSF EECON1, WREN ;enable EE writes
Loop
BSF EECON1, RD ;retrieve data into EEDATA
MOVLW 0x55 ;first step of ...
MOVWF EECON2 ;... required sequence
MOVLW 0xAA ;second step of ...
MOVWF EECON2 ;... required sequence
BSF EECON1, WR ;start write sequence
BTFSC EECON1, WR ;wait for write complete
GOTO $ - 1
IFDEF __16F648A ;256 bytes in 16F648A
INCFSZ EEADR, f ;test for end of memory
ELSE ;128 bytes in 16F627A/628A
INCF EEADR, f ;next address
BTFSS EEADR, 7 ;test for end of memory
ENDIF ;end of conditional assembly
GOTO Loop ;repeat for all locations
BCF EECON1, WREN ;disable EE writes
BSF INTCON, GIE ;enable interrupts (optional)
*/
/***********************************************************************/
/****** EEPROM memory read/write macros and function definitions *******/
/***********************************************************************/
void E_WRITE(uchar addr, uchar value)
{ 
  IE_bit.EA=0;
  EDATA=value;
  EADRL=addr;
  FLSHKY=0x3b;
  ECON=0x01;
  IE_bit.EA=1;
 }
 
uchar E_READ(uchar addr)
{
  IE_bit.EA=0;
  EADRL=addr;
  FLSHKY=0x3B;
  ECON=0x04;
 return(EDATA);
}
  /*
#define	EEPROM_WRITE(addr, value) 
	while(WR)continue;EEADR=(addr);EEDATA=(value); 
	CARRY=0;if(GIE)CARRY=1;GIE=0; 
	WREN=1;EECON2=0x55;EECON2=0xAA;WR=1;WREN=0; 
	if(CARRY)GIE=1

#define	EEPROM_READ(addr) ((EEADR=(addr)),(RD=1),EEDATA)
*/

/* library function versions */
//extern void eeprom_write(unsigned char addr, unsigned char value);
//extern unsigned char eeprom_read(unsigned char addr);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -