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

📄 wqxqz.c

📁 一个用MPS430F1211单片机开发的电话MODEM数据集抄器的原代码
💻 C
📖 第 1 页 / 共 4 页
字号:
                    {
                      dataarea = dataarea + 1;
                      rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                      rxdatapoint ++;
                    }
                else
                    {
                      if(systemflg & 0x10)//for timer to read meter receive louyu's ack code
                        {
                            if(rxtxdatabuf[rxdatapoint] == 0x81)
                                {
                                      dataarea = 21;
                                      rxdatapoint++;
                                      rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                                }

                        }
                      else
                        {
                            dataarea = 0;
                            rxdatapoint = 0;
                        }

                    }
                break;
      //receive 4 byte materaddress
      case 3:   if((rxtxdatabuf[rxdatapoint] == mainnumber[0]) || (rxtxdatabuf[rxdatapoint] == 0xaa))
                    {
                      dataarea ++;
                      rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                      rxdatapoint ++;
                    }
                else
                    {
                      dataarea = 0;
                      rxdatapoint = 0;
                    }
                break;

      case 4:   if((rxtxdatabuf[rxdatapoint] == mainnumber[1]) || (rxtxdatabuf[rxdatapoint] == 0xaa))
                    {
                      dataarea ++;
                      rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                      rxdatapoint ++;
                    }
                else
                    {
                      dataarea = 0;
                      rxdatapoint = 0;
                    }
                break;

      case 5:   if((rxtxdatabuf[rxdatapoint] == mainnumber[2]) || (rxtxdatabuf[rxdatapoint] == 0xaa))
                    {
                      dataarea ++;
                      rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                      rxdatapoint ++;
                    }
                else
                    {
                      dataarea = 0;
                      rxdatapoint = 0;
                    }
                break;

      case 6:   if((rxtxdatabuf[rxdatapoint] == mainnumber[3]) || (rxtxdatabuf[rxdatapoint] == 0xaa))
                    {
                      dataarea ++;
                      rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                      rxdatapoint ++;
                    }
                else
                    {
                      dataarea = 0;
                      rxdatapoint = 0;
                    }
                break;
      //receive 1byte CTL0
      case 7:   if(rxtxdatabuf[rxdatapoint] == 0x3b)
                    {
                      dataarea ++;
                      rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                      rxdatapoint ++;
                    }
                else
                    {
                      dataarea = 0;
                      rxdatapoint = 0;
                    }
                break;

      //rcecive 1byte data code length
      case 8:   dataarea ++;
                rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                rxdatapoint ++;
                break;

      //receive n byte data
      case 9:   rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                rxdatapoint = rxdatapoint + 1;
                if(rxdatapoint == (rxtxdatabuf[7] + 8))
                      dataarea ++;
                break;

      //receive cs // chaek cs code
      case 10:  if(rxtxdatabuf[rxdatapoint] == rxtxchksum)
                    {
                      dataarea ++;
                      rxdatapoint ++;
                    }
                else
                    {
                      dataarea = 0;
                      rxdatapoint = 0;
                    }
                break;

      case 11:   if(rxtxdatabuf[rxdatapoint] == 0x16)
                    {
                      dataarea=0;
                      rxdatapoint=0;
                      systemflg |= 0x80;     //set flger
                    }
                else
                    {
                      dataarea = 0;
                      rxdatapoint =  0;
                    }
                break;
      //////////////////////////////////////////////////////////////////
      case 12:  if(rxtxdatabuf[rxdatapoint] == 0x4f)
                      dataarea = dataarea + 1;
                else
                      dataarea = 0;
                break;

      case 13:  if(rxtxdatabuf[rxdatapoint] == 0x20)

                      dataarea = dataarea + 1;
                else
                      dataarea = 0;
                break;

      case 14:  if(rxtxdatabuf[rxdatapoint] == 0x43)
                      dataarea = dataarea + 1;
                else
                      dataarea = 0;
                break;

      case 15:  if(rxtxdatabuf[rxdatapoint] == 0x41)
                      dataarea = dataarea + 1;
                else
                      dataarea = 0;
                break;

      case 16:  if(rxtxdatabuf[rxdatapoint] == 0x52)
                      dataarea = dataarea + 1;
                else
                      dataarea = 0;
                break;

      case 17:  if(rxtxdatabuf[rxdatapoint] == 0x52)
                      dataarea = dataarea + 1;
                else
                      dataarea = 0;
                break;

      case 18:  if(rxtxdatabuf[rxdatapoint] == 0x49)
                      dataarea = dataarea + 1;
                else
                      dataarea = 0;
                break;

      case 19:  if(rxtxdatabuf[rxdatapoint] == 0x45)
                      dataarea = dataarea + 1;
                else
                      dataarea = 0;
                break;

      case 20:  if(rxtxdatabuf[rxdatapoint] == 0x52)
                    {
                      dataarea = 0;
                      SYS_TELEOFF();
                    }
                else
                      dataarea = 0;
                break;
      /////////////////////////////////////////////////////////////////

      case 21:  dataarea = dataarea + 1;
                rxdatapoint++;
                rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];

      case 22:  dataarea = dataarea + 1;
                rxdatapoint++;
                rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];

      case 23:  dataarea = dataarea + 1;
                rxdatapoint++;
                rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];

      case 24:  dataarea = dataarea + 1;
                rxdatapoint++;
                rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];

      case 25:  if(rxtxdatabuf[rxdatapoint] == 0xa9 )
                   {
                     dataarea = dataarea + 1;
                     rxdatapoint++;
                     rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                   }
                else
                   {
                     dataarea    = 0;
                     rxdatapoint = 0;
                   }

      case 26:  if(rxtxdatabuf[rxdatapoint] == 0x03)
                   {
                     dataarea = dataarea + 1;
                     rxdatapoint++;
                     rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                   }
                else
                   {
                     dataarea    = 0;
                     rxdatapoint = 0;
                   }

      case 27:  if(rxtxdatabuf[rxdatapoint] == 0x90)
                   {
                     dataarea = dataarea + 1;
                     rxdatapoint++;
                     rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                   }
                 else
                   {
                     dataarea    = 0;
                     rxdatapoint = 0;
                   }

      case 28:  if(rxtxdatabuf[rxdatapoint] == 0x2f)
                   {
                     dataarea = dataarea + 1;
                     rxdatapoint++;
                     rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                   }
                else
                   {
                     dataarea    = 0;
                     rxdatapoint = 0;
                   }

      case 29:  if(rxtxdatabuf[rxdatapoint] == 0x01)
                   {
                     dataarea = dataarea + 1;
                     rxdatapoint++;
                     rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                   }
                else
                   {
                     dataarea    = 0;
                     rxdatapoint = 0;
                   }

      case 30:  if(rxtxdatabuf[rxdatapoint] == rxtxchksum)
                   {
                     dataarea = dataarea + 1;
                     rxdatapoint++;
                     rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
                   }
                else
                   {
                     dataarea    = 0;
                     rxdatapoint = 0;
                   }
      case 31:  if(rxtxdatabuf[rxdatapoint] == 0x16)
                   {
                     systemflg |= 0x08;
                   }
                dataarea    = 0;
                rxdatapoint = 0;
                rxtxchksum  = 0;


      default: dataarea=0;
               rxdatapoint=0;
  }
}
//////////////////////////////////////////
//TA0 INTERRUPT ISR
//
//////////////////////////////////////////
#pragma vector=TIMERA0_VECTOR
__interrupt void taisr (void)
{
  if(clearwdtcounter<10)
  {
    CLRWDT();
    clearwdtcounter++;
    return;
  }
  else
  {
  clearwdtcounter=0;
  LED_ON;
  CLRWDT();
  uchar tempset2,tempset3;
  ReadTime(systemtime);
  READ_E2PROM(&tempset2,E2_METER_DAY_BESET,0X01);
  CLRWDT();
  if(tempset2=='S')
    {
      READ_E2PROM(&tempset2,E2_ADDR_COUNTER,0X01);
      if((tempset2 <= 49))//do it have meter addrsee?
        {
          READ_E2PROM(meterday,E2_METER_DAY,0X07);
          CLRWDT();
              for(tempset3=0;tempset3<7;tempset3++)
                  {
                      CLRWDT();
                      if(systemtime[3]==meterday[tempset3])
                          {
                            CLRWDT();
                            if(systemtime[2]==0)
                                  if(systemtime[1]==0)
                                      {
                                          systemflg |= 0x10;     //meterday is come
                                          //_BIC_SR_IRQ(LPM3_bits);
                                          CLRWDT();
                                      }
                          }
                  }
        }
    }
  CLRWDT();
  DELAY_ms(30);
  CLRWDT();
  LED_OFF;
  }
}
/////////////////////////////////////
//UART0TX ISR
//
//
/////////////////////////////////////
#pragma vector=UART0TX_VECTOR
__interrupt void uartotx (void)
{

}

