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

📄 资源不够程序备份.c

📁 串口程序
💻 C
字号:
#include <reg52.h>
#include <absacc.h>



#define SECOND	0x80
#define MINUTE	0x82
#define HOUR	0x84
#define DATE	0x86
#define MONTH	0x88
#define DAY	0x8A
#define YEAR	0x8C
#define WP      0X8E

sbit  R_W = P3^3;
sbit  ADD_DATA = P3^4;
unsigned char receive_sbuf;
unsigned char receive_7128;
unsigned char receive_1302;
unsigned char jingdu=0xff;
unsigned char weidu=0xff;
unsigned char ctrl=0x00;
unsigned char ctrl2=0x00;  //注意
unsigned char nian=0xff;
unsigned char nian2=0xff;
unsigned char yue=0xff;
unsigned char yue2=0xff;
unsigned char ri=
unsigned char ri2=0xff;
unsigned char zhou=zhou2=0xff;
unsigned char shi=shi20=xff;
unsigned char fenfen2==0xff;
unsigned char miao=miao2=0xff;
unsigned char OK=0xff;
unsigned char error=0;
unsigned char datareadynum=0;
unsigned char intcount=0;
unsigned char intcount2=0;
unsigned char r_wflag;



void Inputaddr_R(unsigned char addr);
void Inputaddr_W(unsigned char add);
void Inputdata(unsigned char din);
unsigned char Outputdata(unsigned char dout) ;

void main(void)
{
 P1=0XF0;     //点灯

 //外中断设置
// IT0=1;        //外部中断0 下降沿中断
// PX0=0;    //外部中断优先级低
 //EX0=1;        //开外部中断0
 //串口设置
 SCON=0x50;   //模式1;允许接接收;标志位清0
 PS=1;       //串口中断高优先级
 PCON=0X80;
 TMOD=0x20;     //方式2:自动装入
 TL1=TH1=0xF3;
 TR1=1;   //波特率 4800@12Mhz)
 ES = 1;                //串口中断开

 EA=1;         //开总中断

 //SBUF=0xf0;
        //死循环等待中断

 // Write1302(DS1302_SECOND,0X50);
 // SBUF=Read1302(DS1302_SECOND);
 while(1);


}

//串口中断程序
void int_s(void) interrupt 4
{
        ES = 0;       //关闭串行中断
        if(TI==1)
         {
                //SBUF=0xff;
                TI=0;
         }
        if(RI==1)
         {
              receive_sbuf=SBUF;
              switch(receive_sbuf)
              {
               case 'E': jingdu=weidu=nian=yue=ri=shi=fen=miao=0x00; error=1; break;
               case 'J': jingdu=0x00; break;
               case 'W': weidu=0x00;  break;
               case 'N': nian=0x00;   break;
               case 'Y': yue=0x00;    break;
               case 'R': ri=0x00;     break;
               case 'S': shi=0x00;    break;
               case 'F': fen=0x00;    break;
               case 'M': miao=0x00;   break;
               case 'O': OK=0x00;    break;
               default :  {
                       if(jingdu==0x00) {jingdu=receive_sbuf; datareadynum++; break;}
                       if(weidu==0x00)  {weidu=receive_sbuf;   datareadynum++; break;}
                       if(nian==0x00)   {nian=receive_sbuf;     datareadynum++; break;}
                       if(yue==0x00)    {yue=receive_sbuf;       datareadynum++; break;}
                       if(ri==0x00)     {ri=receive_sbuf;         datareadynum++; break;}
                       if(shi==0x00)    {shi=receive_sbuf;       datareadynum++; break;}
                       if(fen==0x00)    {fen=receive_sbuf;       datareadynum++; break;}
                       if(miao==0x00)   {miao=receive_sbuf;     datareadynum++; break;}
                           }
              }
              SBUF=jingdu;
              RI=0;
         }

        ES=1;
}

//外部中断程序
void hand(void) interrupt 0
{   //EX0=0;
   if(r_wflag==0)  // 写
   switch(intcount)
   {
    case 0:{ Inputaddr_W(SECOND);intcount++;break;}
    case 1:{ Inputdata(miao);intcount++;break;}
    case 2:{ Inputaddr_W(MINUTE);intcount++;break;}
    case 3:{ Inputdata(fen);intcount++;break;}
    case 4:{ Inputaddr_W(HOUR);intcount++;break;}
    case 5:{ Inputdata(shi);intcount++;break;}
    case 6:{ Inputaddr_W(DATE);intcount++;break;}
    case 7:{ Inputdata(ri);intcount++;break;}
    case 8:{ Inputaddr_W(MONTH);intcount++;break;}
    case 9:{ Inputdata(yue);intcount++;break;}
    case 10:{ Inputaddr_W(DAY);intcount++;break;}
    case 11:{ Inputdata(zhou);intcount++;break;}
    case 12:{ Inputaddr_W(YEAR);intcount++;break;}
    case 13:{ Inputdata(nian);intcount++;break;}
    case 14:{ Inputaddr_W(WP);intcount++;break;}
    case 15:{ Inputdata(ctrl);intcount++;break;}
   }
   else          //读
   switch(intcount2)
   {
    case 0:{ R_W=0;break;}
    case 1:{ miao2=Outputdata();intcount2++;break;}
    case 2:{ fen2=Outputdata();intcount2++;break;
    case 3:{ shi2=Outputdata();intcount2++;break;}
    case 4:{ ri2=Outputdata();intcount2++;break;}
    case 5:{ yue2=Outputdata();intcount2++;break;}
    case 6:{ zhou2=Outputdata();intcount2++;break;}
    case 7:{ nian2=Outputdata();intcount2++;break;}
    case 8:{ ctrl2=Outputdata();intcount2++;break;}
   }
}

void Inputaddr_R(unsigned char addr) 	//写地址为了读     写要读的地址
{
   R_W=1;  ///read
   ADD_DATA=1; //ADD
   P1=addr;
}

void Inputaddr_W(unsigned char add) 	//写地址为了写      写要写的地址
{
   R_W=0;  ///write
   ADD_DATA=1; //ADD
   P1=add;
}

void Inputdata(unsigned char din)        //向地址中写数据
{
   R_W=0;     //write
   ADD_DATA=0; // DATA
   din=P1;

}

unsigned char Outputdata(unsigned char dout)    //从地址中读数据
{
    R_W=1;   //read
    ADD_DATA=0; //DATA
    dout=P1;
    return dout;
}

⌨️ 快捷键说明

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