#define _XTAL_FREQ 8000000 // Define Frequency 20.0 MHz for function __delay_ms
#include <pic.h> // Include header file for MCU
#include <htc.h>
#include <stdio.h>
#include "lcd3310_PIC.h"
#include <string.h>
#include <stdlib.h>
//__CONFIG(HS & WDTDIS & LVPDIS); // Config. High speed clock,Disable watchdog and Disable LVP
void receive_sms(unsigned char *sms) ;
void send_sms(unsigned char *number,char * msg);
void rs232_scan(unsigned char *tmp);
void show_data();
void update_data();
char chk_msg(unsigned char *receive,unsigned char *number);
unsigned char buf[161]="",len;
void Delay_ms(unsigned int tick)
{
while(tick--) // Loop couter delay time
{
__delay_ms(1); // Delay 1 ms
}
}
void usart_init_57600()
{
RCIE =0; // Disable receive interrupt
GIE = 0; // Disable global interrupt
PEIE =0; // Disables peripheral interrupts
// Set buadrate 57600 bps
SYNC = 0;
BRGH = 1;
BRG16 = 0;
SPBRG = 0x08;
SPBRGH = 0x00;
TXEN = 1; // Enable transmition
CREN = 1; // Enable reciption
SPEN = 1; // Enable USART transmition/reciption
RCIE =1; // Enable receive interrupt
GIE = 1; // Enable global interrupt
PEIE = 1; // Enables peripheral interrupts
}
void usart_init_9600()
{
RCIE =0; // Disable receive interrupt
GIE = 0; // Disable global interrupt
PEIE = 0; // Disables peripheral interrupts
// Set buadrate 9600 bps
SYNC = 0;
BRGH = 1;
BRG16 = 0;
SPBRG = 0x33;
SPBRGH = 0x00;
TXEN = 1; // Enable transmition
CREN = 1; // Enable reciption
SPEN = 1; // Enable USART transmition/reciption
RCIE =1; // Enable receive interrupt
GIE = 1; // Enable global interrupt
PEIE = 1; // Enables peripheral interrupts
}
void putchar(unsigned char c)
{
while(!TRMT); // Wait transmition ready
TXREG = c; // Send byte
}
void usart_puts(unsigned char *s)
{
while(*s) // Loop for send string
{
putchar(*s++); // Send byte from string
}
}
#define RX_BUFFER_SIZE 80
unsigned char rx_buffer[RX_BUFFER_SIZE];
unsigned char rx_wr_index,rx_rd_index,rx_counter,rx_buffer_overflow=0;
void interrupt USART_RC_SERVICE(void)
{
if(RCIF) // Ensure check RCIF flag
{
char data;
data=RCREG;
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
}
}
unsigned char getchar()
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
GIE = 0; // disable global interrupt
--rx_counter;
GIE = 1; // enable global interrupt
return data;
}
void clr_uart()
{
GIE = 0; // disable global interrupt
rx_counter=0;
rx_wr_index=0;
rx_rd_index=0;
GIE = 1; // enable global interrupt
}
unsigned int GetDataBuffer(char *buffer,unsigned int max_size)
{
unsigned int num_char;
unsigned char character;
num_char = 0;
while(num_char < max_size)
{
character = getchar();
if(character == '\r'||character == '\n')
break;
*buffer = character;
buffer++;
num_char++;
}
*buffer='\0';
return num_char;
}
void main()
{
//-------OSCCON --- 8 MHz internal
IRCF3=1;
IRCF2=1;
IRCF1=1;
IRCF0=0;
SCS1=1;
//-----------------
ANSELB=0x00; //when use port config to digital
ANSELA=0x00;
ANSELE=0x00;
ANSELD=0x00;
TRISB=0x00; // test portb to output
PORTB=0x00;
TRISA=0x01;
unsigned char key; // Keep data reciption from keyboard
unsigned char msg[64]="",status_msg;
int i=0;
unsigned char tmp[20],number[13];
RESET:
initial_lcd();
clear_screen();
lcd_gotoxy(0,2);
put_str("TEST");
//----- init 57600
usart_init_57600(); // Initial USART baudrate 57600 bps
/*
printf("ATE0"); putchar(13); //echo off
clr_uart();
printf("AT"); putchar(13);
GetDataBuffer(buf,160); printf("\n\r===%s",buf); // get ok from phone
GetDataBuffer(buf,160); printf("\n\r===%s",buf); // get ok from phone
GetDataBuffer(buf,160); printf("\n\r===%s",buf); // get ok from phone
lcd_gotoxy(0,3);
put_str(buf);
if(buf[0]=='O'&&buf[1]=='K')
{ lcd_gotoxy(0,0);
put_str("OK 57600");
printf("AT+IPR=9600"); putchar(13);
}
else
{
lcd_gotoxy(0,0);
put_str("No");
}
*/
Delay_ms(3000);
//----- init 9600 -----------------------
/* usart_init_9600(); // Initial USART baudrate 57600 bps
printf("ATE0"); putchar(13); //echo
clr_uart();
printf("AT"); putchar(13);
GetDataBuffer(buf,160); // get ok from phone
GetDataBuffer(buf,160); printf("\n\r===%s",buf); // get ok from phone
GetDataBuffer(buf,160); printf("\n\r===%s",buf); // get ok from phone
if(buf[0]=='O'&&buf[1]=='K')
{ lcd_gotoxy(0,1);
put_str("OK 9600");
}
else
{
lcd_gotoxy(0,1);
put_str("No");
}
lcd_gotoxy(0,0);
printf("ATE0"); //echo
putchar(13);
// printf("AT+CNMI=3,2,0,0,0"); putchar(13); //Set message receiving mode as +CMTI: men, index
printf("AT+CNMI=0,0,0,0,0"); putchar(13); //not notify
printf("AT+CMGF=1"); putchar(13); //Set the text mode
*/
//-------------------------------------
clear_screen();
printf("ATE0"); putchar(13); Delay_ms(100); //echo off
printf("AT+CNMI=0,0,0,0,0"); putchar(13); Delay_ms(100); //not notify
printf("AT+CMGF=1"); putchar(13); Delay_ms(100); //Set the text mode
//------ start loop ------------------
while(1) // Infinite loop
{
status_msg=chk_msg(msg,number);
if(status_msg=='Y')
{
lcd_gotoxy(0,0);
put_str(number);
lcd_gotoxy(0,1);
put_str(msg);
}
lcd_gotoxy(0,4);
lcd_putchar(status_msg);
sprintf(tmp,"%3d",(i=(i++)%1000));
lcd_gotoxy(0,5);
put_str(tmp);
// printf("\n\r%s",buf);
Delay_ms(1000);
/* if(!(PORTA&0x01==1))
{
send_sms("0868103694","TEST MSG 1234");
Delay_ms(3000);
printf("ATD0868103694;");
putchar(13);
Delay_ms(1000);
// printf("yes\n\r");
}
*/
}
}
//---------------------------------------------------------------------------------
char chk_msg(unsigned char *receive,unsigned char *number)
{unsigned char i,j,tmp[5];
int sms_index;
// printf("ATE0"); putchar(13); Delay_ms(100); //echo off
// printf("AT+CNMI=0,0,0,0,0"); putchar(13); Delay_ms(100); //not notify
// printf("AT+CMGF=1"); putchar(13); Delay_ms(100); //Set the text mode
clr_uart();
printf("AT+CMGL=\"REC UNREAD\""); putchar(13);// Delay_ms(500);
len=GetDataBuffer(buf,160); // \r
len=GetDataBuffer(buf,160); // \n
len=GetDataBuffer(buf,160); // data
if(strcmp(buf,"OK")==0)
return 'O'; //return no new sms
buf[5]='\0'; //+CMGL[\0]xxxxxxxxxxx
if(strcmp(buf,"+CMGL")==0)
{
//---sms index
if(buf[8]==','){ tmp[0]=buf[7]; tmp[1]='\0';}
if(buf[9]==','){ tmp[0]=buf[7]; tmp[1]=buf[8]; tmp[2]='\0';}
//---sms number
j=0;
for(i=0;i<50;i++) //find start of number
{
if(buf[i]==',') j++;
if(j==2){ i++; break ; }
}
number[0]='+';
for(j=1;j<=11;j++)
{ number[j]=buf[j]; }
number[j]='\0';
//---sms data
getchar();
len=GetDataBuffer(buf,160);
for(i=0;i<len;i++)
receive[i]=buf[i];
receive[i]='\0';
sms_index=atoi(tmp);
Delay_ms(500); printf("AT+CMGD=%d",sms_index); putchar(13); //delete sms
return 'Y';
}
return 'N';
}
//-------------------------------------------------------------------
USART_01_PHONE.rar_USART_USART_01_PHONE.rar_phone_pic16f1937
版权申诉
70 浏览量
2022-09-14
19:22:42
上传
评论
收藏 272KB RAR 举报
alvarocfc
- 粉丝: 105
- 资源: 1万+
最新资源
- 2023-04-06-项目笔记 - 第一百十五阶段 - 4.4.2.113全局变量的作用域-113 -2024.04.26
- 2023-04-06-项目笔记 - 第一百十五阶段 - 4.4.2.113全局变量的作用域-113 -2024.04.26
- htmlzwbjq_downyi.com.zip
- 无头单向非循环链表的实现(Test.c)
- 无头单向非循环链表的实现(SList.c)
- 浏览器重定向插件更新文件
- SSA-BP麻雀算法优化BP神经网络多特征分类预测(Matlab实现完整源码和数据)
- 粒子群算法优化BP神经网络PSO-BP的MATLAB代码(数值预测)
- 基于Springboot的一起看书平台.zip
- 无头单向非循环链表的实现(SList.h)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