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

📄 process.c

📁 msp430单片机基于modem数据传输的通讯程序设计
💻 C
字号:
#include "Process.h"
#include "flash.h"
#include "const.h"



int nATlen = 0;
int nBuf1 = 0;
int nBuf2 = 0;
int nBuf3 = 0;
void Init_Process(void)
{
    //////////////////////////////////////////
    // 为了提高算法的搜索效率,这里采利用 AT
    // 命令的长度和3个关键字符来识别AT命令
    int *pAtLen;
    int *pAtBuf1;
    int *pAtBuf2;
    int *pAtBuf3;
    
    pAtLen = (int*)AT_LEN;
    FLASH_clr(pAtLen);
    pAtBuf2 = (int*)AT_BUFA2;
    FLASH_clr(pAtBuf2);
    pAtLen = (int*)AT_LEN;
    pAtBuf1 = (int*)AT_BUFA1;
    pAtBuf2 = (int*)AT_BUFA2;
    pAtBuf3 = (int*)AT_BUFA3;
    // 0 AT命令的长度,检查通信链路正常命令
    FLASH_ww(pAtLen,3);
    FLASH_ww(pAtBuf1,'A');
    FLASH_ww(pAtBuf2,'T');
    FLASH_ww(pAtBuf3,13);

    
    // 1 读出设置的号码AT+PHONENUM=?(enter)
    pAtLen += 1;
    pAtBuf1 += 1;
    pAtBuf2 += 1;
    pAtBuf3 += 1;
    FLASH_ww(pAtLen,14);
    FLASH_ww(pAtBuf1,'P');
    FLASH_ww(pAtBuf2,'H');
    FLASH_ww(pAtBuf3,'O');    
    
    // 2 AT+PHONENUM=Xxxxxxxxx(Enter)
    pAtLen += 1;
    pAtBuf1 += 1;
    pAtBuf2 += 1;
    pAtBuf3 += 1;
    FLASH_ww(pAtLen,22);
    FLASH_ww(pAtBuf1,'P');
    FLASH_ww(pAtBuf2,'H');
    FLASH_ww(pAtBuf3,'O');
    
    return;
}
int ProcessUART0(char *pBuf,int nLen)
{
    int nTemp = -1;
    int i;
    
    
    // 处理拨号后的响应
    for(i = 0;i < nLen;i++)
    {
        if(pBuf[i] == 0x37 && pBuf[i + 1] == 0x39)
        {
            nTemp = 1;
            break;
        }
    }
    // 处理初始化后的响应和发送+++以及ATH0的响应
    if(pBuf[0] == 0x30 && pBuf[1] == 13)
        nTemp = 4;
    // 处理拨号后的响应
    if(pBuf[0] == 0x31 && pBuf[1] == 0x32 && pBuf[2] == 13)
        nTemp = 1;
    // 处理是否已经在拨
    if(pBuf[0] == 0x33 && pBuf[1] == 13)
        nTemp = 3;
    // 处理拨号后的响应
    if(pBuf[0] == 0x33 && pBuf[1] == 0x30 && pBuf[2] == 13)
        nTemp = 1;
    // 处理拨号后的响应
    if(pBuf[0] == 0x35 && pBuf[1] == 0x30 && pBuf[2] == 0x20 
       && pBuf[3] == 0x20 && pBuf[4] == 0x37 && pBuf[5] == 0x39 
       && pBuf[6] == 13)
    	nTemp = 1;
    if(pBuf[0] == 0x35 && pBuf[1] == 0x31 && pBuf[2] == 0x20 
       && pBuf[3] == 0x20 && pBuf[4] == 0x37 && pBuf[5] == 0x39 
       && pBuf[6] == 13)
    	nTemp = 1;
    if(pBuf[0] == 0x32 && pBuf[1] == 0x30 && pBuf[2] == 0x20 
       && pBuf[3] == 0x20 && pBuf[4] == 0x37 && pBuf[5] == 0x39 
       && pBuf[6] == 13)
    	nTemp = 1;
    // 没有接电话线的情况
    if(pBuf[0] == 0x36 && pBuf[1] == 13)
    	nTemp = 5;
    	
    // 对方挂断的情况
    if(pBuf[0] == 0x37 && pBuf[1] == 13)
    	nTemp = 6;
    // 2表示发送+++,3表示收到+++响应
    if(pBuf[0] == 13)
    	nTemp = 7;

    return nTemp;
}
/////////////////////////////////////
// 正确返回各个命令对应的值,
// 错误返回 -1
int ProcessUART1(char *pBuf,int nLen)
{
    int *pAtLen;
    int *pAtBuf1;
    int *pAtBuf2;
    int *pAtBuf3;
    int nTemp = -1;
    int i;
    
    if(nLen <= 2) return -1;
    if(nLen == 3)
    {
    	if((pBuf[0] == 'A') && (pBuf[1] == 'T') && (pBuf[2] == 13))
    	    return 0;
    }

    
    pAtLen = (int*)AT_LEN;
    pAtBuf1 = (int*)AT_BUFA1;
    pAtBuf2 = (int*)AT_BUFA2;
    pAtBuf3 = (int*)AT_BUFA3;
    for(i = 0;i < 3;i++)
    {
        nATlen = *(pAtLen + i);
    	if(nLen == nATlen)
    	{
    	    nBuf1 = *(pAtBuf1 + i);
    	    nBuf2 = *(pAtBuf2 + i);
    	    nBuf3 = *(pAtBuf3 + i);
    	    if((pBuf[3] == nBuf1) && (pBuf[4] == nBuf2) && (pBuf[5] == nBuf3))
    	    {
    	    	nTemp = i;
    	    }
    	}
    }
    return nTemp;
}
// 将结果由参数返回
char ReadPhoneNum(char strPhone[8])
{
    int *pFlash;
    int nTemp;
    int i;
    char chrRes;
    
    pFlash = (int*)PHONE_ADDR;
    
    
    // 第一个数用来确定号码的位数
    chrRes = (char)(*pFlash - 0x30);
    // 第一个电话号码
    pFlash += 1;
    nTemp = *pFlash;
    strPhone[0] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    strPhone[1] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    strPhone[2] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    strPhone[3] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    strPhone[4] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    strPhone[5] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    strPhone[6] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    strPhone[7] = (char)(nTemp & 0x00ff);
    for(i = 0;i < 8;i++)
    {
    	if(strPhone[i] == 0xff) 
    	{
    	    chrRes = 2;
    	    break;
    	}    	
    }

    return chrRes;
}
// 正确返回 0,错误返回 1
char SetPhone(char UART1_RX_Temp[])
{
    int *pFlash;
    
    pFlash = (int*)PHONE_ADDR;
    
    FLASH_clr(pFlash);
    // 第一个电话号码
    // 写数据到FLASH里面
    if(UART1_RX_Temp[12] >= 0x30 && UART1_RX_Temp[12] <= 0x39) 
        FLASH_ww(pFlash,UART1_RX_Temp[12]);// 1 或者 0
    else 
    {
    	FLASH_clr(pFlash);
    	return 1;
    }
    
    pFlash += 1;
    if(UART1_RX_Temp[13] >= 0x30 && UART1_RX_Temp[13] <= 0x39) 
        FLASH_ww(pFlash,UART1_RX_Temp[13]);
    else
    {
    	FLASH_clr(pFlash);
    	return 1;
    }
    	    	   
    pFlash += 1;
    if(UART1_RX_Temp[14] >= 0x30 && UART1_RX_Temp[14] <= 0x39) 
        FLASH_ww(pFlash,UART1_RX_Temp[14]);
    else
    {
    	FLASH_clr(pFlash);
    	return 1;
    }
    	    	    
    pFlash += 1;
    if(UART1_RX_Temp[15] >= 0x30 && UART1_RX_Temp[15] <= 0x39) 
        FLASH_ww(pFlash,UART1_RX_Temp[15]);
    else
    {
    	FLASH_clr(pFlash);
    	return 1;
    }
    	    	    
    pFlash += 1;
    if(UART1_RX_Temp[16] >= 0x30 && UART1_RX_Temp[16] <= 0x39) 
        FLASH_ww(pFlash,UART1_RX_Temp[16]);
    else
    {
    	FLASH_clr(pFlash);
    	return 1;
    }
    	    	    
    pFlash += 1;
    if(UART1_RX_Temp[17] >= 0x30 && UART1_RX_Temp[17] <= 0x39) 
        FLASH_ww(pFlash,UART1_RX_Temp[17]);
    else
    {
    	FLASH_clr(pFlash);
    	return 1;
    }
    	    	    
    pFlash += 1;
    if(UART1_RX_Temp[18] >= 0x30 && UART1_RX_Temp[18] <= 0x39) 
        FLASH_ww(pFlash,UART1_RX_Temp[18]);
    else
    {
    	FLASH_clr(pFlash);
    	return 1;
    }
    	    	    
    pFlash += 1;
    if(UART1_RX_Temp[19] >= 0x30 && UART1_RX_Temp[19] <= 0x39) 
        FLASH_ww(pFlash,UART1_RX_Temp[19]);
    else
    {
    	FLASH_clr(pFlash);
    	return 1;
    }
    	    	    
    pFlash += 1;
    if(UART1_RX_Temp[20] >= 0x30 && UART1_RX_Temp[20] <= 0x39) 
        FLASH_ww(pFlash,UART1_RX_Temp[20]);
    else
    {
    	FLASH_clr(pFlash);
    	return 1;
    }
    
    return 0;
}
void QueryPhone(char UART1_TX_BUF[],int *nLen)
{
    int *pFlash;
    int nTemp;
    
    pFlash = (int*)PHONE_ADDR;
    UART1_TX_BUF[0] = '+';
    UART1_TX_BUF[1] = 'P';
    UART1_TX_BUF[2] = 'H';
    UART1_TX_BUF[3] = 'O';
    UART1_TX_BUF[4] = 'N';
    UART1_TX_BUF[5] = 'E';
    UART1_TX_BUF[6] = 'N';
    UART1_TX_BUF[7] = 'U';
    UART1_TX_BUF[8] = 'M';
    UART1_TX_BUF[9] = '=';
    // 第一个电话号码
    // 从FLASH里面读出数据
    nTemp = *pFlash;
    UART1_TX_BUF[10] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    UART1_TX_BUF[11] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    UART1_TX_BUF[12] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    UART1_TX_BUF[13] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    UART1_TX_BUF[14] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    UART1_TX_BUF[15] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    UART1_TX_BUF[16] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    UART1_TX_BUF[17] = (char)(nTemp & 0x00ff);
    pFlash += 1;
    nTemp = *pFlash;
    UART1_TX_BUF[18] = (char)(nTemp & 0x00ff);
    
    UART1_TX_BUF[19] = 13;
    
    *nLen = 20;
}
void SetOK(char UART1_TX_BUF[],int *nLen)
{
    UART1_TX_BUF[0] = 'O';
    UART1_TX_BUF[1] = 'K';
    UART1_TX_BUF[2] = 13;
    
    *nLen = 3;
}
void SetError(char UART1_TX_BUF[],int *nLen)
{
    UART1_TX_BUF[0] = 'E';
    UART1_TX_BUF[1] = 'R';
    UART1_TX_BUF[2] = 'R';
    UART1_TX_BUF[3] = 'O';
    UART1_TX_BUF[4] = 'R';
    UART1_TX_BUF[5] = 13;
    
    *nLen = 6;
}






⌨️ 快捷键说明

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