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

📄 wqxqz.c

📁 一个用MPS430F1211单片机开发的电话MODEM数据集抄器的原代码
💻 C
📖 第 1 页 / 共 4 页
字号:
////MCU SEND ACK TO E2PROM
////
////
////
////////////////////////////////////////
void MCU_T_ACK (void)
{
  E2PROM_SCLL;
  E2PROM_SDAL;
  _NOP();
  E2PROM_SCLH;
  _NOP();
  E2PROM_SCLL;
  _NOP();
}

////////////////////////////////////////
////MCU SEND NOACK TO E2PROM
////
////
////
///////////////////////////////////////
void MCU_T_NOACK (void)
{
  E2PROM_SDAH;
  _NOP();
  E2PROM_SCLH;
  _NOP();
  E2PROM_SCLL;
  _NOP();
}

////////////////////////////////////////
////MCU SEND 8BIT(BYTE) DATA TO E2PROM
////
////
////
///////////////////////////////////////
void MCU_T_1BYTE (uchar temp)
{
  E2PROM_ENW;
  uchar i;
  for(i=8;i>0;i--)
    {
      E2PROM_SCLL;
      if(temp&0X80)
        E2PROM_SDAH;
      else
        E2PROM_SDAL;
      temp=temp<<1;
      E2PROM_SCLH;
    }
   E2PROM_SCLL;
  E2PROM_ENW;
}

/////////////////////////////////////////////
////MCU RECEIVE 8BIT(BYTE) DATA FROM E2PROM
////
////
////
/////////////////////////////////////////////
uchar MCU_R_1BYTE (void)
{
  E2PROM_SCLL;
  uchar temp1,i;
  //E2PROM_SCLL;
  P1OUT |= 0X01;
  P1DIR &= (~0X01);             //SET P1.0 INPUT FOR SDA
  for(i=8;i>0;i--)
      {
        temp1 = (temp1<<1);
        E2PROM_SCLH;
        if(P1IN & 0X01)
          temp1 += 0x01;
        E2PROM_SCLL;
      }
  P1DIR |= 0X01;               //SET P1.0 IS OUTPUT FOR SDA
  return temp1;
}

////////////////////////////////////////////////////////////////////
////MCU WRITE ONE BYTE DATA TO ONE ADDRESS IN THE E2PROM
////
////
////
////////////////////////////////////////////////////////////////////
void WRITE_E2PROM(uchar *mcu_ramadd,uchar e2promadd,uchar n)//n<=16
{
  CLRWDT();
  _DINT();
  E2PROM_ENW;  //WRITE ENABLE
  E2PRON_START();
  MCU_T_1BYTE(E2PROM_CTLBYTE_W);
  MCU_R_ACK();
  //MCU_T_1BYTE(0X00);
  //MCU_R_ACK();
  MCU_T_1BYTE(e2promadd);
  MCU_R_ACK();
  CLRWDT();
  while(n>0)
      {
        MCU_T_1BYTE(*mcu_ramadd);
        MCU_R_ACK();
        mcu_ramadd++;
        n--;
      }
  E2PROM_STOP();
  DELAY_ms(4);
  E2PROM_ENR; //WRITE DISABLE
  _EINT();
  E2PROM_SCLH;
  CLRWDT();
}

/////////////////////////////////////////////////////////////////////////////////////////
void WRITE_1_BYTE_E2PROM (uchar *mcu_ramadd,uchar e2promadd,uchar n)//singend byte write *n
{
  CLRWDT();
  _DINT();
  E2PROM_ENW;  //WRITE ENABLE
  while(n>0)
      {
        E2PRON_START();
        MCU_T_1BYTE(E2PROM_CTLBYTE_W);
        MCU_R_ACK();
        //MCU_T_1BYTE(0X00);
        //MCU_R_ACK();
        MCU_T_1BYTE(e2promadd);
        MCU_R_ACK();
        MCU_T_1BYTE(*mcu_ramadd);
        MCU_R_ACK();
        E2PROM_STOP();
        DELAY_ms(2);
        mcu_ramadd++;
        e2promadd++;
        n--;
      }
  E2PROM_ENR; //WRITE DISABLE
  _EINT();
  E2PROM_SCLH;
}

////////////////////////////////////////////////////////////
////E2PROM READ n BYTES DATA FROM ONE ADDRESS
////
////
////
////////////////////////////////////////////////////////////
void READ_E2PROM(uchar *mcu_ramadd,uchar e2promadd,uchar n)
{
  _DINT();
  E2PRON_START();
  MCU_T_1BYTE(E2PROM_CTLBYTE_W);
  MCU_R_ACK();
  //MCU_T_1BYTE(0X00);
  //MCU_R_ACK();
  MCU_T_1BYTE(e2promadd);
  MCU_R_ACK();
  E2PRON_START();
  MCU_T_1BYTE(E2PROM_CTLBYTE_R);
  MCU_R_ACK();
  while(n>1)
    {
      *mcu_ramadd = MCU_R_1BYTE();
      mcu_ramadd = mcu_ramadd+1;
      MCU_T_ACK();
      n--;
      _NOP();_NOP();
    }
  *mcu_ramadd = MCU_R_1BYTE();
  MCU_T_NOACK();
  E2PROM_STOP();
  _EINT();
  //E2PROM_ENR;
  E2PROM_SCLH;
  E2PROM_ENR;
}


void INIT_E2PROM(void)
{
  uchar temp4;
  READ_E2PROM(&temp4,E2PROM_INIT_FLG,1);
  if(temp4=='S')
    return;
  else
    {
      WRITE_E2PROM(&zero,E2_ADDR_COUNTER,0X01);
      //WRITE_E2PROM(&e20h,E2_ADDR_POINT,0X01);
      WRITE_E2PROM(&set,E2PROM_INIT_FLG,0X01);
    }
}
////////////////////////////////////////////
////uart trancsc data
////
////
////
////////////////////////////////////////////
void UART_T (uchar * txbuf,uchar number)
{
  CLRWDT();
  for(;number>0;number--)
  {
    while((U0TCTL&TXEPT)==0);//
    TXBUF0=*txbuf;
    txbuf++;
  }
}

///////////////////////////////////////////
////SET MODEM
////
////
////
///////////////////////////////////////////
void SETMODEM (void)
{
  MODPOWON;
  //DELAY_ms(200);
  LED_ONTIME(100);
  UART_T (atq1,6);
  //DELAY_ms(30);
  LED_ONTIME(15);
  UART_T (ate0,6);
  //DELAY_ms(30);
  LED_ONTIME(15);
  UART_T (atd0,7);
  //DELAY_ms(30);
  LED_ONTIME(15);
  UART_T (atr1,7);
  //DELAY_ms(30);
  LED_ONTIME(15);
  UART_T (ats0,7);
  //DELAY_ms(30);
  LED_ONTIME(15);
  UART_T (atw,6);
  //DELAY_ms(200);
  LED_ONTIME(100);
  MODPOWOFF;
}
/*
//////////////////////////////////////////////////
////check MODEM setting
////
////
////
//////////////////////////////////////////////////
void CHK_MODEM(void)
{

}
*/

void ANALYZE_CMD(void)
{
  CLRWDT();
  RECTIME();
  CLRWDT();
  switch(rxtxdatabuf[9])                          //ANALYZE COMMAND INTO THIER service FUNCTION
    {
      case 0xfe: SYS_RD_MN();                break;

      case 0xfc: SYS_RD_TIME();              break;

      case 0xfa: SYS_WR_MN();                break;

      case 0xf8: SYS_WR_TIME();              break;

      case 0xf6: SYS_POWON();                break;

      case 0xf4: SYS_POWOFF();               break;

      case 0xf2: SYS_TELEOFF();              break;

      case 0xa0: SYS_DOWNLOAD_ADDR();        break;

      case 0xa1: SYS_UPLOAD_ADDR();          break;

      case 0xa2: SYS_CLEAR_ADDR();           break;

      case 0xa3: SYS_READ_STATE();           break;

      case 0xa5: SYS_DOWNLOAD_METER_DAY();   break;

      case 0xa6: SYS_UPLOAD_METER_DAY();     break;

      case 0xa7: SYS_CLEAR_METER_DAY();      break;

      default:                               break;
    }
      systemflg &= (~0x80);
}

