⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rom.h

📁 数据分组程序
💻 H
字号:
				  #include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#define _Nop() _nop_()

sbit sdar= P2^0; /*串行数据*/
sbit sclr= P2^1; /*串行时钟*/
sbit jk=P0^0;
bit ACK_flagr; 

/************************函数列表**********************/
void delay(unsigned int ms);
void start(void);
void stop(void);
void ackr(void);
void noackr(void);
void sendbyte(unsigned char senddata);
unsigned char recbyte(void);


/*发送起始条件*/
void start(void) /*起始条件*/
{
   sdar = 1;
_Nop(); 
   sclr = 1;
   _Nop();
   _Nop();
_Nop();
_Nop();
_Nop(); 
       sdar = 0;
       _Nop();
       _Nop();
_Nop();
_Nop();
_Nop(); 
       sclr = 0;
_Nop();
}

void stop(void) /*停止条件*/
{
       sdar=0;
       _Nop();
       sclr=1;
       _Nop();
       _Nop();
       _Nop();
_Nop();
_Nop();

       sdar=1;
       _Nop();
}

void ackr(void) /*应答位*/
{
       sdar=0;
       _Nop();
       _Nop();
   _Nop();
   _Nop();
       sclr=1;
       _Nop();
       _Nop();
       _Nop();
       _Nop();
       sclr=0;

}

void noackr(void) /*反向应答位*/
{
       sdar=1;
       _Nop();
       _Nop();
       _Nop();
       _Nop();
       sclr=1;
       _Nop();
       _Nop();
       _Nop();
       _Nop();
       sclr=0;
}

/***************发送字节数据子程序*****************/

void sendbyte(unsigned char senddata)
{
unsigned char i;
for(i=0;i<8;i++)
{
    sdar=(bit)(senddata&0x80); /*取最高位*/
    senddata=senddata<<1;
    _Nop();
    sclr=1;
     _Nop();
    _Nop();
    _Nop();
    _Nop();
     _Nop();
     sclr=0;
}
ackr();
_Nop();
_Nop();
_Nop();
_Nop(); 
if(sdar==1)
{
    ACK_flagr=0;   //数据发送错误
} 
else
{
    ACK_flagr=1;   //数据发送正确
} 
}

unsigned char recbyte(void)
{
       unsigned char i;
       unsigned char recdata=0;    //接受到的数据
       sdar=1;
       for(i=0;i<8;i++)
       {
              _Nop(); 
              sclr=0;
              _Nop();
              _Nop();
              _Nop();
              _Nop();
              _Nop(); 
              _Nop(); 
              sclr=1;
              _Nop(); 
              _Nop();              
              recdata=recdata<<1;
              if(sdar==1)
              {
                     recdata++;
                     _Nop(); 
                     _Nop(); 
              }
              sclr=0; 
              _Nop(); 
              _Nop(); 
   }
return(recdata);
}


bit WrToFRam(unsigned char slv_addr,unsigned int sub_addr,unsigned char *s,unsigned char no)
{
       unsigned char i;
       unsigned char addrh;                      //存放存储单元地址高8位
       unsigned char addrl;    
       addrh = (char)(sub_addr/256);                         //取高八位
       addrl = (char)(sub_addr & 0x00ff);                    //取低八位   
       start(); /*发送启动信号*/
       sendbyte(slv_addr); /*发送SLA+W*/
       if(ACK_flagr==0)return(0);
       sendbyte(addrh); /*发送高位地址*/
       if(ACK_flagr==0)return(0);
       sendbyte(addrl); /*发送低位地址*/
       if(ACK_flagr==0)return(0);
       for(i=0;i<no;i++)
       {
              sendbyte(*s);
              if(ACK_flagr==0)
              return(0);
              s++;
       }
       stop();
       return(1);
}

bit RdFromFRam(unsigned char slv_addr,unsigned int sub_addr,unsigned char *s,unsigned char no)
{
       unsigned char addrh,addrl;//,tempdata;   //存放存储单元地址高8位
       unsigned char i; 
       addrh = (char)(sub_addr/256);            //取高八位
       addrl = (char)(sub_addr& 0x00ff); 
       start();
       sendbyte(slv_addr-1);
       if(ACK_flagr==0)return(0);
       sendbyte(addrh);
       if(ACK_flagr==0)return(0);
       sendbyte(addrl);
       if(ACK_flagr==0)return(0);
       stop();
       _Nop();
       _Nop();
       start();
       sendbyte(slv_addr);
       if(ACK_flagr==0)return(0);
       for(i=0;i<no-1;i++) 
    {
        *s=recbyte();
          ackr();
          s++;
     }           
       *s=recbyte();
       noackr();
       sclr=0;
       stop();
//     return(tempdata);
       return(1);
}
//   延时总时间=cnt*16+24us
void delay(unsigned int cnt)
{
  for(cnt;cnt>0;cnt--);
}  


//arg1[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};

/*
void main()
{ 
unsigned char arg1[3]={0xbb,0x0a,0x73};
unsigned char arg2[8]={0x5b,0xca,0xd9,0xf9,0x0b,0xfb,0xdb,0xeb};


WrToFRam(0xa0,0x00dd,arg1,3);
delay(31250);
delay(31250);
WrToFRam(0xa0,0x0100,arg2,8);

delay(31250);//延时500ms,24us忽略
delay(31250);


arg1[0]=0x00;arg1[1]=0x00;arg1[2]=0x00;
arg2[0]=0x00;arg2[1]=0x00;arg2[2]=0x00;arg2[3]=0x00;arg2[4]=0x00;arg2[5]=0x00;arg2[6]=0x00;arg2[8]=0x00;arg2[7]=0x00;
delay(31250);

RdFromFRam(0xa1,0x00fd,arg1,3);
delay(31250);
RdFromFRam(0xa1,0x0100,arg2,8);
delay(31250);
while(1)
{
P1=arg1[0];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略

P1=arg1[1];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略

P1=arg1[2];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略

P1=arg2[0];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略

P1=arg2[1];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略

P1=arg2[2];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略

P1=arg2[3];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略

P1=arg2[4];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略

P1=arg2[5];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略

P1=arg2[6];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略

P1=arg2[7];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略


};

}
 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -