本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
对于我这样的初学者来说,做这样的东西深感力不从心,不过靠着一份蛮劲硬着头皮还是实现了预想的功能,今天就站在这里求各位大侠拍砖,共同进步。
问3个问题
1 单片机串口和GSM模块串口(电压不一样)直连长时间工作不会出现问题吧2 程序哪些地方需要改进3 5v电源串二极管形成压降给GSM供电有没有问题
1 供电 stc90c54rd+ 5V sim300W 4.2V 峰值电流2A ;考虑用2576-5V 后接二极管 利用二极管压降给sim300供电
2 外围控制 ;单片机通电后p0.0输出一个2秒脉冲,sim300 pwkey脚拉低2秒使sim300开机
;单片机检测p1.2脚是否为低电平如果是,从单片机txd脚输出一系列串行数据(AT指令)控制sim300向指定手机号码发送一条短信
3 串口发送AT指令(犹豫水平有限没有写单片机接收串行数据的部分) ;
1 单片机发送 “AT” "回车" 41H 54H 0DH 0AH 使sim300进入命令模式
2 单片机发送 "AT+IPR=2400""回车" 41H 54H 2BH 49H 50H 52H 3DH 32H 34 30H 30H 0DH 0AH 使sim300的波特率设定为2400
3 单片机发送 "AT+CMGF=0""回车" ASCII码不再罗嗦 告诉sim300发送短信模式为中文
4 单片机发送 "AT+CMGS=25""回车" 告诉sim300发送内容的长度
5 单片机发送" 0011000D91685198100802F70008A70A57FA7AD96709544A8B66""1AH" 给15890180207发送“基站有告警”的短信
[attachment=null]
源代码
ORG 0000H
LJMP MAIN;上电,转向主程序
ORG 0023H
ORG 0030H;主程序
MAIN:
MOV TMOD,#20H;设T1工作方式2 定时器1作为波特率发生器
MOV TH1,#0F7H;赋记数初值 4M晶振波特率2400
MOV TL1,#0F7H;赋记数值
MOV PCON,#80H;设SMOD=1
MOV SCON,#0C0H;置串行口方式3,BU允许接收
AJMP WHETHER
WHETHER:SETB P1.2
JB P1.2,$
SETB TR1;启动定时器T1ACALL SENDAT
ACALL SENDAT
ACALL SENDIPR
ACALL SENDCMGFACALL SENDCMGS
ACALL SENDSMS
SENDAT: ;发送”AT“子程序
MOV A,#41H
MOV SBUF,A
JNB TI,$
CLR TI ;发送A
MOV A,#54H
MOV SBUF,A
JNB TI,$;
CLR TI ;发送T
MOV A,#0DH
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#0AH
MOV SBUF,A
JNB TI,$;
CLR TI ;发送回车
NOP
NOP
ACALL DL2S
RET
SENDIPR:
MOV A,#41H
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#54H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#2BH
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#49H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#50H
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#52H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#3DH
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#32H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#34H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#30H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#30H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#0DH
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#0AH
MOV SBUF,A
JNB TI,$;
CLR TI
ACALL DL2S
RET
SENDCMGF: ;发送AT+CMGF=0 中文模式
MOV A,#41H
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#54H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#2BH
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#43H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#4DH
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#47H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#46H
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#3DH
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#30H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#0DH
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#0AH
MOV SBUF,A
JNB TI,$;
CLR TI
ACALL DL2S
RET
SENDCMGS: ;发送AT+CMGS=25
MOV A,#41H
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#54H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#2BH
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#43H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#4DH
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#47H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#53H
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#3DH
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#32H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#35H
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#0DH
MOV SBUF,A
JNB TI,$;
CLR TI
MOV A,#0AH
MOV SBUF,A
JNB TI,$;
CLR TI
ACALL DL2S
RET
SENDSMS:
MOV DPTR,#SMS
LOOP_SEND:
CLR A
MOVC A,@A+DPTR
CJNE A,#'$',SEND_AAJMP WHETHER
SEND_A:
MOV SBUF,A;发送数据
JNB TI,$;
CLR TI
INC DPTR;指向后一个数据.LJMP LOOP_SEND;
RET
DL2S: ;延时2秒子程序
MOV R3,#50
LOOP: MOV R2,#25
LOOP1: MOV R1,#255
LOOP2:NOP
DJNZ R1,LOOP2
DJNZ R2,LOOP1
DJNZ R3,LOOP
RET
SMS : DB "0011000D91683195429389F80008A70A57FA7AD96709544A8B66",1AH,'$'
END上传一些我整理的资料,方便各位日后参考
[attachment=null] |