📄 nemain.c
字号:
// P5.0--L6 , P5.1--L7
#include <msp430x14x.h>
#include "modem.h"
#include <string.h>
uchar buf[165];
extern void Read6110ID(void);
extern void SendSync(void);
extern void Send6110Cmd(uchar len);
extern void Start_SendBuf(uchar len);
extern void DelSmg(uchar smgno);
extern void SendSmg(uchar *buf,uint len);
extern void GetSmgCen(void);
extern void DialOut(uchar *DialBuf,uchar len);
struct SENDSTRUT
{//两个缓冲在串口发送中顺序执行
uchar Buf[SENDBUFLEN];
uchar BufPtr; //发送指针
uchar BufLen; //发送缓冲长度
uchar Ack[SENDACKLEN]; //ACK应答发送缓冲
uchar AckPtr; //ACK发送指针
uchar CmdSeq; //发送命令序号
}extern g_Send;
extern uchar g_RecCmd;
extern uchar g_RecLen;
extern uchar g_AckCmd;//Ack返回的CMD号
extern uchar g_AckSeq;//ACK返回的SEQ号
extern uchar g_RecBuf[RECBUFLEN];
extern uchar g_RecPhoneNo[RECPHONELEN];
extern uchar g_SmgCen[9];
extern uchar g_SmgCenLen;//
extern uchar g_SmgNoIn;//发送的对方手机号是0x81/0x91
extern uchar g_CenNoIn;
extern uchar g_SmgNoLen;//
extern uchar g_RecSmg[RECSMGLEN];
extern uchar g_RecUSSD[RECSMGLEN];
extern uchar g_RecSmgLong;
extern uchar g_RecUSSDLen;
extern uchar Sele_Pnum;
extern uchar g_DialBuf[30];
extern uint g_flag;
extern uint g_flag_2;
extern unsigned int C_or_E;
uchar ReadNo = 1; //读取第N条短信
uchar DelNo = 1; //删除第N条短消息
unsigned int long_b;
unsigned int R232_or_SMS;//此标志是串口或短信息标志
unsigned int RxInputLong;
unsigned int RxTimeLong;
//unsigned int RxOff;
unsigned int RxCls;
uchar zwr;
unsigned int DelSMS_Time = 0;
unsigned int PhoneOff_Time = 0;
char *K_P;
void delay_1(void);
void DispatchMes(void);
void ReadSmg(void);
void R232_SENDSMS(void);
void R232_SENDSMS_dir(void);
uchar outnum[20];
uchar W_flash[128];
uchar smgbuf[161];
uchar RXsmg[180];
const int CLSR[2]={0X0d,0X0a};
unsigned int CLSR_1;
const int NUMBERPNOKIA[18]={0X1E,0X00,0X0C,0X02,0X00,0X09,0X00,0X01,0X00,0X0D,
0X00,0X00,0X02,0X01,0X40,0X00,0X50,0X06};
void delay_2(void);
void TestFlash(void);
void TestFlash_1(void);
void MbWriteSec(void);
void EriteSec(void);
void EriteSec_R232(void);
void CWiteSec(void);
void EnableEnhance(void);
void Enable_R(void);
void Rlacid(void);
void MpWriteSec(void);
void IoOutPut(void);
void IOinput(void);
void R232_dail(void);
void USSD(void);
void USSDSel(void);
void ReadUSSD(void);
void Send_SetOk(void);
void Rqustion(void);
void Rqustion_ksms(void);
void PressKey(uchar keyno);
void CALLCOM_UP_H(void);
void B_B_WriteSec(void);
void call_alm(void);
void Rqustion_Lac(void);
void Asn_hm(void);
void Asn_alll(void);
void set_ok_ok(void);
void SmsSimRe( uchar dd );
void SMSNum(void);
void STATUS (void);
void Status_232(void);
uchar hz_bz;
uchar Lac_bz;
uchar g_Menu;
int P_LEVEL;
//************** 串口初始化 ********************
void Serial_Int( void )
{
/********** 初始化COM0 *********/
U0CTL = CHAR; // N,8,1,无校验
U0TCTL = SSEL0; // UCLK = ACLK = 1/8 MCLK
U0BR0 = 0x08; // 1MHz 115200
U0BR1 = 0x00; // 1MHz 115200
U0MCTL = 0x5B; // 波特率校正因子
ME1 |= UTXE0 + URXE0; // 允许 USART0 TXD/RXD
IE1 |= UTXIE0 + URXIE0; // USART0 TX、RX 中断允许
/********** 初始化COM1 *********/
U1CTL = CHAR; // 8-bit character
U1TCTL = SSEL0; // UCLK = ACLK
U1BR0 = 0x68; // 1MHz 9600
U1BR1 = 0x00; // 1MHz 9600
U1MCTL = 0x01; // 波特率校正因子
ME2 |= UTXE1 + URXE1; // 允许 USART1 TXD/RXD
// IE2 |= UTXIE1 + URXIE1; // USART1 TX、RX 中断允许
IE2 |= URXIE1; // USART1 RX 中断允许
}
//**************** 定时器B初始化 ***********************
void TimerB0_Int( void )
{
TBCTL = MC_0;
TBCTL = TBSSEL_1 + TBCLR; // 选择 ACLK 作为时钟源,8分频,清零 TBR
TBCTL |= ID_3 + MC_1; // 增计数模式
TBCCTL0 = CCIE; // CCR0比较中断允许
TBCCR0 = 6200; // 定时50ms:50*0.001/(1/(1000000/8))=6250
}
//*********************** I/O初始化 ********************
void Pn_Int( void )
{
// P1
P1DIR = 0xFF;
P1SEL = 0x00;
P1IE = 0x00;
P1IES = 0x00;
P1OUT = 0x00;
// P2
P2DIR = 0xFF;
P2SEL = 0x00;
P2IE = 0x00;
P2IES = 0x00;
P2OUT = 0x00;
// P3
P3DIR = 0x5F;
P3SEL = 0xF0; // P3.4,5 = USART0 TXD/RXD P3.6,7 = USART1 TXD/RXD
P3OUT = 0x50;
// P4
P4DIR = 0xFF;
P4SEL = 0x00;
P4OUT = 0x00;
// P5
P5DIR = 0xFF;
P5SEL = 0x00;
P5OUT = 0x00;
// P6
P6DIR = 0xFF;
P6SEL = 0x00;
P6OUT = 0x00;
}
// 版本标识
void SendHeadVer( void )
{
uchar j;
uchar *Pt;
Pt = (uchar *)VERSTRING;
for( j=0; j<strlen(VERSTRING); j++ )
{
TXBUF1 = *Pt++;
while( !(UTCTL1 & 0X01));
}
Pt = (uchar *)DATASTRING;
for( j=0; j<strlen(DATASTRING); j++ )
{
TXBUF1 = *Pt++;
while( !(UTCTL1 & 0X01) );
}
TXBUF1=' ';
while( !(UTCTL1 & 0X01) );
Pt = (uchar *)TIMESTRING;
for( j=0; j<strlen(TIMESTRING); j++ )
{
TXBUF1 = *Pt++;
while( !(UTCTL1 & 0X01) );
}
TXBUF1 = '\r';
while( !(UTCTL1 & 0X01) );
TXBUF1 = '\n';
while( !(UTCTL1 & 0X01) );
}
void main(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
BCSCTL1 |= XT2OFF + XTS + DIVA_3; // XT2振荡器关闭,LFTX1工作在高频模式,ACLK的分频系数为8。
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?
DCOCTL = 0x73; // DCO:=800kHz
BCSCTL2 |= SELM_3 + DIVS_3; // MCLK的时钟源为LFTX1CLK,分频因子为1;SMCLK的时钟源为DCOCLK,分频因子为8。
_DINT();
Serial_Int(); // 串口初始化
TimerB0_Int(); // TimerB初始化;
Pn_Int(); // I/O 初始化
_EINT();
g_Menu=0;
RxInputLong=0;
RxTimeLong=0;
g_Send.Ack[0]=0x1E;
g_Send.Ack[1]=0x00;
g_Send.Ack[2]=0x0C;
g_Send.Ack[3]=0x7F;
g_Send.Ack[4]=0x00;
g_Send.Ack[5]=0x02;
g_flag|=0x00;
g_flag_2|=0x00;
g_Send.CmdSeq=0x40;
delay_1();
SendHeadVer();
delay_1();
Read6110ID();
delay_2();
delay_2();
delay_2();
delay_2();
EnableEnhance();
delay_2();
delay_2();
delay_2();
delay_2();
Enable_R();
delay_2();
delay_2();
delay_2();
delay_2();
GetSmgCen();
delay_2();
delay_2();
delay_2();
delay_2();
Sele_Pnum=0;
P_LEVEL=0;
hz_bz=0x00;
i=0;
do
{
Status_232();
delay_2();
delay_2();
delay_2();
delay_2();
i++;
}while( (P_LEVEL == 0) && (i<100) );
i=0;
CLSR_1=0;
while(1)
{
//****检测到手机ID号****
if(g_flag&RECPHONEID)
{
g_flag&=~RECPHONEID;
TXBUF1='P';
while((UTCTL1&0X01)==0);
TXBUF1='R';
while((UTCTL1&0X01)==0);
TXBUF1='I';
while((UTCTL1&0X01)==0);
TXBUF1='D';
while((UTCTL1&0X01)==0);
for(i=0;i<15;i++)
{
TXBUF1=g_DialBuf[i];
while((UTCTL1&0X01)==0);
}
TXBUF1=0x0D;
while((UTCTL1&0X01)==0);
TXBUF1=0x0A;
while((UTCTL1&0X01)==0);
}
//****检测到SIM卡短信中心****
if(g_flag&RECSMGCEN)
{
g_flag&=~RECSMGCEN;
TXBUF1='S';
while((UTCTL1&0X01)==0);
TXBUF1='M';
while((UTCTL1&0X01)==0);
TXBUF1='S';
while((UTCTL1&0X01)==0);
TXBUF1='C';
while((UTCTL1&0X01)==0);
for( i=0; i<(g_SmgCenLen-1); i++ )
{
TXBUF1 = (g_SmgCen[i+1] & 0x0F) + '0';
while( !(UTCTL1 & 0x01) );
if( (g_SmgCen[i+1] & 0xF0) == 0xF0 )
break;
TXBUF1 = (g_SmgCen[i+1] >> 4) + '0';
while( !(UTCTL1 & 0x01) );
}
TXBUF1=0x0D;
while((UTCTL1&0X01)==0);
TXBUF1=0x0A;
while((UTCTL1&0X01)==0);
}
//****系统检测正常****
if(g_flag_2&LEVEL)
{
g_flag_2&=~LEVEL;
TXBUF1='S';
while ((UTCTL1&0x01)==0);
TXBUF1='Y';
while ((UTCTL1&0x01)==0);
TXBUF1='S';
while ((UTCTL1&0x01)==0);
TXBUF1=' ';
while ((UTCTL1&0x01)==0);
TXBUF1='L';
while ((UTCTL1&0x01)==0);
TXBUF1=P_LEVEL+0x30;
while ((UTCTL1&0x01)==0);
TXBUF1=0X0D;
while ((UTCTL1&0x01)==0);
TXBUF1=0X0A;
while ((UTCTL1&0x01)==0);
}
//**** 查询有无短消息 ******
if( g_flag_2 & QUERYSMS )
{
g_flag_2 &= ~QUERYSMS;
SMSNum();
}
//****读取短消息****
if(g_flag_2&HAVESMS)
{
g_flag_2&=~HAVESMS;
SmsSimRe(ReadNo);
ReadNo++;
if(ReadNo>50)
ReadNo=1;
// g_flag_2 |= DELSIMSMS;
delay_2();
}
//****SIM卡无短消息****
if(g_flag_2&HAVENOSMS)
{
g_flag_2&=~HAVENOSMS;
TXBUF1='D';
while ((UTCTL1&0x01)==0);
TXBUF1='E';
while ((UTCTL1&0x01)==0);
TXBUF1='L';
while ((UTCTL1&0x01)==0);
TXBUF1=' ';
while ((UTCTL1&0x01)==0);
TXBUF1='O';
while ((UTCTL1&0x01)==0);
TXBUF1='K';
while ((UTCTL1&0x01)==0);
TXBUF1=0x0D;
while ((UTCTL1&0x01)==0);
TXBUF1=0x0A;
while ((UTCTL1&0x01)==0);
}
//****查询GSM状态****
if( g_flag_2 & QUERYSTA )
{
g_flag_2 &= ~QUERYSTA;
g_flag |= QUERYTIME;
Status_232();
}
//****短消息发送成功****
if(g_flag&SMSSENDOK)
{
g_flag&=~SMSSENDOK;
P5OUT &= ~0x02;
TXBUF1='T';
while((UTCTL1&0X01)==0);
TXBUF1='R';
while((UTCTL1&0X01)==0);
TXBUF1=' ';
while((UTCTL1&0X01)==0);
TXBUF1='O';
while((UTCTL1&0X01)==0);
TXBUF1='K';
while((UTCTL1&0X01)==0);
TXBUF1=0X0D;
while((UTCTL1&0X01)==0);
TXBUF1=0X0A;
while((UTCTL1&0X01)==0);
}
//****短消息发送失败****
if(g_flag&SMSSENDFA)
{
g_flag&=~SMSSENDFA;
P5OUT &= ~0x02;
TXBUF1='T';
while((UTCTL1&0X01)==0);
TXBUF1='R';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -