导航:首页 > 操作系统 > 单片机连接sim900a

单片机连接sim900a

发布时间:2022-12-07 09:35:25

❶ 51单片机怎样和SIM900a模块连接起来

一、单模块故障排除
分别测试“USB转TTL”“SIM900a”“51单片机”的UART通讯能否正常使用,主要测试51单片机芯片RX-TX引脚短接后能否自首自发。
二、模块协作故障排除
PC-USB-TTL-SIM900a
PC-USB-TTL-51单片机
51单片机-SIM900a
三、问题原因猜测
1、TX-RX连接线序错误
2、TTL-RS232电平错误
3、单片机串口多硬件接入相互冲突,比如TX-RX引出的同时连接了USB转UART芯片
4、单片机代码问题

❷ sim900a可以和STC89C51单片机的txd和rxd直接相连吗

SIM900A模块是可以直接与单片机的TXD和RXD连接。
需要设置一下波特率,然后就可以直接通信了。

❸ 51单片机与sim900a相连接的最简单的程序是什么

/************************************************************

程序说明:

本程序运行后如果gprs模块找到服务商信号,就拨打指定电话。

1.将自己的51单片机的串口1连接到GSM的tx rx gnd

2.找到程序中前面的#define处,根据说明修改好自己的单片机配置,编译程序

2.下载程序

3.按下模块复位键,启动模块,等待信号灯闪烁变慢,复位单片机

4.等待发送成功

*************************************************************/

#include <REGX52.H>

#define uchar unsigned char

#define uint unsigned int

//以下是板子上LED的配置,把Px_x改成自己对应的脚。

#define LED1_ON P1_0 = 0

#define LED1_OFF P1_0 = 1

#define LED2_ON P1_1 = 0

#define LED2_OFF P1_1 = 1

#define LED3_ON P1_2 = 0

#define LED3_OFF P1_2 = 1

#define LED4_ON P1_3 = 0

#define LED4_OFF P1_3 = 1

//以下是你的51单片机的晶振大小

#define FOSC_110592M

//#define FOSC_12M

//以下是开机后发送到手机的内容,发送的号码在程序中修改。

uchar sms_text[] = "123";

//注意,无论接收到信号还是发送完信号,都会进中断服务程序的

/*初始化程序(必须使用,否则无法收发),次程序将会使用定时器1*/

void SerialInti()//初始化程序(必须使用,否则无法收发)

{

TMOD=0x20;//定时器1操作模式2:8位自动重载定时器

#ifdef FOSC_12M //在这里根据晶振大小设置不同的数值初始化串口

TH1=0xf3;//装入初值,波特率2400

TL1=0xf3;

#else

TH1=0xfd;//装入初值,波特率9600

TL1=0xfd;

#endif //end of SOC_12M

TR1=1;//打开定时器

SM0=0;//设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制)

SM1=1;//(同上)在此模式下,定时器溢出一次就发送一个位的数据

REN=1;//串行接收允许位(要先设置sm0sm1再开串行允许)

EA=1;//开总中断

ES=1;//开串行口中断

}

/*串行通讯中断,收发完成将进入该中断*/

void Serial_interrupt() interrupt 4

{

// a=SBUF;

P2=SBUF;

RI=0;//接收中断信号清零,表示将继续接收

// flag=1;//进入中断的标志符号

}

void Uart1Send(uchar c)

{

SBUF=c;

while(!TI);//等待发送完成信号(TI=1)出现

TI=0;

}

//串行口连续发送char型数组,遇到终止号/0将停止

void Uart1Sends(uchar *str)

{

while(*str!='')

{

SBUF=*str;

while(!TI);//等待发送完成信号(TI=1)出现

TI=0;

str++;

}

}

//延时函数大概是1s钟,不过延时大的话不准...

void DelaySec(int sec)

{

uint i , j= 0;

for(i=0; i<sec; i++)

{

for(j=0; j<65535; j++)

{

}

}

}

void main()

