/********************************************************
** **
**TC35/TC35i与MCU16实验短信控制继电器实例 **
** **
**功能:短信控制16路继电器的开与关 **
短信读取16路继电器的当前开关状态 **
**版本:V1.0 **
********************************************************/
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define RxIn 90 //定义接收的数组长度为90
//#define mclk 8000000
#define RXD_PORT DDRD = 0XFF;PORTD |= BIT(PD0)
#define realy0 DDRB = 0XFF;PORTB = ~BIT(PB0)
uchar AT[]="AT"; //握手信号
uchar ATE[]="ATE0"; //关回显
uchar AT_CNMI[]="AT+CNMI=2,1"; //设置这组参数来了新信息直接显示到串口,不作存储
//uchar AT_CSCA[]="AT+CSCA=\"+8613800816500\""; //设置服务中心号码
uchar AT_CMGF[]="AT+CMGF=1"; //设置短信的格式为text格式
uchar AT_CMGR[]="AT+CMGR="; //读取短信指令
uchar AT_CMGS[]="AT+CMGS="; //发送短信指令
uchar AT_CMGD[]="AT+CMGD="; //发送短信指令
uchar AT_CSCS[]="AT+CSCS=\"GSM\"";
uchar AT_CMGS1[]="AT+CMGS=\"18780585524\"";
uchar successfully[]="Operate Successfully!"; //发送操作成功信息到目标号码
uchar fail[]="Operate Failed, Try again!"; //发送操作失败信息到目标号码
uchar at[]="ATD13508102859;";
uchar AT_delete[12];
uchar AT_Read[12]; //用来存储发送读取短信指令
uchar AT_SendNumber[25]; //用来存储发送短信号码指令
uchar numberbuf[3]; //用来保存短信条数
uchar SystemBuf[RxIn]; //储存出口接收数据
uchar CommandBuf[6]; //用来存储指令
uchar state[17]; //用来存储IO口状态
uchar state1[17]; //用来存储IO口状态
uchar Rx=0;
uint temp; //记录状态
uchar temp1; //用记录P0口状态
uchar temp2; //用于记录P2口状态
uchar check=0; //查询标志位
uchar receiveready=0; //接收短信标志位
uchar sendready=0; //发送短信准备标志位
uchar send=0; //发送短信标志位
uchar flag=0; //指令标志位
uchar sign=0;
//uchar P3_7=P3^7; //启动GSM的启动线连IGT
//uchar rdata;
//UART0 initialize
// desired baud rate: 115200
// actual: baud rate:125000 (7.8%)
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x06;
UBRRL = 0x2F; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x98;
}
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
//uart has received a character in UDR
if(Rx<RxIn)
{
SystemBuf[Rx]=UDR;
Rx++;
}
//Rx=0;
}
//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;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
/********************************************************
** 函数void Delay_ms(uint i); **
** 实现功能:进行毫秒延时 **
********************************************************/
void Delay_ms(uint i)
{
uint x,y;
for(x=0;x<i;x++)
for(y=0;y<1141;y++);
}
/***********************************************************************
** 函数void sendchar(uchar ch);
实现功能:发送一字节数据
***********************************************************************/
void sendchar(uchar ch)
{
while(!(UCSRA&(BIT(UDRE))));
UDR = ch;
while(!(UCSRA&(BIT(TXC))));
UCSRA |= BIT(TXC); //清零
}
/***********************************************************************
** 函数void sendstring(uchar *p);
实现功能:通过串口发送字符串
***********************************************************************/
void sendstring(uchar *p)
{
while(*p)
{
sendchar(*p);
p++;
}
sendchar(0x0D);
sendchar(0x0A); //回车
}
/************************************************************************
** 函数void GSM_INIT(void);
实现功能:初始化TC35模块
************************************************************************/
void GSM_INIT(void)
{
LOOP:
Delay_ms(1000);
sendstring(AT);
Delay_ms(1000);
sendstring(ATE);
Delay_ms(1000);
sendstring(AT_CSCS);
Delay_ms(1000);
sendstring(AT_CNMI); //直接显示,不做存储
Delay_ms(1000);
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
Delay_ms(1000);
sendstring(AT_CMGF);
Delay_ms(2000);
if((SystemBuf[2]==0X4F) && (SystemBuf[3]==0X4B)) //判断是否模块初始化成功,成功的话模块会回复“OK”给单片机
{
PORTA = 0X21; //如果单片机没有收到OK,就继续发送初始化指令
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
}
else
{
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
goto LOOP;
}
}
/****************************************************************
** 函数void receive_ready(void);
实现功能:接收短信准备
****************************************************************/
void receive_ready(void)
{
uchar i;//5,6//3,4
if((SystemBuf[5]==0x54)&&SystemBuf[6]==0x49) //如果有新短信来,模块会通过串口向单片机发送字符串,
{ //此函数的功能是判断是否有新短信来,如果来的话就置位准备接收位
receiveready=1; //TI //如果不是新短信的指令,就舍弃,并将接收数组清零。
PORTA = 0X22;
}
else
{
for(i=0;i<Rx;i++)
{
SystemBuf[i]=0x00;
}
Rx=0;
}
}
/****************************************************************
** 函数 void message_read(void);
实现功能:判断短信,准备是否回复短信给目标号码
****************************************************************/
void message_read(void)
{//5,6
if((sendready==1)&&(SystemBuf[5]==0x47)&&(SystemBuf[6]==0x52)) //GR
{
send=1;
PORTA = 0X28;
}
}
/*****************************************************************
** 函数void read_message(void);
实现功能:发送读取短信指令
*****************************************************************/
void read_message(void)
{
uchar i;
Delay_ms(1000);
for(i=0;i<3;i++)
{
numberbuf[i]=SystemBuf[14+i];
}
for(i=0;i<8;i++)
{
AT_Read[i]=AT_CMGR[i];
}
for(i=8;i<11;i++)
{
AT_Read[i]=numberbuf[i-8];
}
for(Rx=0;Rx<RxIn;Rx++)
{
SystemBuf[Rx]=0x00;
}
Rx=0;
sendstring(AT_Read); //发送AT+CMGR=?,?代表短信储所在位置
Delay_ms(200);
sendchar(0x0D);
sendchar(0x0A);
Delay_ms(200);
sendchar(0x0D);
sendchar(0x0A);
Delay_ms(200);
sendchar(0x0D);
sendchar(0x0A);
Delay_ms(200);
sendchar(0x0D);
sendchar(0x0A);
Delay_ms(200);
sendchar(0x0D);
sendchar(0x0A);
PORTA = 0X24;
}
/******************************************************************
** 函数 void readcommend(void);
实现功能:读取短信内容,判断相应指令是否正确
******************************************************************/
void readcommend(void)
{
uchar i;
for(i=0;i<4;i++) //将短信内容中的指令部分截取出来放到CommandBuf数组中
{
CommandBuf[i]=SystemBuf[66+i];
}
if((CommandBuf[0]=='o')&&(CommandBuf[1]=='p')&&(CommandBuf[2]=='e')&&(CommandBuf[3]=='n')) //判断指令是否为开继电器
{
//
PORTA = 0X3F; //继电器1开启 数字1
Delay_ms(250);
PORTA = 0X2F;
Delay_ms(250);
PORTA = 0X3F;
Delay_ms(250);
PORTA = 0X00;
// */
}
else
if((CommandBuf[0]=='s')&&(CommandBuf[1]=='h')&&(CommandBuf[2]=='u')&&(CommandBuf[3]=='t')) //判断指令是否为关继电器
{
//
PORTA=0X1F;
Delay_ms(250);
PORTA=0X0F;
Delay_ms(250);
PORTA=0X1F;
Delay_ms(250);
PORTA=0X2F;
//*/
}
else
{
fla
GSM.rar_atmega16 sms
版权申诉
48 浏览量
2022-09-21
18:37:14
上传
评论
收藏 3KB RAR 举报
JonSco
- 粉丝: 72
- 资源: 1万+
最新资源
- CISCN2024-re3-rust-baby(Frida多字节程序插桩爆破)
- soft:磁盘清理工具
- .netcore控制台使用Nssm打包windows服务,加winform管理服务界面
- db-college.sql
- wpf-dragdrop-treeview(WPF较好拖拽效果).7z
- img-1716258776282bf88540b0e387ddd2ea677d02c7f3594ad72383f796d86b02fb7d2ae2543915d.jpg
- 《伦敦共享单车数据分析与代码》
- SKIP-v2.1.1.apk
- IMG20240521103815.jpg
- 松下A4系列伺服参数调试软件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