?? section9.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 的發(fā)送緩沖區(qū)
char UART0_RX_BUF[200]; // 串口 0 的接收緩沖區(qū)
char UART1_TX_BUF[50]; // 串口 1 的發(fā)送緩沖區(qū)
char UART1_RX_BUF[50]; // 串口 1 的接收緩沖區(qū)
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; // 關(guān)閉看門狗
_DINT(); // 關(guān)閉中斷
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;// 設(shè)置中斷標志,進入發(fā)送中斷程序
Delay_ms(500);
nTX0_Len = setCmgf(UART0_TX_BUF);
IFG1 |= UTXIFG0;// 設(shè)置中斷標志,進入發(fā)送中斷程序
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;// 設(shè)置中斷標志,進入發(fā)送中斷程序
break;
}
else
{
nTX1_Len = SetError(UART1_TX_BUF);
IFG2 |= UTXIFG1;// 設(shè)置中斷標志,進入發(fā)送中斷程序
}
}
}
//循環(huán)處理
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;// 設(shè)置中斷標志,進入發(fā)送中斷程序
//等待"> "
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;// 設(shè)置中斷標志,進入發(fā)送中斷程序
Delay_ms(10000);
}
}
}
////////////////////////////////////////
// 處理來自串口 0 的接收中斷
interrupt [UART0RX_VECTOR] void UART0_RX_ISR(void)
{
UART0_RX_BUF[nRX0_Len_temp] = RXBUF0; //接收來自的數(shù)據(jù)
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 的發(fā)送中斷
interrupt [UART0TX_VECTOR] void UART0_TX_ISR(void)
{
if(nTX0_Len != 0)
{
nTX0_Flag = 0; // 表示緩沖區(qū)里的數(shù)據(jù)沒有發(fā)送完
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; //接收來自的數(shù)據(jù)
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 的發(fā)送中斷
interrupt [UART1TX_VECTOR] void UART1_TX_ISR(void)
{
if(nTX1_Len != 0)
{
nTX1_Flag = 0; // 表示緩沖區(qū)里的數(shù)據(jù)沒有發(fā)送完
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);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -