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

📄 nemain.c

📁 典型的NOKIA短信猫程序,控制NOKIA615061105110等序列手机收发短信.
💻 C
📖 第 1 页 / 共 4 页
字号:
// P5.0--L6 , P5.1--L7

#include  <msp430x14x.h>
#include  "modem.h"
#include  <string.h>

uchar buf[165];
extern void Read6110ID(void);
extern void SendSync(void);
extern void Send6110Cmd(uchar len); 
extern void Start_SendBuf(uchar len);
extern void DelSmg(uchar smgno);
extern void SendSmg(uchar *buf,uint len);
extern void GetSmgCen(void);
extern void DialOut(uchar *DialBuf,uchar len);

struct SENDSTRUT
 {//两个缓冲在串口发送中顺序执行
	uchar Buf[SENDBUFLEN];
	uchar BufPtr;			//发送指针
	uchar BufLen;			//发送缓冲长度
        uchar Ack[SENDACKLEN];		//ACK应答发送缓冲
	uchar AckPtr;			//ACK发送指针
	uchar CmdSeq;			//发送命令序号
 }extern g_Send;

extern uchar g_RecCmd;
extern uchar g_RecLen;
extern uchar g_AckCmd;//Ack返回的CMD号
extern uchar g_AckSeq;//ACK返回的SEQ号
extern uchar g_RecBuf[RECBUFLEN];
extern uchar g_RecPhoneNo[RECPHONELEN];
extern uchar g_SmgCen[9];
extern uchar g_SmgCenLen;//
extern uchar g_SmgNoIn;//发送的对方手机号是0x81/0x91
extern uchar g_CenNoIn;
extern uchar g_SmgNoLen;//
extern uchar g_RecSmg[RECSMGLEN];
extern uchar g_RecUSSD[RECSMGLEN];
extern uchar g_RecSmgLong;
extern uchar g_RecUSSDLen;
extern uchar Sele_Pnum;
extern uchar g_DialBuf[30];
extern uint g_flag;
extern uint g_flag_2;
extern unsigned int C_or_E;
uchar ReadNo = 1;    //读取第N条短信  
uchar DelNo = 1;     //删除第N条短消息

unsigned int long_b; 
unsigned int R232_or_SMS;//此标志是串口或短信息标志 
unsigned int RxInputLong; 
unsigned int RxTimeLong; 
//unsigned int RxOff; 
unsigned int RxCls; 

uchar zwr;
unsigned int DelSMS_Time = 0;
unsigned int PhoneOff_Time = 0;
char *K_P;
void delay_1(void);
void DispatchMes(void);
void ReadSmg(void);
void R232_SENDSMS(void);
void R232_SENDSMS_dir(void);
uchar outnum[20];
uchar W_flash[128];
uchar smgbuf[161];
uchar RXsmg[180];
const int CLSR[2]={0X0d,0X0a};
unsigned int CLSR_1;
const int NUMBERPNOKIA[18]={0X1E,0X00,0X0C,0X02,0X00,0X09,0X00,0X01,0X00,0X0D,
0X00,0X00,0X02,0X01,0X40,0X00,0X50,0X06};
void delay_2(void);
void TestFlash(void);
void TestFlash_1(void);
void MbWriteSec(void);
void EriteSec(void);
void EriteSec_R232(void);
void CWiteSec(void);
void EnableEnhance(void);
void Enable_R(void);
void Rlacid(void);
void MpWriteSec(void);
void IoOutPut(void);
void IOinput(void);
void R232_dail(void);
void USSD(void);
void USSDSel(void);
void ReadUSSD(void);
void Send_SetOk(void);
void Rqustion(void);
void Rqustion_ksms(void);
void PressKey(uchar keyno);
void CALLCOM_UP_H(void);
void B_B_WriteSec(void);
void call_alm(void);
void Rqustion_Lac(void);
void Asn_hm(void);
void Asn_alll(void);
void set_ok_ok(void);
void SmsSimRe( uchar dd );
void SMSNum(void);
void STATUS (void);
void Status_232(void);
uchar hz_bz;
uchar Lac_bz;
uchar g_Menu;
int P_LEVEL;