{

uchar i = 0;

LED1_OFF;

LED2_OFF;

LED3_OFF;

LED4_OFF;

SerialInti();

while(1)

{

LED1_ON;

LED2_OFF;

Uart1Sends("AT+CMGF=1 ");

DelaySec(3);//延时3秒

Uart1Sends("AT+CSCS="GSM" ");

DelaySec(3);//延时3秒

Uart1Sends("AT+CSMP=17,167,0,250 ");//设备短信模式(手机自动保存模式)

// Uart1Sends("AT+CSMP=17,167,0,240 ");//设备短信模式(手机非自动保存模式)

DelaySec(3);//延时3秒

Uart1Sends("AT+CMGS="18332563682" ");

DelaySec(5);//延时3秒

Uart1Sends(sms_text);

Uart1Send(0x1a);

LED2_ON;

LED1_OFF;

DelaySec(15);//延时20秒

}

}

//你接p3.0和p3.1吧

❹ 关于单片机控制SIM900A模块发送短信的程序问题

第一个SBUF被注释掉了,那么第二个对P2赋值,我认为应该是为了观察是否收到了数据,P2口接的是指示灯,通过观察指示灯,判断数据的接收情况,这是最初调试的代码,我是这么认为的,祝你学习愉快!

❺ 求一个89C51单片机 控制SIM900(相似的也可以),收发短信的程序!

代码如下
流程是一致的
只是端口定义不同
#include
"sim900a.h"
#include
"usart.h"
#include
"delay.h"
#include
"led.h"
#include
"key.h"
#include
"lcd.h"
#include
"dma.h"
#include
"flash.h"
#include
"touch.h"
#include
"malloc.h"
#include
"string.h"
#include
"text.h"
#include
"usart2.h"
#include
"ff.h"
//将收到的AT指令应答数据返回给电脑串口
//mode:0,不清零USART2_RX_STA;
//
1,清零USART2_RX_STA;
void
sim_at_response(u8
mode)
{
if(USART2_RX_STA&0X8000)
//接收到一次数据了
{
USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符
printf("%s",USART2_RX_BUF);
//发送到串口
if(mode)USART2_RX_STA=0;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//ATK-SIM900A
各项测试(拨号测试、短信测试、GPRS测试)共用代码
//sim900a发送命令后,检测接收到的应答
//str:期待的应答结果
//返回值:0,没有得到期待的应答结果
//
其他,期待应答结果的位置(str的位置)
u8*
sim900a_check_cmd(u8
*str)
{
char
*strx=0;
if(USART2_RX_STA&0X8000)
//接收到一次数据了
{
USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符
strx=strstr((const
char*)USART2_RX_BUF,(const
char*)str);
}
return
(u8*)strx;
}
//向sim900a发送命令
//cmd:发送的命令字符串(不需要添加回车了),当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串.
//ack:期待的应答结果,如果为空,则表示不需要等待应答
//waittime:等待时间(单位:10ms)
//返回值:0,发送成功(得到了期待的应答结果)
//
1,发送失败
u8
sim900a_send_cmd(u8
*cmd,u8
*ack,u16
waittime)
{
u8
res=0;
USART2_RX_STA=0;
if((u32)cmd<=0XFF)
{
while(DMA1_Channel7->CNDTR!=0);
//等待通道7传输完成
USART2->DR=(u32)cmd;
}else
u2_printf("%s\r\n",cmd);//发送命令
if(ack&&waittime)
//需要等待应答
{
while(--waittime)
//等待倒计时
{
delay_ms(10);
if(USART2_RX_STA&0X8000)//接收到期待的应答结果
{
if(sim900a_check_cmd(ack))break;//得到有效数据
USART2_RX_STA=0;
}
}
if(waittime==0)res=1;
}
return
res;
}
//将1个字符转换为16进制数字
//chr:字符,0~9/A~F/a~F
//返回值:chr对应的16进制数值
u8
sim900a_chr2hex(u8
chr)
{
if(chr>='0'&&chr<='9')return
chr-'0';
if(chr>='A'&&chr<='F')return
(chr-'A'+10);
if(chr>='a'&&chr<='f')return
(chr-'a'+10);
return
0;
}
//将1个16进制数字转换为字符
//hex:16进制数字,0~15;
//返回值:字符
u8
sim900a_hex2chr(u8
hex)
{
if(hex<=9)return
hex+'0';
if(hex>=10&&hex<=15)return
(hex-10+'A');
return
'0';
}
//unicode
gbk
转换函数
//src:输入字符串
//dst:输出(uni2gbk时为gbk内码,gbk2uni时,为unicode字符串)
//mode:0,unicode到gbk转换;
//
1,gbk到unicode转换;
void
sim900a_unigbk_exchange(u8
*src,u8
*dst,u8
mode)
{
u16
temp;
u8
buf[2];
if(mode)//gbk
2
unicode
{
while(*src!=0)
{
if(*src<0X81)
//非汉字
{
temp=(u16)ff_convert((WCHAR)*src,1);
src++;
}else
//汉字,占2个字节
{
buf[1]=*src++;
buf[0]=*src++;
temp=(u16)ff_convert((WCHAR)*(u16*)buf,1);
}
*dst++=sim900a_hex2chr((temp>>12)&0X0F);
*dst++=sim900a_hex2chr((temp>>8)&0X0F);
*dst++=sim900a_hex2chr((temp>>4)&0X0F);
*dst++=sim900a_hex2chr(temp&0X0F);
}
}else
//unicode
2
gbk
{
while(*src!=0)
{
buf[1]=sim900a_chr2hex(*src++)*16;
buf[1]+=sim900a_chr2hex(*src++);
buf[0]=sim900a_chr2hex(*src++)*16;
buf[0]+=sim900a_chr2hex(*src++);
temp=(u16)ff_convert((WCHAR)*(u16*)buf,0);
if(temp<0X80){*dst=temp;dst++;}
else
{*(u16*)dst=swap16(temp);dst+=2;}
}
}
*dst=0;//添加结束符
}
//键盘码表
const
u8*
kbd_tbl1[13]={"1","2","3","4","5","6","7","8","9","*","0","#","DEL"};
const
u8*
kbd_tbl2[13]={"1","2","3","4","5","6","7","8","9",".","0","#","DEL"};
u8**
kbd_tbl;
u8*
kbd_fn_tbl[2];
//加载键盘界面(尺寸为240*140)
//x,y:界面起始坐标(320*240分辨率的时候,x必须为0)
void
sim900a_load_keyboard(u16
x,u16
y,u8
**kbtbl)
{
u16
i;
POINT_COLOR=RED;
kbd_tbl=kbtbl;
LCD_Fill(x,y,x+240,y+140,WHITE);
LCD_DrawRectangle(x,y,x+240,y+140);
LCD_DrawRectangle(x+80,y,x+160,y+140);
LCD_DrawRectangle(x,y+28,x+240,y+56);
LCD_DrawRectangle(x,y+84,x+240,y+112);
POINT_COLOR=BLUE;
for(i=0;i<15;i++)
{
if(i<13)Show_Str_Mid(x+(i%3)*80,y+6+28*(i/3),(u8*)kbd_tbl[i],16,80);
else
Show_Str_Mid(x+(i%3)*80,y+6+28*(i/3),kbd_fn_tbl[i-13],16,80);
}
}

❻ sim900a和单片机stc89c51怎么连接

这么有科技含量的东西,居然不会连接,难道只会编程?串口 直接连接就行

阅读全文

与单片机连接sim900a相关的资料

热点内容
服务器侦听端口是什么意思 浏览:320
手机通知音效文件夹 浏览:134
pdf产品目录 浏览:202
三菱fd编译通过不了 浏览:156
15g游戏下载完怎么解压 浏览:708
编译原理文法中的句型 浏览:755
出售广联达云翻样加密狗 浏览:276
把多页pdf合并软件 浏览:325
热点已保存加密可上网什么原因 浏览:557
张家口app怎么查看全部账号 浏览:183
cad先选择命令 浏览:749
我的世界命令方块手机版 浏览:254
迅投python下单 浏览:471
javamd5加密32位 浏览:469
php连接mysql测试代码 浏览:473
如何下载亚马逊app安卓 浏览:698
解压神器大组合 浏览:728
多次编译一个内核会快吗 浏览:162
单片机伺服500k 浏览:868
linux安装repo 浏览:799