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

📄 yalibiao.c

📁 压力表的定时定位
💻 C
字号:
//#include<reg51.h>
#include<NI51REG.h>
//#define THISADDR 0x2A
#define ISP_WAIT 0x03
#define ISP_READ 1
#define ISP_WRITE 2
#define ISP_ERASE 3

bit pulse_sign = 0;//pulse level sign
bit NewCmd_sign = 1;
bit TrStar_sign = 0;//transport start
bit De = 0;

unsigned char TIMH = 0xfd;
unsigned char TIML = 0xff;

unsigned char THISADDR = 0x2A;
unsigned char TrCounter = 0;
unsigned char TrData[5] = 0;
unsigned char AimData[5] = 0;
unsigned char mode = 0;
unsigned long  Delay_num;
unsigned int  Change_P;
unsigned int  Aim_P;
unsigned int  Time_D;
unsigned int  Now_P;
unsigned int  Dis_P;
unsigned long  Time;
unsigned int  T = 9;
unsigned int MINPOS = 0xFB10;
unsigned int  T2;
sbit out = P1^2;

void pulse() interrupt 1
{
	if(pulse_sign)
	{
		pulse_sign = 0;
		out = 0;
		TH0 = 0xc7;
		TL0 = 0x00;
	}
	else
	{
		pulse_sign = 1;
		out = 1;
		TH0 = TIMH;
		TL0 = TIML;
	}
}


void serial() interrupt 4
{
	//unsigned char i;
	if(RI)
	{
		RI = 0;

		if((!TrStar_sign)&&(SBUF == 0x0c))
		{
			TrStar_sign = 1;
			TrCounter = 0;
		}
		else if(TrStar_sign)
		{
                       if(TrCounter < 5)
			{

				TrData[TrCounter] = SBUF;
                                TrCounter++;
			}
                        else if(SBUF == 0xbb)
                        {
                                if(TrData[0] == THISADDR)
                                {
                                    AimData[0] = TrData[0];
                                    AimData[1] = TrData[1];
                                    AimData[2] = TrData[2];
                                    AimData[3] = TrData[3];
                                    AimData[4] = TrData[4];
                                    NewCmd_sign = 1;
				    TrCounter++;
                                }
                                TrCounter = 0;
                                TrStar_sign = 0;
                        }
                }
	}
}
unsigned char isp_read(unsigned int addr)
{
    unsigned char nop;
    ISP_ADDRH = (addr >> 8);
    ISP_ADDRL = (addr & 0x00ff);
    EA = 0;
    ISP_CONTR = ISP_WAIT;
    ISP_CONTR |= 0x80;
    ISP_CMD = ISP_READ;
    ISP_TRIG = 0x46;
    ISP_TRIG = 0xb9;
    nop = 1;
    ISP_CONTR = 0x00;
    ISP_CMD = 0x0;
    ISP_TRIG = 0x0;
    ISP_ADDRH = 0x0;
    ISP_ADDRL = 0x0;
    EA = 1;
    return ISP_DATA;
}

void isp_erase(unsigned int addr)
{
    unsigned char nop;
    ISP_ADDRH = (addr >> 8);
    ISP_ADDRL = (addr & 0x00ff);
    EA = 0;
    ISP_CONTR = ISP_WAIT;
    ISP_CONTR |= 0x80;
    ISP_CMD = ISP_ERASE;
    ISP_TRIG = 0x46;
    ISP_TRIG = 0xb9;
    nop = 1;
    ISP_CONTR = 0x00;
    ISP_CMD = 0x0;
    ISP_TRIG = 0x0;
    ISP_ADDRH = 0x0;
    ISP_ADDRL = 0x0;
    EA = 1;
}

void isp_write(unsigned int addr,unsigned char dat)
{
    unsigned char nop;
    ISP_DATA = dat;
    ISP_ADDRH = (addr >> 8);
    ISP_ADDRL = (addr & 0x00ff);
    EA = 0;
    ISP_CONTR = ISP_WAIT;
    ISP_CONTR |= 0x80;
    ISP_CMD = ISP_WRITE;
    ISP_TRIG = 0x46;
    ISP_TRIG = 0xb9;
    nop = 1;//无意义 延时操作
    ISP_CONTR = 0x00;
    ISP_CMD = 0x0;
    ISP_TRIG = 0x0;
    ISP_ADDRH = 0x0;
    ISP_ADDRL = 0x0;
    EA = 1;
}


