唐 山 学 院 毕 业 设 计
_EINT(); // TC35初始化
nTX0_Len = tc35_init(UART0_TX_BUF); // 设置中断标志,进入发送中断程序 IFG1 |= UTXIFG0; Delay_ms(100); csca[0] = '+'; csca[1] = '8'; csca[2] = '6'; csca[3] = '1'; csca[4] = '3'; csca[5] = '8'; csca[6] = '0'; csca[7] = '0'; csca[8] = '2'; csca[9] = '3'; csca[10] = '0'; csca[11] = '5'; csca[12] = '0'; csca[13] = '0';
nTX0_Len = setCsca(UART0_TX_BUF,csca); // 设置中断标志,进入发送中断程序 IFG1 |= UTXIFG0; Delay_ms(500);
nTX0_Len = setCmgf(UART0_TX_BUF,0); // 设置中断标志,进入发送中断程序 IFG1 |= UTXIFG0; Delay_ms(500);
//首先从FLASH里面读出电话号码数据 nPhone = isPhoneSet(PhoneNumber); if(nPhone == 1) {
//电话号码没有配置的情况下
36
唐 山 学 院 毕 业 设 计
//等待配置 for(;;) {
if(nRev_UART1 == 1) {
nRev_UART1 = 0;
for(i = 0;i < nRX1_Len;i++)
{
UART1_RX_Temp[i] = UART1_RX_BUF[i];
PhoneNumber[i] = UART1_RX_BUF[i];
}
nPhone = setPhone(UART1_RX_Temp); //设置成功 if(nPhone == 1) {
nTX1_Len = SetOK(UART1_TX_BUF); // 设置中断标志,进入发送中断程序
IFG2 |= UTXIFG1; break;
} else {
nTX1_Len = SetError(UART1_TX_BUF); // 设置中断标志,进入发送中断程序
IFG2 |= UTXIFG1;
}
}//if(nPhone == 1) }//if(nRev_UART1 == 1) }//for(;;)
//短消息处理循环 count = 0; for(;;)
37
唐 山 学 院 毕 业 设 计
{
//采集数据 if(nADC_Flag) {
//清除标志 nADC_Flag = 1; count += 1; if(count >= 6500) {
//取采集得到的数据
//将采集得到的数据转换为8位 for(i = 0;i < 80;i++) {
pBuf[i] = (char)((ADC_BUF_Temp[i] >> 4) & 0xff); }
count = 0;
nLen = PhoneNumber[0]; for(i = 0;i < nLen;i++) {
//去掉长度信息
PhoneNumber[i] = PhoneNumber[i + 1]; }
//发送短消息
sendSms(PhoneNumber,nLen,pBuf,80,1);
}//if(count >= 65000) }//if(nADC_Flag) }//for(;;) }
//////////////////////////////////////// // 处理来自串口 0 的接收中断 #if __VER__ < 200
38
唐 山 学 院 毕 业 设 计
interrupt [UART0RX_VECTOR] void UART0_RX_ISR(void) #else
#pragma vector=UART0RX_VECTOR __interrupt void UART0_RX_ISR(void) #endif {
char chrTemp; //接收来自的数据
UART0_RX_BUF[nRX0_Len_temp] = RXBUF0;
nRX0_Len_temp += 1;
chrTemp = UART0_RX_BUF[nRX0_Len_temp - 1]; if((chrTemp == 13) || (chrTemp == 10)) {
//接收到一帧信号
nRX0_Len = nRX0_Len_temp; nRev_UART0 = 1; nRX0_Len_temp = 0; } }
//////////////////////////////////////// // 处理来自串口 0 的发送中断 #if __VER__ < 200
interrupt [UART0TX_VECTOR] void UART0_TX_ISR(void) #else
#pragma vector=UART0TX_VECTOR __interrupt void UART0_TX_ISR(void) #endif {
if(nTX0_Len != 0) {
// 表示缓冲区里的数据没有发送完
nTX0_Flag = 0;
39
唐 山 学 院 毕 业 设 计
} }
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; }
//数据发送完毕
void sendSms(char pPhone[],int phonelen,char pData[],int nLen,int mode) {
int i; int len1; int len2; char buf1[100]; char buf2[200]; int res; //TEXT模式
packSms_text(pPhone,phonelen,pData,nLen, &len1,&len2,buf1,buf2); //发送头信息
for(i = 0;i < len1;i++) {
UART0_TX_BUF[i] = buf1[1]; }
//设置发送数据的长度 nTX0_Len = len1;
//设置中断标志,进入发送中断程序 IFG1 |= UTXIFG0; //等待 > 响应
40