void SYS_RD_MN(void)
{
  CLRWDT();
  READ_E2PROM(mainnumber,0x03,4);      //READ MAIN_NUMBER FROM memory
  rxtxdatabuf[2]=mainnumber[0];
  rxtxdatabuf[3]=mainnumber[1];
  rxtxdatabuf[4]=mainnumber[2];
  rxtxdatabuf[5]=mainnumber[3];
  rxtxdatabuf[6]=0xbb;
  rxtxdatabuf[7]=0x07;
  rxtxdatabuf[11]=mainnumber[0];
  rxtxdatabuf[12]=mainnumber[1];
  rxtxdatabuf[13]=mainnumber[2];
  rxtxdatabuf[14]=mainnumber[3];
  rxtxdatabuf[15]=ACCOUNT_CHKSUM(15);
  rxtxdatabuf[16]=0x16;
  UART_T (fe,3);
  UART_T (rxtxdatabuf,17);
  CLRWDT();
}

void SYS_RD_TIME(void)
{
  CLRWDT();
  rxtxdatabuf[6]=0xbb;
  rxtxdatabuf[7]=0X0A;
  ReadTime(systemtime);
  rxtxdatabuf[11]=systemtime[0];//sce
  rxtxdatabuf[12]=systemtime[1];//min
  rxtxdatabuf[13]=systemtime[2];//hour
  rxtxdatabuf[14]=systemtime[3];//day
  rxtxdatabuf[15]=systemtime[4];//mon
  rxtxdatabuf[16]=systemtime[5];//week
  rxtxdatabuf[17]=systemtime[6];//year
  rxtxdatabuf[18]=ACCOUNT_CHKSUM(18);
  rxtxdatabuf[19]=0X16;
  UART_T (fe,3);
  UART_T (rxtxdatabuf,20);
  CLRWDT();
}

void SYS_WR_MN(void)
{
  CLRWDT();
  rxtxdatabuf[2]=rxtxdatabuf[11];
  rxtxdatabuf[3]=rxtxdatabuf[12];
  rxtxdatabuf[4]=rxtxdatabuf[13];
  rxtxdatabuf[5]=rxtxdatabuf[14];//
  mainnumber[0]=rxtxdatabuf[2];               //new mainnumber write to memory
  mainnumber[1]=rxtxdatabuf[3];
  mainnumber[2]=rxtxdatabuf[4];
  mainnumber[3]=rxtxdatabuf[5];
  rxtxdatabuf[6]=0xbb;
  rxtxdatabuf[7]=0x03;
  rxtxdatabuf[11]=ACCOUNT_CHKSUM(11);
  rxtxdatabuf[12]=0x16;
  UART_T (fe,3);
  UART_T (rxtxdatabuf,13);                    //write mainnumber function   return fraem
  WRITE_E2PROM(mainnumber,MAINNUMBER,4);      // write new mainnumber to e2prom
  CLRWDT();
}

void SYS_WR_TIME(void)
{
  CLRWDT();
  En_dswork();
  systemtime[0]=rxtxdatabuf[11];//sec
  systemtime[1]=rxtxdatabuf[12];//min
  systemtime[2]=rxtxdatabuf[13];//hour
  systemtime[3]=rxtxdatabuf[14];//day
  systemtime[4]=rxtxdatabuf[15];//mon
  systemtime[5]=rxtxdatabuf[16];//week
  systemtime[6]=rxtxdatabuf[17];//year
  rxtxdatabuf[6]=0xbb;
  rxtxdatabuf[7]=0x03;
  rxtxdatabuf[11]=ACCOUNT_CHKSUM(11);
  rxtxdatabuf[12]=0x16;
  UART_T (fe,3);
  UART_T (rxtxdatabuf,13);
  WriteTime(systemtime);
  CLRWDT();
}