void delay(unsigned int kk)
{
	unsigned int t1,t2;
        for (t1 = 0;t1<60;t1++)
        {
	for(t2 = 0;t2 < kk;t2++);
        }
}
 run()
{              unsigned int T1;
    if (De)
    {
		for (T1 = Now_P; T1<=Aim_P; ++T1 )
		{
                     if(!NewCmd_sign)
                     {
                        delay(Delay_num);
                        T2 = (0xfdff - MINPOS)*5;
                        T2 /= 27;
			Change_P = 0xfdff - (T1*T2)/50;
                         TIMH = Change_P>>8;
	                 TIML = Change_P&0x00ff;
                         }
                      else
                      {
                           Now_P = T1;
                           return(0);
                           }

                       Now_P = T1;
		}
    }
else
	{
		  for (T1 = Now_P; T1 > Aim_P; --T1 )
		 {
                        if(!NewCmd_sign)
                        {
                        delay(Delay_num);
                        T2 = (0xfdff - MINPOS)*5;
                        T2 /= 27;
			Change_P = 0xfdff - (T1*T2)/50;
                         TIMH = Change_P>>8;
	                 TIML = Change_P&0x00ff;
                         }
                         else
                         {
                            Now_P = T1;
                            return(0);
                            }
                         Now_P = T1;
		 }
	}


}
 test_mode()
{
    Delay_num = ;
   while(1)
   {
      if(!NewCmd_sign)
      {
      Aim_P = (De)?0x10E:0x00;
      Now_P = (De)?0x00:0x10E;
      run();
      De = ~De;
      }
      else
        return(0);

   }

 }
 shake_mode()
{
 Delay_num = 5;
   while(1)
   {
      if(!NewCmd_sign)
      {
      Aim_P = (De)?(Aim_P+10):(Aim_P-10);
      Now_P = (De)?(Aim_P-10):(Aim_P+10);
      run();
      De = ~De;
      }
      else
      return(0);
   }
}
 use_mode()
{
	Aim_P = ((unsigned int)(AimData[2])<<8)+AimData[3];
	Time_D = AimData[4];
	  if (Aim_P > Now_P)
	  {
		  Dis_P = Aim_P - Now_P;
		  De = 1;
	  }
	  else
	 {
	      Dis_P = Now_P - Aim_P;
		  De = 0;
	  }

	Time = (Time_D*1000)/Dis_P;
	Delay_num = Time*T;

	run();
        return(0);
}


int main()

{       AUXR &= 0x1f;
	SCON = 0x50;
	TMOD = 0x21;
        IE = 0x92;
	TH0 = 0xfc;
	TL0 = 0x00;
	TH1 = 0xfa;
	TL1 = 0xfa;
	out = 1;
        TrStar_sign = 0;
	pulse_sign = 1;

       MINPOS = (int)(isp_read(0x1000)<<8)+(int)(isp_read(0x1001));
        if(MINPOS == 0x0000)
        {
            MINPOS = 0xfb10;
        }
        THISADDR = isp_read(0x1200);
        if((THISADDR == 0xff)||(THISADDR == 0x0))
        {
            THISADDR = 0x2A;
        }
    //AimData[0] = THISADDR;
      AimData[1] = 0x01;
    //AimData[2] = 0x00;
    //AimData[3] = 0x5A;
    //AimData[4] = 0x10;
    mode = 0x01;
    TR0 = 1;
    TR1 = 1;
    NewCmd_sign =1;

	while(1)
	{
		if(NewCmd_sign)
                {
			NewCmd_sign = 0;
		        mode = AimData[1];
			   if(mode == 0x01)
		         {
				    test_mode();
			     }

				else if(mode == 0x02)
	        	{
		            shake_mode();
			    }

				 else if(mode == 0x03)
		        {
				 use_mode();
				 }
                                 else if(mode == 0x04)
                                 {
                                   isp_erase(0x1000);
                                   isp_write(0x1000,AimData[2]);
                                   isp_write(0x1001,AimData[3]);
                                   MINPOS = (int)(AimData[2]<<8)+(int)(AimData[3]);
                                }
                                  else if(mode == 0x05)
                                  {
                                   isp_erase(0x1200);
                                   isp_write(0x1200,AimData[2]);
                                   THISADDR = AimData[2];
                                  }

                                else
		         {    //return(0)  ;
				 }
                                     }
            else
		{
		 //return (0);
		 }

	}
   return (0);
}

⌨️ 快捷键说明

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