基于HI-TECH C的PIC12C508讀寫93LC4源程序
本文引用地址:http://butianyuan.cn/article/171028.htm
/*----------------------------------------------------
Function : StartBit
Input : None
Output : None
Description :
1. Set Chip Select(CS) = 1 (high)
2. Set a Start Bit(1) to Serial Data Input(DI)
------------------------------------------------------*/
void StartBit(void)
{
CS = 1;
DI = 1;
Pulse();
}
/*----------------------------------------------------
Function : EWEN
Input : None
Output : None
Description : ERASE/WRITE Enable
------------------------------------------------------*/
void EWEN(void)
{
unsigned char i,temp;
StartBit(); /* 1 */
temp = 0x80; /* 0011xxxx ,(opcode:00, Address:11xxxx) */
for(i=0; i8; i++) {
if(0x30 temp)
DI = 1;
else
DI = 0;
Pulse();
temp >>= 1;
}
CS = 0;
}
/*----------------------------------------------------
Function : EWDS
Input : None
Output : None
Description : ERASE/WRITE Disable
------------------------------------------------------*/
void EWDS(void)
{
unsigned char i;
StartBit(); /* 1 */
DI = 0; /* 0000xxxx, (opcode:00, Address:00xxxx) */
for(i=0; i8; i++)
Pulse();
CS = 0;
}
/*----------------------------------------------------
Function : Write93LC46
Input : unsigned char Offset Address, unsigned int tx_data
Output : None
Description : Write 16bits data in to 93LC46 Offset Address
------------------------------------------------------*/
void Write93LC46(unsigned char Offset_Addr, unsigned int tx_data)
{
unsigned char Addr, i;
unsigned int temp;
EWEN();
StartBit(); /* 1 */
Offset_Addr=Offset_Addr0x3F; /* 6bits address */
Addr = Offset_Addr + 0x40; /* 01AAAAAA ,(opcode:01, address:AAAAAA) */
temp = 0x0080;
for(i=0; i8; i++) {
if(Addr temp)
DI = 1;
else
DI = 0;
Pulse();
temp >>= 1;
}
temp = 0x8000; /* DDDDDDDDDDDDDDDD(16bits data)*/
for(i=0; i16; i++) {
if(tx_data temp)
DI = 1;
else
DI = 0;
Pulse();
temp >>= 1;
}
CS = 0;
EWDS();
}
/*----------------------------------------------------
Function : Read93LC46
Input : unsigned char Offset Address
Output : unsigned int
Description : Read 16bits data from 93LC46 offset address
------------------------------------------------------*/
unsigned int Read93LC46(unsigned char Offset_Addr)
{
unsigned char Addr, i, temp;
unsigned int rx_data;
StartBit(); /* 1 */
Offset_Addr = Offset_Addr0x3F; /* 6bits address */
Addr = Offset_Addr + 0x80; /* 10AAAAAA ,(opcode:10, address:AAAAAA) */
temp = 0x80;
for(i=0; i8; i++) {
if(Addr temp)
DI = 1;
else
DI = 0;
Pulse();
temp >>= 1;
}
rx_data = 0x0000; /* DDDDDDDDDDDDDDDD(16bits data)*/
for(i=0; i16; i++) {
Pulse();
if(DO)
rx_data |= 0x0001;
if(i 15)
rx_data = 1;
}
CS = 0;
return(rx_data);
}
void InitPIC(void)
{
OPTION = (GPWU | GPPU | PS2 | PS1 | PS0);
TRIS = 0x10;
CS = 0;
CLK = 0;
DI = 0;
}
/* Main routine */
void main(void)
{
unsigned char addr;
unsigned int rx_buf;
InitPIC();
/* Read a word then +1 and write back to 93LC46 */
for (addr = 0; addr 10; addr++)
{
rx_buf = Read93LC46(addr);
rx_buf = rx_buf+1;
Write93LC46(addr, rx_buf);
}
}
評(píng)論