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

📄 section9.c

📁 介绍了短消息的格式设置、消息删除、发送接收等源码
💻 C
字号:
#include <MSP430X14X.h>
#include "uart.h"
#include "TC35.h"


//定义全局变量
static char nComm;
//定义串口操作变量
char nRev_UART0;	// 串口 0 的接收标志
char nRev_UART1;	// 串口 1 的接收标志
char UART0_TX_BUF[200];	// 串口 0 的发送缓冲区
char UART0_RX_BUF[200];	// 串口 0 的接收缓冲区
char UART1_TX_BUF[50];	// 串口 1 的发送缓冲区
char UART1_RX_BUF[50];	// 串口 1 的接收缓冲区
char pBuf0[100];
static int nTX1_Len;
static char nRX1_Len;
char nRX1_Len_temp;
static int nTX0_Len;
static int nRX0_Len;
int nRX0_Len_temp;
static char nTX0_Flag;
static char nTX1_Flag;
int nSend_TX0;
int nSend_TX1;

void main(void)
{

    int j;
    int n;
    int nTemp;
    int nLen1;
    int nLen2;
    char nRes_UART1;
    char nRes_UART0;
    char PhoneNumber[18];
    char UART1_RX_Temp[50];
    char UART0_RX_Temp[20];
    char pOut1[40];
    char pOut2[200];    
    char nSend;
    int nPhone;
    
    WDTCTL = WDTPW + WDTHOLD;   // 关闭看门狗    
    
    _DINT();			// 关闭中断
    
    nSend_TX1 = 0;
    nSend_TX0 = 0;
    nTX1_Flag = 0;
    nTX0_Flag = 0;
    nTX0_Len = 0;
    nTX1_Len = 0;
    nRX1_Len = 0;
    nRX0_Len = 0;
    nRev_UART1 = 0;
    nRev_UART0 = 0;
    nPhone = 0;
    nLen1 = 0;
    nLen2 = 0;
    nComm = 0;
    nSend = 0;
    /////////////////////////////////
    // 初始化
    Init_CLK();
    Init_UART0();
    Init_UART1();

	_EINT();//打开中断

    // TC35初始化
    tc35_init();
    Delay_ms(100);
    nTX0_Len = setCsca(UART0_TX_BUF);
    IFG1 |= UTXIFG0;// 设置中断标志,进入发送中断程序
    Delay_ms(500);
    nTX0_Len = setCmgf(UART0_TX_BUF);
    IFG1 |= UTXIFG0;// 设置中断标志,进入发送中断程序
    Delay_ms(500);
    //等待配置
    for(;;)
    {
    	if(nRev_UART1 == 1)
    	{
	    nRev_UART1 = 0;
            for(i = 0;i < nRX1_Len;i++)
	    {
		UART1_RX_Temp[i] = UART1_RX_BUF[i];
	    }
	    //获得电话号码
	    nPhone = SetPhone(UART1_RX_Temp,PhoneNumber,nRX1_Len);
	    if(nPhone != 0) 
	    {
	    	nTX1_Len = SetOK(UART1_TX_BUF);
	    	IFG2 |= UTXIFG1;// 设置中断标志,进入发送中断程序
	    	break;
	    }
	    else
	    {
	    	nTX1_Len = SetError(UART1_TX_BUF);
	    	IFG2 |= UTXIFG1;// 设置中断标志,进入发送中断程序
	    }
	
    	}    	
    }
    //循环处理
    for(;;)
    {
    	if(nComm == 1)
    	{
    	    nComm = 0;
    	    for(i = 0;i < 50;i++)
    	    {
    	    	pBuf[i] = i;
    	    }
    	    sendSms(PhoneNumber,nPhone,pBuf,50,&nLen1,&nLen2,pOut1,pOut2);
    	    for(i = 0;i < nLen1;i++) 
    	    {
    	    	UART0_TX_BUF[i] = pOut1[i];
    	    }
    	    nTX0_Len = nLen1;
    	    IFG1 |= UTXIFG0;// 设置中断标志,进入发送中断程序
    	    //等待"> "
    	    for(;;)
    	    {
    	    	if(nRev_UART0 == 1)
    	    	{
    	    	    nRev_UART0 = 0;
    	    	    for(i = 0;i < nRX0_Len;i++)
	            {
		        UART0_RX_Temp[i] = UART0_RX_BUF[i];
	            }
    	    	    if(nRX0_Len >= 2)
    	    	    {
    	    	    	if((UART0_RX_Temp[0] == 62) 
    	    	    	   && (UART0_RX_Temp[1] == 32))
    	    	    	{
    	    	    	    nSend = 1;
    	    	    	    break;
    	    	    	}
    	    	    }
    	    	    else 
    	    	    {
    	    	    	nSend = 0;
    	    	    	break;
    	    	    }
    	    	    
    	    	}
    	    	
    	    }
    	    for(i = 0;i < nLen2;i++) 
    	    {
    	    	UART0_TX_BUF[i] = pOut2[i];
    	    }
    	    nTX0_Len = nLen2;
    	    IFG1 |= UTXIFG0;// 设置中断标志,进入发送中断程序
    	    Delay_ms(10000);
    	}
    	
    }
    
}
////////////////////////////////////////
// 处理来自串口 0 的接收中断
interrupt [UART0RX_VECTOR] void UART0_RX_ISR(void)
{
    UART0_RX_BUF[nRX0_Len_temp] = RXBUF0;	//接收来自的数据
    
    nRX0_Len_temp += 1;
    if(UART0_RX_BUF[nRX0_Len_temp - 1] == 13)
    {
        nRX0_Len = nRX0_Len_temp;
        nRev_UART0 = 1;
        nRX0_Len_temp = 0;
    }  
}
////////////////////////////////////////
// 处理来自串口 0 的发送中断
interrupt [UART0TX_VECTOR] void UART0_TX_ISR(void)
{
    if(nTX0_Len != 0)
    {
    	nTX0_Flag = 0;				// 表示缓冲区里的数据没有发送完
    	
    	TXBUF0 = UART0_TX_BUF[nSend_TX0];
    	nSend_TX0 += 1;
    	Delay_us(5);
    	if(nSend_TX0 >= nTX0_Len)
    	{
    	    nSend_TX0 = 0;
    	    nTX0_Len = 0;
    	    nTX0_Flag = 1;
    	}
    }
}
///////////////////////////////////////
// 处理来自串口 1 的接收中断
interrupt [UART1RX_VECTOR] void UART1_RX_ISR(void)
{
    
    UART1_RX_BUF[nRX1_Len_temp] = RXBUF1;	//接收来自的数据
    
    nRX1_Len_temp += 1;
        
    if(UART1_RX_BUF[nRX1_Len_temp - 1] == 13)
    {
    	nRX1_Len = nRX1_Len_temp;
    	nRev_UART1 = 1;
    	nRX1_Len_temp = 0;
    }
}
///////////////////////////////////////
// 处理来自串口 1 的发送中断
interrupt [UART1TX_VECTOR] void UART1_TX_ISR(void)
{
    if(nTX1_Len != 0)
    {
    	nTX1_Flag = 0;			// 表示缓冲区里的数据没有发送完
    	
    	TXBUF1 = UART1_TX_BUF[nSend_TX1];
    	nSend_TX1 += 1;
    	
    	if(nSend_TX1 >= nTX1_Len)
    	{
    	    nSend_TX1 = 0;
    	    nTX1_Len = 0;
    	    nTX1_Flag = 1;
    	}
    }
}
///////////////////////////////////////
// 处理来自端口 1 的中断
interrupt [PORT1_VECTOR] void COMM_ISR(void)
{
    
    if(P1IFG & BIT5)
    {
    	nComm = 1;

    	P1IFG &= ~(BIT5);	// 清除中断标志位
    	Delay_us(100);
    }
}

⌨️ 快捷键说明

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