//************** 串口初始化 ********************
void Serial_Int( void )
{
    /**********  初始化COM0  *********/
    U0CTL = CHAR;                               // N,8,1,无校验
    U0TCTL = SSEL0;                             // UCLK = ACLK = 1/8 MCLK
    U0BR0 = 0x08;                               // 1MHz 115200
    U0BR1 = 0x00;                               // 1MHz 115200
    U0MCTL = 0x5B;                              // 波特率校正因子 
    ME1 |= UTXE0 + URXE0;                       // 允许 USART0 TXD/RXD
    IE1 |= UTXIE0 + URXIE0;                     // USART0 TX、RX 中断允许

    /**********  初始化COM1  *********/ 
    U1CTL = CHAR;                               // 8-bit character
    U1TCTL = SSEL0;                             // UCLK = ACLK
    U1BR0 = 0x68;                               // 1MHz 9600
    U1BR1 = 0x00;                               // 1MHz 9600
    U1MCTL = 0x01;                              // 波特率校正因子
    ME2 |= UTXE1 + URXE1;                       // 允许 USART1 TXD/RXD
//    IE2 |= UTXIE1 + URXIE1;                     // USART1 TX、RX 中断允许             
    IE2 |= URXIE1;                              // USART1 RX 中断允许             
} 

//**************** 定时器B初始化 ***********************
void TimerB0_Int( void )
{
    TBCTL = MC_0;
    TBCTL = TBSSEL_1 + TBCLR;                   // 选择 ACLK 作为时钟源,8分频,清零 TBR 
    TBCTL |= ID_3 + MC_1;                       // 增计数模式    
    TBCCTL0 = CCIE;                             // CCR0比较中断允许
    TBCCR0 = 6200;                              // 定时50ms:50*0.001/(1/(1000000/8))=6250
}

//*********************** I/O初始化 ********************
void Pn_Int( void )
{
    // P1
    P1DIR = 0xFF;
    P1SEL = 0x00;
    P1IE  = 0x00;                               
    P1IES = 0x00;                               
    P1OUT = 0x00;
    // P2
    P2DIR = 0xFF;
    P2SEL = 0x00;
    P2IE  = 0x00;                             
    P2IES = 0x00;                              
    P2OUT = 0x00;                              
    // P3
    P3DIR = 0x5F;                               
    P3SEL = 0xF0;                              // P3.4,5 = USART0 TXD/RXD  P3.6,7 = USART1 TXD/RXD
    P3OUT = 0x50;                 
    // P4
    P4DIR = 0xFF;                              
    P4SEL = 0x00;                           
    P4OUT = 0x00;
    // P5
    P5DIR = 0xFF;
    P5SEL = 0x00;
    P5OUT = 0x00;
    // P6
    P6DIR = 0xFF;
    P6SEL = 0x00;
    P6OUT = 0x00;
} 

// 版本标识
void SendHeadVer( void )
{   
    uchar j;
    uchar *Pt;

    Pt = (uchar *)VERSTRING;
    for( j=0; j<strlen(VERSTRING); j++ )
    {
        TXBUF1 = *Pt++;
        while( !(UTCTL1 & 0X01));
    }

    Pt = (uchar *)DATASTRING;
    for( j=0; j<strlen(DATASTRING); j++ )
    {
        TXBUF1 = *Pt++;
        while( !(UTCTL1 & 0X01) );
    }
    TXBUF1=' ';
    while( !(UTCTL1 & 0X01) );

    Pt = (uchar *)TIMESTRING;
    for( j=0; j<strlen(TIMESTRING); j++ )
    {
        TXBUF1 = *Pt++;
        while( !(UTCTL1 & 0X01) );
    }
    TXBUF1 = '\r';
    while( !(UTCTL1 & 0X01) );
    TXBUF1 = '\n';         
    while( !(UTCTL1 & 0X01) );
}

