|
實現(xiàn)監(jiān)聽(使用PROTEUS串口例子)V1.0
M8單片機仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):
0.png (26.49 KB, 下載次數(shù): 127)
下載附件
2018-3-19 18:44 上傳
0.png (47.27 KB, 下載次數(shù): 139)
下載附件
2018-3-19 18:47 上傳
全部資料51hei下載地址:
竊聽器(使用PROTEUS串口例子)V1.0.zip
(123.24 KB, 下載次數(shù): 67)
2018-3-19 16:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
單片機源程序如下:
- ////////////////////////////////////////////////////////////////////////////////
- // ICC-AVR application builder : 6-25 下午 06:02:39
- // Target : M8
- // Crystal: 3.6864Mhz
- // Author: Anwarye
- // Title: Detcetaphone
- ////////////////////////////////////////////////////////////////////////////////
- #include <iom8v.h>
- #include <macros.h>
- #include "var.h"
- #define XTAL == 3.6864M
- ////////////////////////////////////////////////////////////////////////////////
- #pragma interrupt_handler uart0_rx_isr:12
- void uart0_rx_isr(void)
- {
- unsigned char i,j;
- if(UDR == 0x0A)
- {
- return; // 收到0x0A直接丟棄
- }
-
- i = RxIndex;
- j = RxIndex-1;
- if((RxBuf[0] == 0x30) && (RxBuf[1] == 0x0D))
- {
- RxIndexTail = RxIndex; // 保存接收緩沖指針尾
- RxIndex = 0; // 接收緩沖指針歸零
- RxStatus = 1; // 接收完成標(biāo)志置位
- OkFlag = 1;
- error = 0;
- return;
- }
- if((RxBuf[0] == 0x32) && (RxBuf[1] == 0x0D)) // 收到來電信號,來電標(biāo)志置位
- {
- CallInFlag = 1; // 置電話呼入標(biāo)志
- RxIndex = 0;
- RxStatus = 1;
- OkFlag = 1;
- return;
- }
- else if((RxBuf[0] == 0x33) && (RxBuf[1] == 0x0D)) // 被叫號碼忙 或者掛機 主叫掛機
- {
- BusyFlag = 1; // 置電話呼入標(biāo)志
- RxIndex = 0;
- RxStatus = 1;
- OkFlag = 1;
- return;
- }
- else if((RxBuf[0] == 0x37) && (RxBuf[1] == 0x0D)) // 收到來電信號,來電標(biāo)志置位
- {
- NoCarrierFlag = 1; // 置電話呼入標(biāo)志 NO CARRIER
- RxIndex = 0;
- RxStatus = 1;
- OkFlag = 1;
- return;
- }
- else if((RxBuf[0] == 0x34) && (RxBuf[1] == 0x0D)) // 收到來電信號,來電標(biāo)志置位
- {
- RxIndex = 0;
- RxStatus = 1;
- OkFlag = 1;
- error = 1;
- return;
- }
- else
- {
-
- RxBuf[RxIndex++] = UDR; // 繼續(xù)接收數(shù)據(jù)放入接收緩沖
- RxStatus = 0; // 串口接收中
- // return; // 結(jié)束接收,直接跳出
- }
- }
- ////////////////////////////////////////////////////////////////////////////////
- #pragma interrupt_handler uart0_tx_isr:14
- void uart0_tx_isr(void)
- {
-
- if(!TxStatus) // 本幀數(shù)據(jù)未發(fā)完,則繼續(xù)發(fā)送
- {
- //while ( !(UCSRA & (1<<UDRE)) ); // 等待UDR空
- UDR = TxBuf[TxIndex];
- }
- if((TxBuf[TxIndex] == 0x0D) || (TxBuf[TxIndex] == 0x1A)) // 本幀數(shù)據(jù)發(fā)送結(jié)束
- {
- TxStatus = 1; // 發(fā)送完成狀態(tài)標(biāo)志置位
- TxIndex = 0; // 發(fā)送緩沖區(qū)指針歸零
- UCSRB &= ~((1<<TXCIE));//|(1<<TXEN)); // 關(guān)發(fā)送中斷
- return;
- }
- TxIndex++;
- }
- unsigned char CheckRx(void)
- {
- unsigned char i,j;
- i = RxIndex;
- j = RxIndex - 1;
- if(( RxBuf[j] == 0x30) && (RxBuf[i] == 0x0D))
- {
- RxIndex = 0;
- return (1);
- }
- else
- {
- return (0);
- }
- }
- /*-----------------------------------------------------------------------*/
- /////////////////////////// 清除接收緩沖 ////////////////////////////////
- /*-----------------------------------------------------------------------*/
- void ClearRxBuf(void)
- {
- unsigned char i;
- for(i=0;i<128;i++)
- {
- RxBuf[i] = 0;
- }
- }
- /*-----------------------------------------------------------------------*/
- /////////////////////////// 串口發(fā)送使能 ////////////////////////////////
- /*-----------------------------------------------------------------------*/
- void TxEnable(void)
- {
- //RxIndex = 0;
- UDR = TxBuf[0]; // 發(fā)送緩沖頭送入串口發(fā)送寄存器,激活開始發(fā)送
- UCSRB |= ((1<<TXCIE));//|(1<<TXEN));
- }
- /*-----------------------------------------------------------------------*/
- ///////////////////////////// 發(fā)送AT命令 /////////////////////////////////
- /*-----------------------------------------------------------------------*/
- void Put_AT_command(const unsigned char *atc, unsigned char atlen)
- {
- unsigned char count;
-
- for(count = 0;count < atlen;count++) // AT命令竄移入發(fā)送緩沖
- {
- TxBuf[count] = atc[count];
- }
-
- TxBuf[atlen] = 0x0D; // 發(fā)送緩沖竄結(jié)尾加“回車”
- TxBuf[atlen + 1] = 0x00; // 發(fā)送緩沖竄結(jié)束符號
- OkFlag = 0;
- TxStatus = 0;
- TxIndex = 1; // 發(fā)送指針偏移1
- TxEnable(); // 激活發(fā)送
- while(!TxStatus); // 等代發(fā)送結(jié)束,發(fā)送緩沖指針為零則可以發(fā)送
- DelayMs(20);
- while(!OkFlag); // 收到模塊返回OK,命令結(jié)束
- OkFlag = 0;
- }
- /*-----------------------------------------------------------------------*/
- ///////////////////////// 從內(nèi)存發(fā)送AT命令串 ////////////////////////////
- /*-----------------------------------------------------------------------*/
- void Put_AT_String(unsigned char *atc, unsigned char atlen)
- {
- unsigned char count;
-
- for(count = 0;count < atlen;count++)
- {
- TxBuf[count] = *(atc+count);
- }
-
- TxBuf[atlen] = 0x0D; // 發(fā)送緩沖竄結(jié)尾加“回車”
- TxBuf[atlen + 1] = 0x00; // 發(fā)送緩沖竄結(jié)束符號
- OkFlag = 0;
- TxStatus = 0;
- TxIndex = 1; // 發(fā)送指針偏移1
- TxEnable(); // 激活發(fā)送
- while(!TxStatus); // 等代發(fā)送結(jié)束,發(fā)送緩沖指針為零則可以發(fā)送
- DelayMs(20);
- while(!OkFlag); // 收到模塊返回OK,命令結(jié)束
- OkFlag = 0;
- }
- /*-----------------------------------------------------------------------*/
- ///////////////////////// 向串口發(fā)送一串?dāng)?shù)據(jù) ////////////////////////////
- /*-----------------------------------------------------------------------*/
- void PutString(unsigned char *str, unsigned char length,unsigned char retflag)
- {
- unsigned char count;
- for(count = 0;count < length;count++)
- {
- TxBuf[count] = *(str+count);
- }
-
- TxBuf[length] = 0x0D; // 發(fā)送緩沖竄結(jié)尾加“回車”
- TxBuf[length+ 1] = 0x00; // 發(fā)送緩沖竄結(jié)束符號
-
- TxStatus = 0;
- TxIndex = 1; // 發(fā)送指針偏移1
- OkFlag = 0;
- TxEnable();
- // 激活發(fā)送
- while(!TxStatus); // 等代發(fā)送結(jié)束,發(fā)送緩沖指針為零則可以發(fā)送
- DelayMs(20);
- if(retflag)
- {
- while(!OkFlag); // 收到模塊返回OK,命令結(jié)束
- OkFlag = 0;
- }
- else
- {
- DelayMs(200);
- OkFlag = 0;
- }
- }
- ////////////////////////////////////////////////////////////////////////////////
- /*-----------------------------------------------------------------------*/
- ////////////////////////// 撥號 ///////////////////////////
- /*-----------------------------------------------------------------------*/
- void DialNum(void)
- {
- unsigned char i,count=0,length=0;
- while ((PhoneNum[count++] != 0)) // 計算電話號碼長度
- {
- length++;
- }
-
- TxBuf[0] = 'A';
- TxBuf[1] = 'T';
- TxBuf[2] = 'D';
-
- i = 3;
- for(count=0;count<length;count++)
- {
- TxBuf[i++] = PhoneNum[count];
- }
-
- TxBuf[length+3] = ';';
- TxBuf[length+4] = 0x0D;
-
- OkFlag = 0;
- TxStatus = 0;
- TxIndex = 1; // 發(fā)送指針偏移1
- TxEnable(); // 激活發(fā)送
- while(!TxStatus); // 等代發(fā)送結(jié)束,發(fā)送緩沖指針為零則可以發(fā)送
- DelayMs(20);
- //while(!OkFlag); // 收到模塊返回OK,命令結(jié)束
- OkFlag = 0;
- }
- /*-----------------------------------------------------------------------*/
- ///////////////////////////// 比較兩個串 /////////////////////////////////
- /*-----------------------------------------------------------------------*/
- unsigned char StringCompare(volatile unsigned char *str1,const unsigned char *str2,unsigned char strlen)
- {
- while(strlen--)
- {
- if(*str1++ != *str2++) return(FALSE); // 兩個串不相等返回假
- }
- return(TRUE);
- }
- /*-----------------------------------------------------------------------*/
- ///////////////////////////// 刪除短信 //////////////////////////////
- /*-----------------------------------------------------------------------*/
- void Delete_SMS(unsigned char num) // 刪除SMS,=0刪除所有SMS
- {
- unsigned char count;
- for(count = 0;count < AtcmgdLen;count++) // AT命令竄移入發(fā)送緩沖
- {
- TmpBuf[count] = Atcmgd[count];
- }
-
- if(num == ALL)
- {
- for(count = 1; count < 10; count++)
- {
- TmpBuf[AtcmgdLen] = count + 0x30;
- Put_AT_String((unsigned char*)TmpBuf,(AtcmgdLen+1));
- }
- TmpBuf[AtcmgdLen] = 0x31;
- for(count = 0; count < 10; count++)
- {
- TmpBuf[AtcmgdLen+1] = count + 0x30;
- Put_AT_String((unsigned char*)TmpBuf,(AtcmgdLen+2));
- }
- }
- else
- {
- TmpBuf[AtcmgdLen] = num + 0x30;
- Put_AT_String((unsigned char*)TmpBuf,(AtcmgdLen+1));
- }
- }
- /*-----------------------------------------------------------------------*/
- /////////////////////////// 檢查SMS返回 //////////////////////////////
- /*-----------------------------------------------------------------------*/
- unsigned char CheckSMS_in(void)
- {
- while(!RxStatus); // 等待接收完成
- DelayMs(100);
- if(StringCompare(RxBuf,SMSin,SMSinLen)) // 如果收到OK完成 +CMTI: "SM", 1
- {
- return (OK);
- }
- else
- {
- return (ERROR);
- }
- }
- /*-----------------------------------------------------------------------*/
- /////////////// 將設(shè)置號碼存入內(nèi)存 /////////////////
- /*-----------------------------------------------------------------------*/
- void CheckSMS(void)
- {
- unsigned char i=0,j=0,index,numlen=0;
- for(;i<12;i++)
- {
- PhoneNum[i] = 0;
- }
- /* do
- {
- i++;
- j=i+1;
- }
- //while((Pdu[i] == 'G') && (Pdu[j] == 'H'));
-
- index = j+1;
- i = index;
- while(Pdu[i++] == '+')numlen++;
-
- j = 79; */
-
- index = 79;
- for(i=0;i<11;i++)
- {
- PhoneNum[i] = Pdu[index++];
- PhoneNum_to_EEPROM();
- }
-
- }
- unsigned char CheckPhoneNum(void)
- {
- unsigned char i;
- for(i=0;i<12;i++)
- {
- if( PhoneNum != 0) return (FALSE);
- }
- return (TRUE);
- }
- /*-----------------------------------------------------------------------*/
- ////////////////////////// 接收處理短信息 ///////////////////////////
- /*-----------------------------------------------------------------------*/
- void RecSMS(void)
- {
- unsigned char count,i=0,j=0,x,y;
-
- Put_AT_String("AT+CMGR=1",9);
-
- while(RxBuf[i] != 0x0D)
- {
- i++;
- }
- i = 76;
- j = i;
- if((RxBuf[i] == 'G') && (RxBuf[j+1] == 'H'))
- {
- count = 0;
- while(1)
- {
- Pdu[count] = RxBuf[count];
- x = count;
- y = count;
- if((RxBuf[x-2] == 0x30) && (RxBuf[y-1] == 0x0D))
- {
- break;
- }
- count++;
- }
- CheckSMS();
- Delete_SMS(1);
-
- }
- else
- {
- Delete_SMS(1);
- }
- }
- unsigned char DetQEITING(void)
- {
- volatile unsigned char tmp;
-
- if(!(DetQT()))
- {
- release = 0;
- DelayMs(10);
-
- if(!(DetQT())) {DettqFlag = 1;}
- }
- else
- {
- release = 1;
- }
-
- if(release && DettqFlag)
- {
- DettqFlag = 0;
- CplLED();
- return (TRUE);
-
- }
- return (FALSE);
- }
- void IGT(unsigned char n)
- {
- if(n)
- {
- PORTD &= ~(1<<PD6);
- DDRD |= (1<<PD6);
- }
- else
- {
- DDRD &= ~(1<<PD6);
- }
- }
-
- void work(void)
- {
- while(1)
- {
- if(CheckSMS_in())
- {
- RecSMS();
- }
- if(CallInFlag)
- {
- Put_AT_command(Ata,AtaLen);
- CallInFlag = 0;
- }
- if((BusyFlag) || (NoCarrierFlag))
- {
- Put_AT_command(Ath,AthLen);
- CallOut = 0;
- BusyFlag = 0;
- NoCarrierFlag = 0;
- }
- if(DetQEITING() && (!CallOut))
- {
- CallOut = 1;
- DialNum();
- }
- }
- }
- /*-----------------------------------------------------------------------*/
- ///////////////////////////// 初始化MC55 //////////////////////////////
- /*-----------------------------------------------------------------------*/
- void InitMC55(void)
- {
- unsigned char tmp;
- IGT(OFF);
- DelayMs(500); // 置低MC55 IGT口 200mS ,啟動MC55模塊
- IGT(ON);
- DelayMs(500);
- IGT(OFF);
- // DelayMs(1000); // 等待模塊啟動
-
- ClrRTS();
- DelayMs(50); // 激活MC55串口
- SetRTS();
- DelayMs(50);
- ClrRTS();
- DelayMs(50); // 激活MC55串口
- SetRTS();
- // DelayMs(1000); // 激活MC55串口
-
- TxIndex = 0;
- RxIndex = 0;
-
- while(!DetQEITING());
-
- PutString("AT",2,0);
- DelayMs(500);
-
- PutString("AT",2,1);
-
- PutString("ATV0",4,1);
- PutString("ATE0",4,1);
- PutString("AT+CNMI=2,1",11,1);
- PutString("AT+CMGF=1",9,1);
- Delete_SMS(ALL);
-
- PhoneNum_to_EEPROM();
-
- EEPROM_to_PhoneNum();
- }
- /////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////
- /*
- #pragma interrupt_handler int0_isr:2
- void int0_isr(void)
- {
- //external interupt on INT0
- DialNum();
-
- }
- #pragma interrupt_handler int1_isr:3
- void int1_isr(void)
- {
- //external interupt on INT1
- }
- */
- ////////////////////////////////////////////////////////////////////////////////
- void port_init(void)
- {
- PORTB = 0x01;
- DDRB = 0x01;
- PORTC = 0x00; //m103 output only
- DDRC = 0x02;
- PORTD = 0x0C;
- DDRD = 0x50;
- }
- //UART0 initialize
- // desired baud rate: 19200
- // actual: baud rate:19200 (0.0%)
- // char size: 8 bit
- // parity: Disabled
- //#ifdef XTAL == 3.6864
-
- void uart0_init(void)
- {
- UCSRB = 0x00; //disable while setting baud rate
- UCSRA = 0x00;
- UCSRC = BIT(URSEL) | 0x06;
- UBRRL = 0x0B; //set baud rate lo
- UBRRH = 0x00; //set baud rate hi
- UCSRB = 0xD8;
- }
- //#endif
- //#ifdef XTAL == 7.3728
- /*void uart0_init(void)
- {
- UCSRB = 0x00; //disable while setting baud rate
- UCSRA = 0x00;
- UCSRC = BIT(URSEL) | 0x06;
- UBRRL = 0x17; //set baud rate lo
- UBRRH = 0x00; //set baud rate hi
- UCSRB = 0xD8;
- }*/
- //#endif
- //call this routine to initialize all peripherals
- void init_devices(void)
- {
- //stop errant interrupts until set up
- CLI(); //disable all interrupts
- port_init();
- uart0_init();
- MCUCR = 0x00;
- GICR = 0x00; //0xC0;
- TIMSK = 0x00; //timer interrupt sources
- SEI(); //re-enable interrupts
-
- InitMC55();
- }
- //
- void main(void)
- {
- DelayMs(1000);
- init_devices();
- work();
- /*
- while(1)
- {
- DetQEITING();
- }*/
- }
復(fù)制代碼- ////////////////////////////////////////////////////////////////////////////////
- // ICC-AVR application builder : 2006-6-25 下午 06:02:39
- // Target : M8
- // Crystal: 3.6864Mhz
- // Author: Anwarye
- // Title: Detcetaphone
- ////////////////////////////////////////////////////////////////////////////////
- #include <iom8v.h>
- #include <macros.h>
- #define SetIGT() (PORTD |= (1<<PD7)) // MC55模塊點火控制腳,高有效
- #define ClrIGT() (PORTD &= ~(1<<PD7))
- #define SetLED() (PORTB |= (1<<PB0)) // LED
- #define ClrLED() (PORTB &= ~(1<<PB0))
- #define SetRTS() (PORTD |= (1<<PD6)) // LED
- #define ClrRTS() (PORTD &= ~(1<<PD6))
- #define DetRING0() (PORTD & (1<<PD2))
- #define FALSE 0
- #define TRUE 1
- #define DONE 1
- #define UNDONE 0
- #define OK 1
- #define ERROR 0
- #define ALL 0xFF
- #define RX_BUF_SIZE 256
- #define TX_BUF_SIZE 32
- volatile unsigned char TmpBuf[16]; // 臨時緩沖
- volatile unsigned char Pdu[256];
- unsigned char RetCMGR[14];
- volatile unsigned char PhoneNum[12];
- volatile unsigned char RxBuf[RX_BUF_SIZE]; // 串口接收緩沖
- volatile unsigned char RxIndex = 0; // 串口接收緩沖指針
- volatile unsigned char RxIndexTail = 0; // 串口接收緩沖尾
- volatile unsigned char TxBuf[TX_BUF_SIZE]; // 發(fā)送緩沖
- volatile unsigned char TxIndex = 0; // 發(fā)送緩沖指針
- volatile unsigned char RxStatus = 0;
- volatile unsigned char TxStatus = 1;
- volatile unsigned char OkFlag = 0;
- volatile unsigned char CallInFlag = 0;
- volatile unsigned char NoCarrierFlag = 0;
- volatile unsigned char BusyFlag = 0;
- /*-----------------------------------------------------------------------*/
- /////////////////////////// 串口發(fā)送使能 ////////////////////////////////
- /*-----------------------------------------------------------------------*/
- void TxEnable(void)
- {
-
- UDR = TxBuf[0]; // 發(fā)送緩沖頭送入串口發(fā)送寄存器,激活開始發(fā)送
- UCSRB |= ((1<<TXCIE));//|(1<<TXEN));
- }
- /*-----------------------------------------------------------------------*/
- ///////////////////////////// 發(fā)送AT命令 /////////////////////////////////
- /*-----------------------------------------------------------------------*/
- void Put_AT_command(const unsigned char *atc, unsigned char atlen)
- {
- unsigned char count;
-
-
-
- for(count = 0;count < atlen;count++) // AT命令竄移入發(fā)送緩沖
- {
- TxBuf[count] = *atc+count;
- }
-
- TxBuf[atlen] = 0x0D; // 發(fā)送緩沖竄結(jié)尾加“回車”
- TxBuf[atlen + 1] = 0x00; // 發(fā)送緩沖竄結(jié)束符號
- OkFlag = 0;
- TxStatus = 0;
- TxIndex = 1; // 發(fā)送指針偏移1
- TxEnable(); // 激活發(fā)送
- while(!TxStatus); // 等代發(fā)送結(jié)束,發(fā)送緩沖指針為零則可以發(fā)送
- while(!OkFlag); // 收到模塊返回OK,命令結(jié)束
-
- }
- /*-----------------------------------------------------------------------*/
- ///////////////////////// 從內(nèi)存發(fā)送AT命令串 ////////////////////////////
- /*-----------------------------------------------------------------------*/
- void Put_AT_String(unsigned char *atc, unsigned char atlen)
- {
- unsigned char count;
- for(count = 0;count < atlen;count++)
- // while(*atc) // AT命令竄移入發(fā)送緩沖
- {
- TxBuf[count] = *(atc+count);
- }
-
- TxBuf[atlen] = 0x0D; // 發(fā)送緩沖竄結(jié)尾加“回車”
- TxBuf[atlen + 1] = 0x00; // 發(fā)送緩沖竄結(jié)束符號
- OkFlag = 0;
- TxStatus = 0;
- TxIndex = 1; // 發(fā)送指針偏移1
- TxEnable(); // 激活發(fā)送
- while(!TxStatus); // 等代發(fā)送結(jié)束,發(fā)送緩沖指針為零則可以發(fā)送
- while(!OkFlag); // 收到模塊返回OK,命令結(jié)束
- }
- /*-----------------------------------------------------------------------*/
- ///////////////////////// 向串口發(fā)送一串?dāng)?shù)據(jù) ////////////////////////////
- /*-----------------------------------------------------------------------*/
- void PutString(unsigned char *str, unsigned char length,unsigned char retflag)
- {
- unsigned char count;
- for(count = 0;count < length;count++)
- {
- TxBuf[count] = *(str+count);
- }
-
- TxBuf[length] = 0x0D; // 發(fā)送緩沖竄結(jié)尾加“回車”
- TxBuf[length+ 1] = 0x00; // 發(fā)送緩沖竄結(jié)束符號
-
- TxStatus = 0;
- TxIndex = 1; // 發(fā)送指針偏移1
- OkFlag = 0;
- TxEnable();
- // 激活發(fā)送
- while(!TxStatus); // 等代發(fā)送結(jié)束,發(fā)送緩沖指針為零則可以發(fā)送
- if(retflag)
- {
- while(!OkFlag); // 收到模塊返回OK,命令結(jié)束
- }
- }
- /*-----------------------------------------------------------------------*/
- ///////////////////////////// 比較兩個串 /////////////////////////////////
- /*-----------------------------------------------------------------------*/
- unsigned char StringCompare(volatile unsigned char *str1,const unsigned char *str2,unsigned char strlen)
- {
- while(strlen--)
- {
- if(*str1++ != *str2++) return(FALSE); // 兩個串不相等返回假
- }
- return(TRUE);
- }
-
- /*-----------------------------------------------------------------------*/
- ///////////////////////////// 刪除短信 //////////////////////////////
- /*-----------------------------------------------------------------------*/
- void Delete_SMS(unsigned char num) // 刪除SMS,=0刪除所有SMS
- {
- unsigned char count;
- for(count = 0;count < AtcmgdLen;count++) // AT命令竄移入發(fā)送緩沖
- {
- TmpBuf[count] = Atcmgd[count];
- }
-
- if(num == ALL)
- {
- for(count = 1; count < 10; count++)
- {
- TmpBuf[AtcmgdLen] = count + 0x30;
- Put_AT_String((unsigned char*)TmpBuf,(AtcmgdLen+1));
- }
- TmpBuf[AtcmgdLen] = 0x31;
- for(count = 0; count < 10; count++)
- {
- TmpBuf[AtcmgdLen+1] = count + 0x30;
- Put_AT_String((unsigned char*)TmpBuf,(AtcmgdLen+2));
- }
- }
- else
- {
- TmpBuf[AtcmgdLen] = num + 0x30;
- Put_AT_String((unsigned char*)TmpBuf,(AtcmgdLen+1));
- }
- }
- /*-----------------------------------------------------------------------*/
- ////////////////////////// 接收處理短信息 ///////////////////////////
- /*-----------------------------------------------------------------------*/
- void RecSMS(void)
- {
- unsigned char ch,count;
-
- Put_AT_String("AT+CMGR=1",9);
-
- count = 0;
- while(1)
- {
- Pdu[count] = RxBuf[count];
- if((RxBuf[count-2] == 0x30) && (RxBuf[count-1] == 0x0D))
- {
- break;
- }
- count++;
- }
- }
- /*-----------------------------------------------------------------------*/
- /////////////// 檢查SMS是否有用并將設(shè)置號碼存入內(nèi)存 /////////////////
- /*-----------------------------------------------------------------------*/
- void CheckSMS(void)
- {
- unsigned char i;
- i = 1;
- }
- ////////////////////////////////////////////////////////////////////////////////
- /*-----------------------------------------------------------------------*/
- ////////////////////////// 撥號 ///////////////////////////
- /*-----------------------------------------------------------------------*/
- void DialNum(void)
- {
- unsigned char count=0,length=0;
- while (PhoneNum[count++]) // 計算電話號碼長度
- {
- length++;
- }
-
- TxBuf[0] = 'A';
- TxBuf[1] = 'T';
- TxBuf[2] = 'D';
-
- for(count=0;count<length;count++)
- {
- TxBuf[count+3] = PhoneNum[count];
- }
-
- TxBuf[length] = ';';
- TxBuf[length++] = 0x0D;
-
- OkFlag = 0;
- TxStatus = 0;
- TxIndex = 1; // 發(fā)送指針偏移1
- TxEnable(); // 激活發(fā)送
- while(!TxStatus); // 等代發(fā)送結(jié)束,發(fā)送緩沖指針為零則可以發(fā)送
- while(!OkFlag); // 收到模塊返回OK,命令結(jié)束
- }
- /*-----------------------------------------------------------------------*/
- ///////////////////////////// 初始化MC55 //////////////////////////////
- /*-----------------------------------------------------------------------*/
- void InitMC55(void)
- {
- unsigned char tmp;
- SetIGT();
- DelayMs(200); // 置低MC55 IGT口 200mS ,啟動MC55模塊
- ClrIGT();
- DelayMs(50); // 等待模塊啟動
- ClrRTS();
- DelayMs(50); // 激活MC55串口
- SetRTS();
- DelayMs(50);
- ClrRTS();
- DelayMs(50); // 激活MC55串口
- SetRTS();
- DelayMs(500); // 激活MC55串口
-
-
- TxIndex = 0;
- RxIndex = 0;
-
- Put_AT_command(At,AtLen); // 發(fā)送AT命令校準(zhǔn)串口,如果失敗嘗試10次后結(jié)束
-
- Put_AT_command(Atf,AtfLen); // 發(fā)送AT&F命令恢復(fù)MC55模塊出廠設(shè)置
-
-
- Put_AT_command(Atv1,Atv1Len); // 設(shè)置模塊返回碼格式 V0 = 簡單返回數(shù)字 V1=復(fù)雜返回文本
-
- Put_AT_command(Ate0,Ate0Len); // 關(guān)閉MC55串口回顯
-
- Delete_SMS(1);
- }
復(fù)制代碼 |
評分
-
查看全部評分
|