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

📄 text2.c

📁 井下人员定位系统的单片机程序数据采集并发送到上位机
💻 C
字号:
#include "compile.h"
#include <W77C32.h>
#include <intrins.h>
#include "IIC.h"

/**************************************************************
声明函数
**************************************************************/
#define sddr1 0x01
#define sddr2 0x05
#define  PCF8563  0xA2            				  				  /*定义器件地址*/
#define  WRADDR   0x00
#define  RDADDR   0x02
idata uchar p0;
static idata uint n;
static void system();
static void getpage(uchar addr);
static void delayms(uint ms);
static void keyinit(void);
static uchar loadd;
static uchar lebal;
static uchar lebal1;
static uchar count;
static uchar buf3[5];
static void sendmessge(void);
static void init(void);

static messg mess;

/********数据桢存储结构*******************************************/

uchar td[9]={0x00,0x12,0x48,0x45,0x19,0x28,0x06,0x11,0x07};        // 控制状态寄存器1、 控制状态寄存器2、秒、分、时、日、星期、月/世纪、年
 /*定义发送缓冲区*/
uchar idata rd[7];                                                     // 秒、分、时、日、星期、月/世纪、年

messg1 xdata buf2[5000] _at_ 0x0000;

main()
{
    uchar w1;
   INT5=0;
   INT4=0;
   //WDTC_MODEL0 ;
   //WDTC_ENABLE;
   //WDTC_CLEAR;
    EA=0;
    INT3=0;                                        //
    INT2=0;
    delayms(1);
    p0=P0;
    INT2=1;
    INT3=1;                                        //
	loadd=p0&0x0f;                                 //本机地址
    w1=p0&0xc0;
	if(w1==0x00)
	 {
	    TH1=0xf5;                                  //定时器t1设置,串口1设置波特率9600
        TL1=0xf5;
	 }
	else if(w1==0x40)
	 {
	    TH1=0xea;                                  //定时器t1设置,串口1设置波特率4800
        TL1=0xea;
	 }
	else if(w1==0x80)
	 {
        TH1=0xd5;                                  //定时器t1设置,串口1设置波特率2400
        TL1=0xd5;
	 }
	else
	 {
        TH1=0xa9;                                  //定时器t1设置,串口1设置波特率1200
        TL1=0xa9;
	 }
    PS1=1;                                //
    SCON=0xF0;
    TMOD =0x21;                                //设脂定时器1为8为自动重装
    PCON =0x80;                                //SMOD=1                                      //启动定时器1
    SCON1 =0xd8;
    SMOD_1=1;                                  //单片机内部设置
    EA=1;                                      //使能串行口0中断
    ES0=1;
    //WDTC_CLEAR;
    ISendStr(PCF8563,WRADDR,td,0x09);
    system();
}
/*************************************************************
初始化
*************************************************************/
void init(void)
{
                                          //单片机与时钟芯片的寄存器设置
}

/*************************************************************
函数功能
*************************************************************/

void keyinit()
{

}
void PutCha(uchar c)
{
    SBUF1=c;
    while(!TI1);
    TI1 = 0;
}
void putchar(uchar c)
{
    SBUF=c;
    while(!TI);
    TI = 0;
}
uchar GetChar(void)
{
    while(!RI1);
    RI1 = 0;
    return SBUF1;
}
uchar GetCha(void)
{
    while(!RI);
    RI = 0;
    return SBUF;
}
void system()
 {
    uchar an;
    uchar sddr3=sddr1;
	if(n==0)
      {
	   n=1;
	  }
	while(1)
	  {
           //WDTC_CLEAR;
	       if (sddr3==0x01)           //
	           {
	             lebal=0x01;
	             lebal1=0xfe;
               }
	       else if (sddr3==0x02)
            	{
	             lebal=0x02;
                 lebal1=0xfd;
	            }
        	else if (sddr3==0x03)
	            {
	             lebal=0x04;
                 lebal1=0xfb;
	            }
	        else if (sddr3==0x04)
	            {
	             lebal=0x08;
                 lebal1=0xf8;
	            }
    ES0=0;                            //关闭中断同上位机
	TR1=0;
    SCON=0x50;                            //
    an=TH1;
	TH1=0xf5;
	TL1=0xf5;
	TR1=1;
    PutCha(sddr3);
   // WDTC_CLEAR;
    delayms(10);
    if(RI1)
	{
	   RI1=0;
       getpage(sddr3);
       sddr3=sddr3+1;
       if(sddr3==sddr2)
            {
               sddr3=sddr1;
			   TR1=0;
			   TH1=an;
			   TL1=an;
                           SCON=0xf0;
			   ES0=1;
			   TR1=1;
               delayms(10000);
             }
	   else
	         {
	           TR1=0;
			   TH1=an;
			   TL1=an;
                           SCON=0xf0;
			   ES0=1;
			   TR1=1;
	         }
	   }
	   else
	   {
           sddr3=sddr3+1;
           if(sddr3==sddr2)
            {
               sddr3=sddr1;
			   TR1=0;
			   TH1=an;
			   TL1=an;
                           SCON=0xf0;
			   ES0=1;
			   TR1=1;
               delayms(10000);
             }
	         else
	         {
	           TR1=0;
			   TH1=an;
			   TL1=an;
                           SCON=0xf0;
			   ES0=1;
			   TR1=1;
	         }
          }
   }
}
/****************************************************************
函数功能
****************************************************************/