void main(void)
 { 
      unsigned int i;
      WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
      BCSCTL1 |= XT2OFF + XTS + DIVA_3;           // XT2振荡器关闭,LFTX1工作在高频模式,ACLK的分频系数为8。
      do 
        {
            IFG1 &= ~OFIFG;                       // Clear OSCFault flag
            for (i = 0xFF; i > 0; i--);           // Time for flag to set
        }
      while ((IFG1 & OFIFG) != 0);          // OSCFault flag still set?                
      DCOCTL = 0x73;                              // DCO:=800kHz 
      BCSCTL2 |= SELM_3 + DIVS_3;                 // MCLK的时钟源为LFTX1CLK,分频因子为1;SMCLK的时钟源为DCOCLK,分频因子为8。
      _DINT(); 
      Serial_Int();                              // 串口初始化  
      TimerB0_Int();                              // TimerB初始化; 
      Pn_Int();                                   // I/O 初始化
      _EINT();  
      g_Menu=0;
      RxInputLong=0;  
      RxTimeLong=0;
      g_Send.Ack[0]=0x1E;
      g_Send.Ack[1]=0x00;
      g_Send.Ack[2]=0x0C;
      g_Send.Ack[3]=0x7F;
      g_Send.Ack[4]=0x00;
      g_Send.Ack[5]=0x02;
      g_flag|=0x00;
      g_flag_2|=0x00;
      g_Send.CmdSeq=0x40;
      delay_1();
      SendHeadVer();
      delay_1();
      Read6110ID();
      delay_2();
      delay_2();
      delay_2();
      delay_2();
      EnableEnhance();
      delay_2();
      delay_2();
      delay_2();
      delay_2();
      Enable_R();
      delay_2();
      delay_2();
      delay_2();
      delay_2();
      GetSmgCen();
      delay_2();
      delay_2();
      delay_2();
      delay_2();
      Sele_Pnum=0;
      P_LEVEL=0;
      hz_bz=0x00;
      i=0;
      do
      {
        Status_232();
        delay_2();
        delay_2();
        delay_2();
        delay_2();
        i++;
      }while( (P_LEVEL == 0) && (i<100) );
      i=0; 
      CLSR_1=0;
      while(1)
        {   
            //****检测到手机ID号****
            if(g_flag&RECPHONEID) 
              {
                  g_flag&=~RECPHONEID;
                  TXBUF1='P';
                  while((UTCTL1&0X01)==0);
                  TXBUF1='R';
                  while((UTCTL1&0X01)==0);
                  TXBUF1='I';
                  while((UTCTL1&0X01)==0);
                  TXBUF1='D';
                  while((UTCTL1&0X01)==0);
                  for(i=0;i<15;i++) 
                     {
                         TXBUF1=g_DialBuf[i];
                         while((UTCTL1&0X01)==0);
                     }
                  TXBUF1=0x0D;
                  while((UTCTL1&0X01)==0);
                  TXBUF1=0x0A;
                  while((UTCTL1&0X01)==0);
              }
     
            //****检测到SIM卡短信中心****                       
            if(g_flag&RECSMGCEN)
              { 
                  g_flag&=~RECSMGCEN;
                  TXBUF1='S';
                  while((UTCTL1&0X01)==0);
                  TXBUF1='M';
                  while((UTCTL1&0X01)==0);
                  TXBUF1='S';
                  while((UTCTL1&0X01)==0);
                  TXBUF1='C';
                  while((UTCTL1&0X01)==0);
                  for( i=0; i<(g_SmgCenLen-1); i++ )
                  {
                      TXBUF1 = (g_SmgCen[i+1] & 0x0F) + '0';
                      while( !(UTCTL1 & 0x01) ); 
                      if( (g_SmgCen[i+1] & 0xF0) == 0xF0 )
                          break;            
                      TXBUF1 = (g_SmgCen[i+1] >> 4) + '0';
                      while( !(UTCTL1 & 0x01) );             
                  }    
                  TXBUF1=0x0D;
                  while((UTCTL1&0X01)==0);
                  TXBUF1=0x0A;
                  while((UTCTL1&0X01)==0);
              }
              
            //****系统检测正常****
            if(g_flag_2&LEVEL)
              {
                  g_flag_2&=~LEVEL;
                  TXBUF1='S';
                  while ((UTCTL1&0x01)==0);
                  TXBUF1='Y';
                  while ((UTCTL1&0x01)==0);
                  TXBUF1='S';
                  while ((UTCTL1&0x01)==0);
                  TXBUF1=' ';
                  while ((UTCTL1&0x01)==0);
                  TXBUF1='L';
                  while ((UTCTL1&0x01)==0);
                  TXBUF1=P_LEVEL+0x30;
                  while ((UTCTL1&0x01)==0);
                  TXBUF1=0X0D;
                  while ((UTCTL1&0x01)==0);
                  TXBUF1=0X0A;
                  while ((UTCTL1&0x01)==0);
              }
            
            //**** 查询有无短消息 ******
            if( g_flag_2 & QUERYSMS )
            {
                g_flag_2 &= ~QUERYSMS;
                SMSNum();
            }
            
            //****读取短消息****
            if(g_flag_2&HAVESMS)
              {
                  g_flag_2&=~HAVESMS;
                  SmsSimRe(ReadNo);  
                  ReadNo++;
                  if(ReadNo>50)
                    ReadNo=1;
//                  g_flag_2 |= DELSIMSMS;  
                  delay_2();
              }
            //****SIM卡无短消息****
            if(g_flag_2&HAVENOSMS)
              {
                  g_flag_2&=~HAVENOSMS;
                  TXBUF1='D';
                  while ((UTCTL1&0x01)==0);
                  TXBUF1='E';
                  while ((UTCTL1&0x01)==0);
                  TXBUF1='L';
                  while ((UTCTL1&0x01)==0);
                  TXBUF1=' ';
                  while ((UTCTL1&0x01)==0);
                  TXBUF1='O';
                  while ((UTCTL1&0x01)==0);
                  TXBUF1='K';
                  while ((UTCTL1&0x01)==0);
                  TXBUF1=0x0D;
                  while ((UTCTL1&0x01)==0);
                  TXBUF1=0x0A;
                  while ((UTCTL1&0x01)==0);
              }
            
            //****查询GSM状态****  
            if( g_flag_2 & QUERYSTA )
              {
                  g_flag_2 &= ~QUERYSTA;
                  g_flag |= QUERYTIME;
                  Status_232();
              }
     
            //****短消息发送成功****
            if(g_flag&SMSSENDOK)
              {
                  g_flag&=~SMSSENDOK;
                  P5OUT &= ~0x02;   
                  TXBUF1='T';
                  while((UTCTL1&0X01)==0);
                  TXBUF1='R';
                  while((UTCTL1&0X01)==0);
                  TXBUF1=' ';
                  while((UTCTL1&0X01)==0);
                  TXBUF1='O';
                  while((UTCTL1&0X01)==0);
                  TXBUF1='K';
                  while((UTCTL1&0X01)==0);
                  TXBUF1=0X0D;
                  while((UTCTL1&0X01)==0);
                  TXBUF1=0X0A;
                  while((UTCTL1&0X01)==0);
              }
     
            //****短消息发送失败****
            if(g_flag&SMSSENDFA)
              {
                  g_flag&=~SMSSENDFA;
                  P5OUT &= ~0x02;   
                  TXBUF1='T';
                  while((UTCTL1&0X01)==0);
                  TXBUF1='R';

⌨️ 快捷键说明

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