打印

请教2402驱动。

[复制链接]
1294|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangqi412|  楼主 | 2007-3-22 19:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ge, TE, sd, ST, AI
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中在这个大体结构的话怎么利用应答判断。

相关帖子

沙发
huangqi412|  楼主 | 2007-3-22 19:38 | 只看该作者

我的应答判断位还没用上,如果不用goto的话

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

622

主题

24962

帖子

18

粉丝