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

📄 wqxqz.c

📁 一个用MPS430F1211单片机开发的电话MODEM数据集抄器的原代码
💻 C
📖 第 1 页 / 共 4 页
字号:
{
  CLRWDT();
  uchar nollbyte1;
  uchar tempp11=0;
  READ_E2PROM(&nollbyte1,E2_ADDR_COUNTER,0X01);
  CLRWDT();
  if((nollbyte1 == 'x')||(nollbyte1==0xff))
    {
      CLRWDT();
      rxtxdatabuf[6]=0xbb;
      rxtxdatabuf[7]=0x0;                //[8][9][10]
      ACCOUNT_CHKSUM(11);
      UART_T (fe,3);
      UART_T (rxtxdatabuf,11);
    }
  else
    {
      CLRWDT();
      rxtxdatabuf[6]=0xbb;
      rxtxdatabuf[7]=nollbyte1;           //[8][9][10]
      UART_T (fe,3);
      UART_T (rxtxdatabuf,11);
      ACCOUNT_CHKSUM(11);
      for(tempp11 = 0;tempp11 < nollbyte1;tempp11++)
        {
          CLRWDT();
          READ_E2PROM( (&rxtxdatabuf[11]) , E2_ADDR_FRIST_ADDR + tempp11 * 4 , 0X04);
          UART_T ( &(rxtxdatabuf[11]) , 4 );
          rxtxchksum = rxtxchksum +rxtxdatabuf[11]+rxtxdatabuf[12]
                       +rxtxdatabuf[13]+rxtxdatabuf[14];
        }
      rxtxdatabuf[15] = 0x16;
      UART_T ( &rxtxchksum , 1 );
      UART_T ( &(rxtxdatabuf[15]) , 1 );
      CLRWDT();
   }
}

void SYS_CLEAR_ADDR(void)
{
  CLRWDT();
  uchar nollbyte = 'x';
  WRITE_E2PROM(&nollbyte,E2_ADDR_COUNTER,0X01);//clear address must set e2prom addr20h to ''(nol)
  READ_E2PROM(&nollbyte,E2_ADDR_COUNTER,0X01);
  if(nollbyte == 'x')
    {
      CLRWDT();
      rxtxdatabuf[6]=0xbb;
      rxtxdatabuf[11]=ACCOUNT_CHKSUM(11);
      UART_T (fe,3);
      UART_T (rxtxdatabuf,13);
    }
}

void SYS_READ_STATE(void)
{
  CLRWDT();
  //////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////
  //        TEST POWER OUTPUT1 ON                            ///
  //////////////////////////////////////////////////////////////
  //
  //
  rxtxdatabuf[6]=0xbb;
  rxtxdatabuf[7]=0x04;
  if(P3OUT & 0X08)
    rxtxdatabuf[11]=0x59;
  else
    rxtxdatabuf[11]=0x4E;
  rxtxdatabuf[12]=ACCOUNT_CHKSUM(12);
  rxtxdatabuf[13]=0X16;
  UART_T (fe,3);
  UART_T (rxtxdatabuf,14);
  CLRWDT();
  //////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////

      /*
      CLRWDT();
      rxtxdatabuf[6]  = 0xbb;
      rxtxdatabuf[7]  = 0x04;
      rxtxdatabuf[11] = whichway;
      rxtxdatabuf[12] = ACCOUNT_CHKSUM(12);
      rxtxdatabuf[13] = 0X16;
      UART_T (fe,3);
      UART_T (rxtxdatabuf,14);
      CLRWDT();
      */
}

//////////////////download READ METER TIME/////////////////////
void SYS_DOWNLOAD_METER_DAY(void)
{
  CLRWDT();
  uchar tempset;
  meterday[0] = rxtxdatabuf[11];
  meterday[1] = rxtxdatabuf[12];
  meterday[2] = rxtxdatabuf[13];
  meterday[3] = rxtxdatabuf[14];
  meterday[4] = rxtxdatabuf[15];
  meterday[5] = rxtxdatabuf[16];
  meterday[6] = rxtxdatabuf[17];
  WRITE_E2PROM(meterday,E2_METER_DAY,0X07);           //updata new metertime
  CLRWDT();
  tempset='S';
  WRITE_E2PROM(&tempset,E2_METER_DAY_BESET,0X01);     //WRITE METER_DAY BESET 'S'
  rxtxdatabuf[6]  = 0xbb;
  rxtxdatabuf[7]  = 0x03;
  rxtxdatabuf[11] = ACCOUNT_CHKSUM(11);
  rxtxdatabuf[12] = 0x16;
  UART_T (fe,3);
  UART_T (rxtxdatabuf,13);
  CLRWDT();
}

