void main() { uchar shuzi[7]={1,2,3,4,5,6};//数组 uchar shuzi2[7]; //读回来 toeep(shuzi[7],0x30,6); //发送到eep中 fromeep(shuzi2[7],0x30,6);//从eep读回来 chchsh(); //串口初始化 printf("%s",shuzi2); //发送查看 for(;;) {;} }
void chchsh() //初始化 { SCON=0x50; TMOD|=0x20; PCON|=0x80; TH1=0xfd; TR1=1; TI=1; } //***************2402驱动 void fromeep(uchar shj[],uchar address,uchar num)//读flash { //读回来的数据组,读的首地址,读的字节数 页写 num小于一页 bit errorbit; // uchar geshu; //要读个数 start(); //起始条件 write(0xa0); //器件地址 testack(); //应答判断 write(address);//要读的地址 testack(); // wait(); //延时 wait(); // start(); //起始条件 write(0xa1); //标记为读 errorbit=testack();
for(geshu=0;geshu<num-1;geshu++)//先读num-1个 { shj[geshu]=read; ack(); //应答 } //*(pshj+geshu)=read();//最后一次不应答 shj[geshu]=read(); stop(); //停止条件 }
void toeep(uchar shj[],uchar address,uchar num) //写flash { //要写的数据组,写的首地址,写的字节个数 //wp=0; //开写保护 这里出错 uchar geshu; //字节数 start(); //开始条件 write(0xa0); //器件地址 testack(); //应答判断 write(address);//要写地址 testack(); //应答判断 for(geshu=0;geshu<num;geshu++)//一共写num个数据 { write(shj[geshu]); testack(); //应答判断 } stop(); //停止条件 wp=1; }
uchar read() //读一字节 { uchar shj; //读到的数据 uchar geshu; //字节长度 for(geshu=0;geshu<8;geshu++)//8次 { clk=1; //脉冲 wait(); if(sda) shj=(shj|0x01);//如果是1,低位赋1,不然赋0 shj=shj<<1; //左移 clk=0; } sda=1; return(shj); //返回值 }
void write(uchar shj) //写一字节 { uchar geshu; //字节长度 uchar tem; //临时 for(geshu=0;geshu<8;geshu++) { tem=shj; if((shj&0x80)==0x80) //判断发1还是0 sda=1; clk=1; //脉冲 wait(); clk=0; shj=shj<<1; //左移 } sda=1; //完 }
void start() //起始条件 { sda=1; //clk为1情况下sda下降 clk=1; wait(); sda=0; clk=0; //完 sda=1; }
void stop() //停止条件 { sda=0; clk=1; wait(); sda=1; wait(); clk=0; }
void ack() //应答 { sda=0; //发送0 clk=1; wait(); clk=0; sda=1; }
bit testack() //应答判断 { bit errorbit; //应答判断位 sda=1; clk=1; wait(); errorbit=sda; clk=0; sda=1; return(errorbit);//返回值 }
void wait() //小的延时 { _nop_(); _nop_(); _nop_(); }
才学c,自己写的2402驱动,从自己原来的汇编翻译过来的,没有反应,请高手帮忙看下并指点下写驱动谢谢。还有c中在这个大体结构的话怎么利用应答判断。 |