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

📄 串口通信c51源程序.txt

📁 24C01 24C02的C51源程序|串口通信C51源程序
💻 TXT
字号:

////////////////////////////////////////////////
AT24C01的C51源程序|串口通信C51源程序

--------------------------------------------------------------------------------
 
 
 
 
/* 24C01 24C02的C51源程序|串口通信C51源程序,
未整理,但编译后的HEX代码可在WS803上直接运行。*/
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#include<string.h>

#define UN  unsigned char
 
void csf();
UN  d10[4];
void del05s();
 void delay();
void  ask();
void stop();
void start();
UN rdby();
void waddr();
void wrby(UN x);
UN  raddr();
UN read(UN address);
void write(UN address,UN dat);
void d5ms();
void w8addr(UN x);
 
sbit    ESDA=P2^7;
sbit ECLK=P3^6;
 sbit    KEY=P2^0;
 
sbit    lsledcs =P3^7;
 
sfr16 DPTR=0x82;
 
sbit    ACC0=ACC^0;
sbit    ACC1=ACC^1;
sbit    ACC2=ACC^2;
sbit    ACC3=ACC^3;
sbit    ACC4=ACC^4;
sbit    ACC5=ACC^5;
sbit    ACC6=ACC^6;
sbit    ACC7=ACC^7;


UN code ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//0-9
                   0x88,0x83,0xa7,0xa1,0x86,0x8e};//数码字型表
void main()

{   unsigned int i,j;

 csf();
  while(1)
       {


         P0=0xff;
         lsledcs=1;
      j=0;
      while(j!=30)
      {
         i=0;
         do{
         P0=ledcode[0];
         P1=0xfe;
         delay();
         P0=ledcode[1];
         P1=0xfd;
         delay();
         P0=ledcode[2];
         P1=0xfb;
         delay();
         P0=ledcode[3];
         P1=0xf7;
         delay();
          i++;}
          while(i!=10);
        j++;
       }

       P1=0xff;
       del05s();
        
        }

}

void csf()
{

         TMOD=0x20;TH1=0xfd;TL1=0xfd;SCON=0x50;PCON|=0x80;TR1=1;

         EA=1;
         delay();
         ES=0;
    SBUF=0xf0;while(TI==0){;}TI=0;
    SBUF=0x01;while(TI==0){;}TI=0;
    SBUF=0x02;while(TI==0){;}TI=0;
    SBUF=0x03;while(TI==0){;}TI=0;ES=1;
 }


/*################################串口*/
  void surt() interrupt 4
   {UN surti; unsigned char cc1;
        RI=0;ES=0; 
        surti=0; 
        
        P0=~P0;
        d10[surti]=SBUF;
       do
        {cc1=0xff;
         surti++;
         while(RI==0){cc1--;if(cc1==0){goto out;}}
         RI=0;d10[surti]=SBUF;}
       while(1);
   out:    
  if(d10[0]==0x55&&surti>2){write(d10[1],d10[2]);}
  else if(d10[0]==0xaa&&surti>1){
                     SBUF=read(d10[1]);
                     while(TI==0){;}TI=0;
                      } 

  ES=1;

}
 
void delay()
{unsigned int kk=0xff;
    do{_nop_();kk--;}
    while(kk!=0);
   // ES=0;
   // KEY=1;
   // if(KEY==0){SBUF=0x99;while(TI==0){;}TI=0;}
   // ES=1;
}
void del05s()
{unsigned int kk=0xefff;
    do{_nop_();kk--;}
    while(kk!=0);
}
 
void  ask()
    {
     unsigned int i=0xffff;
     ESDA=1;_nop_();ECLK=1;_nop_();
     do
     {i--;
     if(ESDA!=1)
        {ECLK=0;i=0;}
      }
      while(i!=0);
       }
/*###################################*/
void stop()
 {
    ECLK=0; _nop_();
    ESDA=0; _nop_();
    ECLK=1; _nop_();
    ESDA=1;_nop_();
    ECLK=0;_nop_();
    }
/*  */
/*###################################*/
/*24c start  */
void start()
 {
  ESDA=1;_nop_();
  ECLK=1;_nop_();
  ESDA=0;_nop_();
  ECLK=0;_nop_();
  }
/*###################################*/
/*24c rdby  */
UN rdby()
 {      ESDA=1;
 ECLK=1;_nop_();_nop_();_nop_();ACC7=ESDA;ECLK=0;_nop_();_nop_();_nop_();
 ECLK=1;_nop_();_nop_();_nop_();ACC6=ESDA;ECLK=0;_nop_();_nop_();_nop_();
 ECLK=1;_nop_();_nop_();_nop_();ACC5=ESDA;ECLK=0;_nop_();_nop_();_nop_();
 ECLK=1;_nop_();_nop_();_nop_();ACC4=ESDA;ECLK=0;_nop_();_nop_();_nop_();
 ECLK=1;_nop_();_nop_();_nop_();ACC3=ESDA;ECLK=0;_nop_();_nop_();_nop_();
 ECLK=1;_nop_();_nop_();_nop_();ACC2=ESDA;ECLK=0;_nop_();_nop_();_nop_();
 ECLK=1;_nop_();_nop_();_nop_();ACC1=ESDA;ECLK=0;_nop_();_nop_();_nop_();
 ECLK=1;_nop_();_nop_();_nop_();ACC0=ESDA;ECLK=0;_nop_();_nop_();_nop_();
  return(ACC);
}
/*###################################*/
/*24c waddr  */
 void waddr()
 {
  start();
  wrby(0xa0);
  ask();}
/*###################################*/
/*24c raddr  */
 UN  raddr()
 {
  start();
  wrby(0xa1);
  ask();
  ACC=rdby();
  stop();
  return(ACC);
}
/*###################################*/
void wrby(UN x)

{       ACC=x;
        ESDA=ACC7;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC6;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC5;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC4;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC3;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC2;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC1;ECLK=1;_nop_();ECLK=0;_nop_();
        ESDA=ACC0;ECLK=1;_nop_();ECLK=0;_nop_();
 ESDA=1;_nop_();ECLK=1;
 }
/*####################################*/
//-----------------------------------------------------
//从指定的地址中读出一个字节数据涵
//-----------------------------------------------------
UN read(UN address)

  {     waddr();
        w8addr(address);
        //ACC=raddr();
  return(raddr());
  }
  
//-----------------------------------------------------
//向指定的地址中写入一个字节数据涵数
//----------------------------------------------------- 
void write(UN address,UN dat)
   {    //EWP=0;
    waddr();
   w8addr(address);
    wrby(dat);
    ask();
    stop();
    d5ms();
    //EWP=1;
   }
/* 延时*/
void d5ms()
 { UN a, b;
   for (a=0;a<=15;a++)
   {
     for (b=0;b<0x7f;b++)
         {;}
   }
 }
 

void w8addr(UN  x)
      { 
            wrby(x );
            ask();
             

 
 

⌨️ 快捷键说明

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