📄 public.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 + -