//////////////////UPLOAD READ METER TIME//////////////////////
void SYS_UPLOAD_METER_DAY(void)
{
  CLRWDT();
  uchar tempset1;
  READ_E2PROM(&tempset1,E2_METER_DAY_BESET,0X01);
  if(tempset1 == 'S')
      {
        CLRWDT();
        READ_E2PROM(meterday,E2_METER_DAY,0X07);
        rxtxdatabuf[6]  = 0xbb;
        rxtxdatabuf[7]  = 0x0a;
        rxtxdatabuf[11] = meterday[0];
        rxtxdatabuf[12] = meterday[1];
        rxtxdatabuf[13] = meterday[2];
        rxtxdatabuf[14] = meterday[3];
        rxtxdatabuf[15] = meterday[4];
        rxtxdatabuf[16] = meterday[5];
        rxtxdatabuf[17] = meterday[6];
        rxtxdatabuf[18] = ACCOUNT_CHKSUM(18);
        rxtxdatabuf[19] = 0X16;
        UART_T (fe,3);
        UART_T (rxtxdatabuf,20);
        CLRWDT();
      }
  else
      {
        CLRWDT();
        rxtxdatabuf[6]  = 0xbb;
        rxtxdatabuf[11] = ACCOUNT_CHKSUM(11);
        rxtxdatabuf[12] = 0x16;
        UART_T (fe,3);
        UART_T (rxtxdatabuf,13);
        CLRWDT();
      }

}

////////////////////CLEAR READ METER TIME/////////////////////
void SYS_CLEAR_METER_DAY(void)
{
  CLRWDT();
  meterday[0] = 0xff;
  meterday[1] = 0xff;
  meterday[2] = 0xff;
  meterday[3] = 0xff;
  meterday[4] = 0xff;
  meterday[5] = 0xff;
  meterday[6] = 0xff;
  WRITE_E2PROM(meterday,E2_METER_DAY,0X07);                 //WRITE METER_DAY 0XFF
  CLRWDT();
  WRITE_E2PROM(&meterday[1],E2_METER_DAY_BESET,0X01);       //WRITE METER_DAY BESET 0XFF
  rxtxdatabuf[6] = 0xbb;
  rxtxdatabuf[11] = ACCOUNT_CHKSUM(11);
  CLRWDT();
  UART_T (fe,3);
  UART_T (rxtxdatabuf,13);
  CLRWDT();
}

///length: how many byte codes before 'cs' code?
uchar ACCOUNT_CHKSUM(uchar length)
{
  CLRWDT();
  rxtxchksum=0;
  uchar tempp2=0;
  for(tempp2=0;tempp2<length;tempp2++)
     rxtxchksum+=rxtxdatabuf[tempp2];
  return rxtxchksum;

}


//////////////////////////////////////
//DS1302    DS1302
//DS1302    DS1302
//DS1302    DS1302
//DS1302    DS1302
//////////////////////////////////////
void ResetDs(void)
{
	 SCK_DSL;
	 _NOP();_NOP();
	 SRS_DSL;
	 _NOP();_NOP();
	 SRS_DSH;
}

//-------------------------------------------------
// Output one byte data
//-------------------------------------------------
void OutByte(uchar outdata)
{
	uchar i;
	for(i=0;i<8;i++)
  	{
   		if((outdata&1)==1) {
    		SDA_DSH;
    	}
   		else {
    		SDA_DSL;
    	}
	   _NOP();_NOP();
	   SCK_DSL;
	   outdata>>=1;
	   _NOP();_NOP();
	   SCK_DSH;			        //上升沿打入数据
	   _NOP();_NOP();
 	}
}

//-------------------------------------------------
//Get one byte of data
//-------------------------------------------------
uchar InByte(void)
{
	 uchar indata,i;
	 SDA_DSH;
         SDA_SET_INPUT;
	 for(i=0,indata=0;i<8;i++)
  	 {
	   SCK_DSH;				//下降沿读入数据
	   _NOP();_NOP();
	   SCK_DSL;
	   _NOP();_NOP();
	   indata>>=1;
	   if(SDA_DS_INPUT == 0x02)
	    {
               	indata|=0x80;
       	    }
           else
             indata &= (~0x80);
  	}
        SDA_SET_OUTPUT;
 	return indata;
}

//----------------------------------------
// Wrirte one byte to pointed addr
//-----------------------------------------------
void WriteByteDs(uchar addr,uchar outdata)
{
	 ResetDs();
	 OutByte(addr);
	 OutByte(outdata);
	 SRS_DSL;
	 ResetDs();
}

//-------------------------------------------------
// Read one byte from pointed addr
//-------------------------------------------------
uchar ReadByteDs(uchar addr)
{
	 uchar indata;
	 ResetDs();
	 OutByte(addr);
	 indata=InByte();
	 ResetDs();
	 SRS_DSL;
 	 return indata;
}


//-------------------------------------------------
//Read time from ds1302
//-------------------------------------------------
void ReadTime(uchar * time)
{
	 uchar i;

	 ResetDs();
	 OutByte(0xbf);
	 for(i=0;i<7;i++) {
	   *(time++)=InByte();
   	 }
	 SRS_DSL;
	 ResetDs();
         ////?
         SCK_DSH;//HIGH FOR LOWPOWER

}