void getpage(uchar sdda)
{
        uchar a;
	uchar b,c,m,bn;
	a=SBUF1;
    TB81=0;
	if(a==sdda)
	  {
	   mess.state |=lebal;                  //lebal在线标志位
	   PutCha(0x01);
          m=GetChar();                          //
	   if(m!=1)
	   {
	   PutCha(0x01);
	   for(b=n;b<n+m-1;b++)
	    {
		  buf2[b].carmark=sdda;
		  for(c=0;c<4;c++)
		   {
			  buf2[b].buf[c]=GetChar();
			}
         // WDTC_CLEAR;
          IRcvStr(PCF8563,RDADDR,rd,0x07);
          buf2[b].date[0]=rd[6];
          buf2[b].date[1]=rd[5];
          buf2[b].date[2]=rd[3];
          buf2[b].date[3]=rd[2];
          buf2[b].date[4]=rd[1];
          buf2[b].date[5]=rd[0];
          //buf2[b].date[6]=rd[0];
        /* TR1=0;                            //
          //bn=TH1;
	      TH1=0xa9;
	      TH0=0xa9;
	      TR1=1;
          for (c=0;c<7;c++)
           {
                SBUF=rd[c]; while(!TI);TI=0;
                delayms(100);
           }
          TR1=0;                            //

	      TH1=0xf5;
	      TH0=0xf5;
	      TR1=1;     */
          PutCha(0x01);
		 }
          n=n+m-1;
        }
     }
   PutCha(0x01);
   TB81=1;
}
/****************************************************************
函数功能
****************************************************************/
void delayms(uint ms)                     // 延时子程序
{
	uint i;
	while(ms--)
	{
       // WDTC_CLEAR;
		for(i = 0; i < 300; i++);
	}
}

/****************************************************************
****************************************************************/

void sengmessge(void)
{
   uchar a,b,c,m;
   if(n!=1)
   {
     // WDTC_CLEAR;
   if(n<=30)
     {
     while(!RI);RI=0;
	  putchar(start);
	  putchar(start1);
      putchar(n-1);
      mess.state|=0x00;
      putchar(mess.state);
      for(a=1;a<n;a++)
	     {

		   putchar(buf2[a].carmark);

           for(b=0;b<4;b++)
		     {

			       putchar(buf2[a].buf[b]);

		     }
           for(c=0;c<6;c++)
		     {

			   putchar(buf2[a].date[c]);

		     }
      //WDTC_CLEAR;
		  }
	  putchar(0xff);
      putchar(0xff);
      n=1;
      }
   while(n>30)
     {
      //WDTC_CLEAR;
      while(!RI);RI=0;
      putchar(start);
	  putchar(start1);
      putchar(0x1e);
      mess.state|=0xf0;
	  putchar(mess.state);
      mess.state&=0x0f;
      m=n-30;
      for(a=n;a>m;a--)
	     {

		   putchar(buf2[a].carmark);

           for(b=0;b<4;b++)
		     {

			   putchar(buf2[a].buf[b]);

			  }
           for(c=0;c<6;c++)
		     {

			   putchar(buf2[a].date[c]);

			  }
     //WDTC_CLEAR;
          }
      putchar(0xff);
      putchar(0xff);
      n=m;
      }
  if((n<=30)&&(n>1))
     {
      while(!RI);RI=0;
      putchar(start);
	  putchar(start1);
      putchar(n-1);
      mess.state|=0x00;
      putchar(mess.state);
      for(a=1;a<n;a++)
	     {

		   putchar(buf2[a].carmark);

           for(b=0;b<4;b++)
		     {

			   putchar(buf2[a].buf[b]);

			  }
            IRcvStr(PCF8563,RDADDR,rd,0x07);
           for(c=0;c<6;c++)
		     {

			   putchar(buf2[a].date[c]);

			  }
     //WDTC_CLEAR;
		  }
	  putchar(0xff);
      putchar(0xff);
      n=1;
     }
     }
}

void serial_0(void) interrupt 4
{
  uchar c,l;
  ES0=0;
  RI=0;
  c=SBUF;
  //SCON=0x50;
  //WDTC_CLEAR;
  if (c==datelebal)
  {
    SM2=0;
    for(l=0;l<6;l++)
	   {
        while(!RI);RI=0;
	   buf3[l]=SBUF;
	   }
	  td[8]=buf3[0];td[7]=buf3[1];td[5]=buf3[2];td[4]=buf3[3];td[3]=buf3[4];td[2]=buf3[5];
      ISendStr(PCF8563,WRADDR,td,0x09);  // 控制状态寄存器1、 控制状态寄存器2、秒、分、时、日、星期、月/世纪、年
   }
   else if(c==loadd)
     {
     SBUF=n-1;
     while(!TI);TI=0;
     SM2=0;
     sengmessge();
	 }
    SCON=0xf0;
    SM2=1;
	ES0=1;
}

/*uchar td[9]={0x00,0x12,0x48,0x45,0x19,0x28,0x06,0x11,0x07};        // 控制状态寄存器1、 控制状态寄存器2、秒、分、时、日、星期、月/世纪、年
*/

⌨️ 快捷键说明

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