微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 用HI-TECH C写的使用PIC12C508读写93LC4

用HI-TECH C写的使用PIC12C508读写93LC4

时间:05-17 来源:互联网 点击:

/*----------------------------------------------------
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);
}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top