void SYS_POWON(void)
{
  //////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////
  //              TEST POWER OUTPUT1 ON                                       //
  //                                                                          //
  CLRWDT();                                                                   //
  NO_ALLOFF;                                                                  //
  P_C_8_ON;                                                                   //
  DELAY_ms(300);//SYSTEM POWER ON MUST SOME DELAY TIMES                       //
  rxtxdatabuf[6]=0xbb;                                                        //
  rxtxdatabuf[11]=ACCOUNT_CHKSUM(11);                                         //
  UART_T (fe,3);                                                              //
  UART_T (rxtxdatabuf,13);                                                    //
  //////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////
  /*
  whichway = rxtxdatabuf[11];
  CLRWDT();
  DELAY_ms(100);                        //SYSTEM POWER ON MUST SOME DELAY TIMES
  rxtxdatabuf[6]=0xbb;
  rxtxdatabuf[12]=ACCOUNT_CHKSUM(12);
  UART_T (fe,3);
  UART_T (rxtxdatabuf,14);
  CLRWDT();
  ANALYZE_WHICHWAY_POW(whichway);
  CLRWDT();
  */
}

void SYS_POWOFF(void)
{
  CLRWDT();
  ////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////
  //////            TEST POWER OUTPUT1 ON                       //
  ALLOFF;                                                       //
  rxtxdatabuf[6]=0xbb;                                          //
  rxtxdatabuf[11]=ACCOUNT_CHKSUM(11);                           //
  UART_T (fe,3);                                                //
  UART_T (rxtxdatabuf,13);                                      //
  ////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////
  /*
  ALLOFF;
  CLRWDT();
  whichway = 0x0;
  systemflg &= (~0x01);
  rxtxdatabuf[6]=0xbb;
  rxtxdatabuf[11]=ACCOUNT_CHKSUM(11);
  UART_T (fe,3);
  UART_T (rxtxdatabuf,13);
  CLRWDT();
  */
}

void SYS_TELEOFF(void)
{
  CLRWDT();
  ALLOFF;
  UART_T (theadd,4);
  DELAY_ms(2);
  UART_T (h0,5);             //sent atcommand to off telehpone
  LED_ON;
  DELAY_ms(50);
  LED_OFF;
  DELAY_ms(50);
  LED_ON;
  DELAY_ms(50);
  LED_OFF;
  DELAY_ms(50);
  LED_ON;
  DELAY_ms(50);
  LED_OFF;                   //LED ON 3
  MODPOWOFF;                 //off modem power
  systemflg &= (~0x40);      //set system bit6 to exit modem poweron state
  CLRWDT();
}

void SYS_DOWNLOAD_ADDR(void)
{
  CLRWDT();
  uchar temp4;
  READ_E2PROM(&addr_counter,E2_ADDR_COUNTER,1);
  CLRWDT();
  if((addr_counter=='x')||(addr_counter==0xff))
    addr_counter=0x00;
  if(addr_counter == 50)
    return;
  temp4=E2_ADDR_FRIST_ADDR+addr_counter*4;
  WRITE_1_BYTE_E2PROM(rxtxdatabuf+11,temp4,0X04);
  CLRWDT();
  addr_counter++;
  CLRWDT();
  DELAY_ms(2);
  WRITE_E2PROM(&addr_counter,E2_ADDR_COUNTER,0X01);
  CLRWDT();
  rxtxdatabuf[6]=0xbb;
  rxtxdatabuf[7]=0X03;
  rxtxdatabuf[11]=ACCOUNT_CHKSUM(11);
  rxtxdatabuf[12]=0X16;
  UART_T (fe,3);
  UART_T (rxtxdatabuf,13);
  CLRWDT();
}

void SYS_UPLOAD_ADDR(void)

⌨️ 快捷键说明

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