//-------------------------------------------------
//Write new time to ds1302
//-------------------------------------------------
void WriteTime(uchar * time)
{
	 uchar i;
	 ResetDs();
	 OutByte(0xbe);
	 for(i=0;i<8;i++) {
		 OutByte(*(time++));
	 }
 	 ResetDs();
	 SRS_DSL;
         ////?
         SCK_DSH;//HIGH FOR LOWPOWER
}


void En_dswork(void)
{
        ResetDs();
	WriteByteDs(0x80,0);	//允许时钟工作
        ResetDs();
        WriteByteDs(0x84,0);    //24小时制
        ResetDs();
        WriteByteDs(0x8e,0);    //write enable
        ResetDs();
}


void TAKETELE(void)
{
   CLRWDT();
   UART_T (tele,6);
   UART_T (telenum,5);
   UART_T (&ent,1);
   DELAY_ms(8000);
   UART_T (theadd,4);
   DELAY_ms(2);
   UART_T (h0,5);
   UART_T (&ent,1);
   CLRWDT();
}

void RECTIME(void)
{
  //uchar timetemp;
  CLRWDT();
  ReadTime(systemtime);
  timer_min = BCDT0DEC(systemtime[1]);
  if(timer_min>54)
       timer_min = timer_min+5-60;
  else
       timer_min = timer_min+5;
  CLRWDT();
  timer_min = DECTOBCD (timer_min);
}

////////////////////////////////////////////////
//the BCDnumber to DECnumber
//
////////////////////////////////////////////////
uchar BCDT0DEC (uchar bcdtemp)
{
  uchar tempa;
  CLRWDT();
  tempa = bcdtemp & 0x0f;
  bcdtemp = (bcdtemp & 0xf0);
  bcdtemp = (bcdtemp>>4);
  bcdtemp = bcdtemp * 10;
  CLRWDT();
  return( bcdtemp+tempa );

}

////////////////////////////////////////////////
//the DECnumber to BCDnumber
//
////////////////////////////////////////////////
uchar DECTOBCD (uchar dectemp)
{
  uchar tempb;
  CLRWDT();
  tempb = (dectemp % 10);
  dectemp = dectemp-tempb;
  dectemp = dectemp/10;
  dectemp = dectemp<<4;
  dectemp = dectemp+tempb;
  CLRWDT();
  return dectemp;
}

void LED_ONTIME(uchar mms)
{
  CLRWDT();
  LED_ON;
  DELAY_ms(mms);
  CLRWDT();
  LED_OFF;
  DELAY_ms(mms);
  CLRWDT();
}

///////////////////////////////////////
//ledctlbb: 8bit define
//0:1-ON/0-OFF
//1:once time 1-LONG2s/0-SHORT1s
//2:once duty 1-%50/0-%20
//3:4:5:6:7:
//example
//0x03:open play with long %20
//0x07:open play with long %50
//0x01:open play with short %20
//0x05:open play with long %50
///////////////////////////////////////
void LEDPLAY (uchar ledctlbb)
{
  if(ledctlbb | 0x01)
  {
    CCR2 = 0X1000;
    CCTL2 = OUTMOD_7;
    P1DIR |= 0x08;                        // P1.2 and P1.3 output
    P1SEL |= 0x08;                        // P1.2 and P1.3 TA1/2 otions
    TACTL |= MC0;                         // Start Timer_A in up mode
  }
  else
  {
    P1SEL &= (~0x08);                     // P1.2 and P1.3 TA1/2 otions
    CCR2 = 0X0;
    CCTL2 = OUTMOD_0;
  }
}

///////////////claer wdt//////////////////
void CLRWDT(void)
{
  //WDTCTL = WDTPW+WDTCNTCL+WDTSSEL;
}

////////////////led display//////////////////
//led on p1.3
//led on:1s,off:1s in one times
//uchar time : how many times for led display
/////////////////////////////////////////////
void LED_DISPLAY (uint times)
{
  for(;times>1;times--)
  {
    LED_ON;
    CLRWDT();
    DELAY_ms(100);
    LED_OFF;
    CLRWDT();
    DELAY_ms(60);
  }
}

////////////////////////////////////////////////////////////////////////////////
void ANALYZE_WHICHWAY_POW(uchar tempway)
{
  ALLOFF;
  CLRWDT();
  //systemflg |= 0x01;
  DELAY_ms(5);
  CLRWDT();
  switch(tempway)
  {
    case 0x01:       P_C_8_ON;     break;  //way1_power_out
    case 0x02:       P_C_4_ON;     break;  //way2_power_out
    case 0x04:       P_C_6_ON;     break;  //way3_power_out
    case 0x08:       P_C_2_ON;     break;  //way4_power_out
    case 0x10:       P_C_7_ON;     break;  //way5_power_out
    case 0x20:       P_C_3_ON;     break;  //way6_power_out
    case 0x40:       P_C_5_ON;     break;  //way7_power_out
    case 0x80:       P_C_1_ON;     break;  //way8_power_out
    default:      ALLOFF;
                  systemflg &= (~0x01);
                  whichway = 0X0;
    break;
  }
  CLRWDT();
  NO_ALLOFF;                      //enaible 74ls138
  DELAY_ms(20);
}

⌨️ 快捷键说明

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