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

📄 msp430_gprs.c

📁 msp430 gsm gprs c 例子程序
💻 C
📖 第 1 页 / 共 3 页
字号:
    作用域:本地文件调用  
            作为主框架程序  
*   功能: 项目主函数,系统的循环运行  
*   参数:  
*   返回值:  
*   创建人:  
*  
*   修改历史:(每条详述)  
\********************************************************/   
void main(void)   
{   
    //看门狗定时器WDT的设置:    
    WDTCTL=WDTPW+WDTHOLD;   //关闭看门狗WDT  ,WDTPW看门狗的口令    
   
    //时钟模块的设置:    
    BCSCTL2|=SELS+SELM1;    //SELS表示用XT2CLK作为SMCLK的时钟源    
                            //SELM1表示用XT2CLK作为MCLK时钟源    
                            //ACLK---辅助时钟,用于软件选择分频因子,也可用软件选做各外围模块的时钟信号    
                            //MCLK---主时钟,主要用于CPU和系统,也可软件选择分频因子    
                            //SMCLK--子时钟,由软件选择用于外围模块    
   
//  BCSCTL2|=DIVS_3;        //选择SMCLK时钟的分频因子为8    
//  BCSCTL2|=DIVM_3;        //选择MCLK时钟的分频因子为8    
//-------------------------------    
   
    do   
    {   
        IFG1 &= ~OFIFG;                 // Clear OSCFault flag    
        for (i = 0xFF; i > 0; i--);      // Time for flag to set    
        for (i = 0xFF; i > 0; i--);   
    }   
    while ( IFG1 & OFIFG );             // OSCFault flag still set?    
//--------------------------------    
    for (i = 60000; i > 0; i--);   
  //定时器TA的设置    
    TACTL|=TASSEL1;         //输入时钟选择MCLK    
    TACTL|=TACLR;           //定时器A清除位CLR清零    
    TACTL|=MC1;             //定时器A选择连续增记数模式    
//    TACTL|=TAIE;          //定时器A溢出中断允许    
   
    TAR=0;                  //定时器A的值清零    
    TACCTL0|=OUT;           //TXD2 Idle as Mark    
    TACCTL1|=OUT;           //TXD3 Idle as Mark    
    TACCTL2|=OUT;           //TXD4 Idle as Mark    
   
  //定时器TB的设置    
    TBCTL|=TBSSEL1;         //输入时钟源选择MCLK    
    TBCTL|=TBCLR;           //定时器B清除位CLR清零    
    TBCTL|=MC1;             //模式为连续增记数    
//    TBCTL|=TBIE;          //定时器B溢出中断允许    
    TBR=0;                  //寄存器B的值清零    
    TBCCTL0|=CCIE;   
    /*  
    =============================================================================  
                                 波特率的计算方式  
              8000 000 /19200=416.6667D(十进制)=01A0H+?0.67D(11010101B/8=0XD5/8)  
              8000 000/9600 =833.333D(十进制)=0341H+0.333D(1010100B/8=0X54/8)  
              8000 000/4800 =1666.66666D(十进制)=0682H+0.67(11010101B/8=0XD5/8)  
    =============================================================================  
    */   
    //串口0设置(接收是中断形式,发送不产生中断)    
    //将与G20通讯的波特率设置为4800    
    UTCTL0|=SSEL1;          //发送选择系统时钟    
    URCTL0|=URXEIE;         //所有字符都可使的URXIFG置位    
    //波特率9600    
    UBR10=0x03;   
    UBR00=0x41;   
    UMCTL0=0x54;   
    //波特率4800    
    /*  
    UBR10=0x06;  
    UBR00=0x82;  
    UMCTL0=0xD5;  
    */   
    UCTL0|=CHAR;            //选择8位字符发送接收    
    UCTL0&=(~SWRST);   
   
    //串口1设置(接收是中断形式,发送不产生中断)    
     //波特率9600    
    UTCTL1|=SSEL1;          //发送选择系统时钟    
    URCTL1|=URXEIE;         //所有字符都可使的URXIFG置位    
   
    UBR11=0x03;   
    UBR01=0x41;   
    UMCTL1=0x54;   
   
    UCTL1|=CHAR;            //选择8位字符发送接收    
    UCTL1&=(~SWRST);   
   
    //中断允许1    
    IE1|=URXIE0;            //URSART0接受中断允许    
//    IE1|=UTXE0;           //URSART0发送中断允许    
    IE1|=OFIE;              //振荡器故障中断允许    
    //中断允许2    
    IE2|=URXIE1;            //USART1接收中断允许    
//    IE2|=UTXE1;           //USART1发送中断允许    
   
   
   
    //模块允许1    
    ME1|=URXE0;             //USART0接收允许(UART模式)    
    ME1|=UTXE0;             //USART0发送允许(UART模式)    
    //模块允许2    
    ME2|=URXE1;             //USART1接收允许(UART模式)    
    ME2|=UTXE1;             //USART1发送允许(UART模式)    
   
   
   
    /*  
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
    设置定义三个模拟串口的相关管脚定义  
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
    */   
    P3SEL=0;   
    P3SEL|=BIT4+BIT5+BIT6+BIT7;     //P3SEL--P3端口选择寄存器,选择UART0,UART1功能    
   
    P1SEL += TXD2;                  // P1.5/TA0 for TXD function    
    P1DIR += TXD2;                  // TXD output on P1    
    P1SEL += RXD2;                  // P1.1/TA0 as RXD input    
   
    P1SEL += TXD3;                  // P1.6/TA0 for TXD function    
    P1DIR += TXD3;                  // TXD output on P1    
    P1SEL += RXD3;                  // P1.2/TA0 as RXD input    
   
    P1SEL += TXD4;                  // P1.7/TA0 for TXD function    
    P1DIR += TXD4;                  // TXD output on P1    
    P1SEL += RXD4;                  // P1.3/TA0 as RXD input    
    /*  
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
    设置定义控制部分相关管脚的定义  
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
    */   
   
    P6DIR|=POWER_ON_OFF;   
    P6OUT&=~POWER_ON_OFF;                       //设置POWER_ON_OFF为低电平    
   
    P1DIR|=MCU_STATUS;   
   
    P6DIR|=STOP_Q2+STOP_Q1;                     //设置为输出模式    
    P6OUT&=~STOP_Q2;                            //设置STOP_Q2为低电平    
    P6OUT&=~STOP_Q1;                            //设置STOP_Q1为低电平    
   
    P6SEL |= BIT1;                              //将A1设置为外围模块功能,即ADC功能    
    P6DIR|=WDI;                                 //设置WDI为输出模式    
    P6OUT&=~WDI;                                //外部硬件看门狗的设置    
   
    P6DIR|=SEL_MIC;   
    P6OUT&=~SEL_MIC;   
   
    Init_OperFlash();   
    /*  
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
          关于串行存储器AT45DB041B的管脚定义  
          器件默认为工作模式3,则为SCK的上升沿发送和接收数据  
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
    */   
    //CS,RST,SCK,SI,WP设置为输出模式    
    P2DIR|=SPI45DB041_CS+SPI45DB041_RST+SPI45DB041_SCK+SPI45DB041_SI;   
    P2OUT|=SPI45DB041_CS;               //置SPI45DB041_CS为高    
    P2OUT|=SPI45DB041_RST;              //置SPI45DB041_RST为高    
    P2OUT&=~SPI45DB041_SCK;             //置SPI45DB041_SCK为低    
    P6DIR|=SPI45DB041_WP;   
    P6OUT&=~SPI45DB041_WP;              //置SPI45DB041_WP为低    
    /*  
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
    设置定义P6.1,P6.2,P6.3管脚为外围模块功能,即ADC转换功能定义  
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
    */   
    _EINT();                            //开中断    
    //WDTCTL=WDTPW;                     //启动看门狗    
    TAUARTCTL|=TAUARTIE;                //比较器A的中断允许    
    RX2_Ready();   
    RX3_Ready();   
    RX4_Ready();   
    gTimer=0;   
    while(gTimer<2000) {Clear_Exter_WatchDog();}   
    Send_COM1_String((unsigned char *)MAINSYS,sizeof(MAINSYS));   
    //初始化模块各参数    
    gInternal_Flag=0;   
    gGeneral_Flag=0;   
    gOther_Flag=0;   
    Init_MAIN_Module();   
    gGPS_No_Output_Timer=0;   
    gNO_Sram_Data_Timer=0;   
    Clear_Exter_WatchDog();   
    while(1)   
    {   
        //调试部分的串口显示程序    
        if( (Debug_Timer>20000)&&((gGeneral_Flag&TCP_PHONE_F_1)==0) )   
        {   
            RX2_Ready();RX3_Ready();RX4_Ready();   
            //调试串口1写外部SRAM和读外部SRMA的程序检验部分    
            Debug_Timer=0;   
            //显示M22的工作方式状态    
            Send_COM1_Byte(ASCII(gM22_Status/10));   
            Send_COM1_Byte(ASCII(gM22_Status%10));   
            Send_COM1_Byte('=');   
            //显示系统正在周期发送数据的类型    
            Send_COM1_Byte(ASCII(gCycle_Send_Status/10));   
            Send_COM1_Byte(ASCII(gCycle_Send_Status%10));   
            Send_COM1_Byte('=');   
            Send_COM1_Byte(ASCII(gAlarm_Type/10));   
            Send_COM1_Byte(ASCII(gAlarm_Type%10));   
            Send_COM1_Byte('[');   
            Send_COM1_Byte(ASCII(gStatus1_Flag/0x10));   
            Send_COM1_Byte(ASCII(gStatus1_Flag%0x10));   
            Send_COM1_Byte(':');   
            Send_COM1_Byte(ASCII(gStatus2_Flag/0x10));   
            Send_COM1_Byte(ASCII(gStatus2_Flag%0x10));   
            Send_COM1_Byte(':');   
            Send_COM1_Byte(ASCII(gStatus3_Flag/0x10));   
            Send_COM1_Byte(ASCII(gStatus3_Flag%0x10));   
            Send_COM1_Byte(']');   
   
            if(gGeneral_Flag&GPS_VALID_F_1)   
            {   
                Send_COM1_Byte('A');   
            }   
            else Send_COM1_Byte('V');   
            Send_COM1_Byte(':');   
            if(gGeneral_Flag&NUM1_VAILD_F_1)   
            {   
                Send_COM1_Byte('P');   
            }   
            else Send_COM1_Byte('N');   
            Send_COM1_Byte(':');   
            if(gInternal_Flag&CENTER_NUM_VAILD_F_1)   
            {   
                Send_COM1_Byte('C');   
            }   
            else Send_COM1_Byte('N');   
            Send_COM1_Byte(':');   
            if(gGeneral_Flag&LAND_TCP_ERROR_F_1)   
            {   
                Send_COM1_Byte('G');   
            }   
            else Send_COM1_Byte('N');   
            Send_COM1_Byte(':');   
            if(gInternal_Flag&SEND_CIRCLE_F_1)   
            {   
                Send_COM1_Byte('S');   
            }   
            else Send_COM1_Byte('N');   
            Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);   
        }   
        Do_GPS_Module();   
        Clear_Exter_WatchDog();   
        Do_Disp_Module();   
        Clear_Exter_WatchDog();   
        Do_Handle_Module();   
        Do_Other_Module();   
        Clear_Exter_WatchDog();   
        Do_Record_Module();   
        Clear_Exter_WatchDog();   
   
        //主控系统中的两个模块处于需要断电状态的循环程序    
        if( ((gGeneral_Flag&OFF_M22_F_1)||(gGeneral_Flag&OFF_GPS_F_1))   
            && (gPhone_Status==READY)   )   
        {   
            //处理两个模块的掉电子程序    
            Do_OFF_Power();   
            Clear_Exter_WatchDog();   
            gGPS_No_Output_Timer=0;   

⌨️ 快捷键说明

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