//////////////interrupt isr///////////////
//interrupt isr
//
//////////////////////////////////////////
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR (void)
{
  _NOP();
}

////////////////////////////////////
////DELAY ms
////
////
////
///////////////////////////////////
void DELAY_ms(uint ms)//ms=1 DELAY 5ms
{
  uint iims;
  for(;ms>0;ms--)
    {
      CLRWDT();
      for(iims=800;iims>0;iims--)
        _NOP();
    }
}

////////////////////////////////////////////////////////////////////////////////
////////////////////         TELEHPONE CHECK ISR         ///////////////////////
////////////////////////////////////////////////////////////////////////////////
#pragma vector=PORT2_VECTOR
__interrupt void P20ISR (void)
{
  CLRWDT();
  P2IFG = 0;
  P2IE &= (~0x01);                   //disable interrupt
  //_BIC_SR_IRQ(LPM3_bits);
  DELAY_ms(10);
  CLRWDT();
  if((P2IN & 0x01)==0)           //delay some time re_check i/o port
     {
       CLRWDT();
       systemflg |= 0x20;
       systemflg |= 0x40;
       return;
     }
  else
     {
       CLRWDT();
       P2IE |= 0x01;
       return;
     }

}

////////////////////////////////////////////////////////////////////////////////
////////////             LOW POWER CHECK ISR             ///////////////////////
////////////////////////////////////////////////////////////////////////////////
#pragma vector=PORT1_VECTOR                                                   //
__interrupt void P11ISR (void)                                                //
{                                                                             //
  P1IFG = 0;                                                                  //
  TACTL &= (~0X0030);  //STOP TIMERA0                                         //
  DELAY_ms(100);//delay 1s                                                    //
  if(!(V_CHECK))
      {
        DELAY_ms(100); //delay 1s
        if(!(V_CHECK))
          systemflg |= 0X04; //LOW VOLT FLG BE SET
      }
}
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
////E2PROM START
////
////
////
////////////////////////////////////////////////////////////////////////////////
void E2PRON_START (void)
{
  E2PROM_SCLL;
  E2PROM_SDAH;
  E2PROM_SCLH;
  _NOP();_NOP();
  E2PROM_SDAL;
  _NOP();_NOP();
  E2PROM_SCLL;
}

//////////////////////////////////
////E2PROM STOP
////
////
////
/////////////////////////////////
void E2PROM_STOP (void)
{
  E2PROM_SDAL;
  E2PROM_SCLH;
  _NOP();_NOP();
  E2PROM_SDAH;
  _NOP();_NOP();
  E2PROM_SCLL;
}
/////////////////////////////////
////  MCU RECEIVE E2PROM ACK
////  MCU_R_ACK==0X00  ON ACK :ERROR
////  MCU_R_ACK==0X01  RECEIVE ACK :OK
////
////////////////////////////////
uchar MCU_R_ACK (void)
{
  E2PROM_SCLL;
  E2PROM_SDAH;
  P1DIR &= (~0X01); //SET P1.0 INPUT FOR SDA
  E2PROM_SCLH;
  if((P1IN & 0X01))
    {
        E2PROM_SCLL;
        P1DIR |= 0X01;   //SET P1.0 OUTPUT
        return 0X00;
    }
  else
    {
        E2PROM_SCLL;
        P1DIR |= 0X01;   //SET P1.0 OUTPUT
        return 0X01;
    }
}

////////////////////////////////////////

⌨️ 快捷键说明

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