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

📄 process.c

📁 《MSP430单片机常用模块与综合系统实例精讲》整书的源代码有30个
💻 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);
    // 缁昂怕

⌨️ 快捷键说明

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