#include<pic.h>
#define address 0xa
#define nop() asm("nop")
#define OP_READ 0xa3 /*器件地址以及读取操作*/
#define OP_WRITE 0xa0 /*器件地址以及写入操作*/
#define _XTAL_FREQ 4000000UL
/*端口定义*/
#define SCL RC3
#define SDA RC4
#define SCLIO TRISC3
#define SDAIO TRISC4
unsigned char eepromdata;
/*延时子程序*/
void delay()
{
int i;
for(i=0;i<100;i++)
{;}
}
/*开始信号*/
void start()
{
SDA=1;
nop();
SCL=1;
nop();nop();nop();nop();nop();
SDA=0;
nop();nop();nop();nop();nop();
SCL=0;
nop();nop();;
}
/*停止信号*/
void stop()
{
SDA=0;
nop();
SCL=1;
nop();nop();nop();nop();nop();
SDA=1;
nop();nop();nop();nop();
}
/*读取数据*/
unsigned char shin()
{
unsigned char i,read_data;
for(i=0;i<8;i++)
{
nop();nop();nop();
SCL=1;
nop();nop();
read_data<<=1;
if(SDA==1)
read_data=read_data+1;
nop();
SCL=0;
}
return (read_data);
}
/*函数功能:向EEPROM写数据
入口函数:write_data
出口函数:ack_bit */
bit shout(unsigned char write_data)
{
unsigned char i;
unsigned char ack_bit;
for(i=0;i<8;i++)
{
if(write_data&0x80)
SDA=1;
else
SDA=0;
nop();
SCL=1;
nop();nop();nop();nop();nop();
SCL=0;
nop();
write_data<<=1;
}
nop();nop();
SDA=1;
nop();nop();
SCL=1;
nop();nop();nop();
ack_bit=SDA;
SCL=0;
nop();nop();
return ack_bit;/*返回24cxx的应答位*/
}
/*函数功能:向指定地址写数据
入口函数:addr,write_data*/
void write_byte(unsigned char addr,unsigned char write_data)
{
start();
shout(OP_WRITE);
shout(addr);
SDAIO=0; /*在写入数据前SDA应设置为输出*/
shout(write_data);
stop();
delay();
}
/*函数功能:向指定地址读数据
入口函数:random_addr,
出口函数:read_data*/
unsigned char read_random(unsigned char random_addr)
{
unsigned char read_data;
start();
shout(OP_WRITE);
shout(random_addr);
start();
shout(OP_READ);
SDAIO=1;
read_data=shin();
stop();
return(read_data);
}
void Serial_port_init()
{
TXSTA=0x24;
RCSTA=0x90;
SPBRG=0x19;
GIE=1;
PEIE=1;
RCIE=1;//打开中断
}
void main()
{
Serial_port_init();
TRISC=0x00;
eepromdata=read_random(0x66);
delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();
delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();
delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();
delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();
TXREG=eepromdata;
eepromdata=read_random(0x68);
delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();
delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();
delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();
delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();
TXREG=eepromdata;
}
void interrupt com()
{
if(RCIF) //确定可以进入中断
{
RCIF=0;
}
}
代码如下,请看一下,谢谢你!
|