单片机串口不够用或者没有串口,怎么样模拟呢? 串口通信时数据格式由一个起始位,八个数据位,一个或两个结束位组成。在数据发送是结束位是不能省。但在数据接收时,程序中就没有必要等待结束位了,因为在等待结束位的过程中,把下一个数据的起始中断也等待过去了。程序发送口采用任一IO口,接收口采用外部中断0口,实现了9600bit/s的串口通信,信号产生与接收采用定时器定时溢出标志来进行控制。另外在程序中需要注意下面问题:1、中断的中断标志要保证状态正确2、定时器定时要精确 下面是我们单片机是所写的串口通信程序,主要用来实习发送和接收短信,因此下面的AT指令让我们一起学习一下:AT指令功能 AT+CMGC Send an SMS commend(发出一条短信息命令) AT+CMGD Delete SMS message (删除SIM卡内存的信息) AT+CMGF Select SMS message format(选择短消息信息格式:0-PDU;1-文本) AT+CMGL List SMS message from preferred store(列出SIM卡中的短消息格式PDU/TEXT:0“REC UNREAD”为未读,1“REC READ”为已读,2“STOU NSENT”为待发,3“STOSENT”为已发, 4“ALL”为全部 AT+CMGR Read SMS message (读短消息) AT+CMGS Send SMS message (发短消息) AT+CMGW Write SMS message to memory (向SIM内存中写入待发的短消息) AT+CNMI New SMS message storage(显示新收到的短消息) AT+CPMS Preferred SMS message storage (选择短消息内存) AT+CSCA SMS service center address(短消息中心地址) AT+CSCB Select cell broadcast message messages (选择蜂窝广播信息) AT+CSMP Set SMS text mode parameters(设置短消息文本模式参数) 模块的供电电压如果低于3.3V会自动关机。同时模块在在发射时,电流峰值可高达2A。同时在此电流峰值时,电源电压(送入模块的电压)下降值不能超过0.4V。所以该模块对电源的要求较高,电源的内阻+FFC联接线的电阻必需小于200mΩ。 单片机通过两根I/O口控制TC35的开关机、复位等,通过串口与TC35进行数据通信,通信速率为9600Kbps,采用8位异步通讯方式,1位起始位,8位数据位,1位停止位。 TC35模块输入输出的TTL正电平逻辑不是+5V,而是+2.9V,因此必要时加端口保护。 #ifndef sentmessage #define sentmessage #define uint unsigned int #define uchar unsigned char void delay_1000us(uchar n) //延迟0.01s { unsignedchar a,b,c; for(c=0;c<n;c++) { for(b=249;b>0;b--) for(a=17;a>0;a--); } } void delay_100us(uchar c) //误差 -0.173611111111us { unsigned char a,b,i; for(i=0;i<c;i++) { for(b=1;b>0;b--) for(a=43;a>0;a--); } } voiddelay_5s(void) //误差 -0.000000002274us { unsigned char a,b,c; for(c=203;c>0;c--) for(b=156;b>0;b--) for(a=144;a>0;a--); } void Sendchar(unsigned char c) { SBUF = c; while(!TI); TI = 0; } void Sentstring(unsigned char *p) { while(*p!='\0') { Sendchar(*p++); } } /* void Sent_message() {
Sentstring("AT+CMGS=\"1252015215029882\""); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20);
Sentstring("afasfasd"); delay_100us(60); Sendchar(0x1a); } */ void Pre_readmessage() { Sentstring("AT"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20);
Sentstring("AT+CMGF=1"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20);
Sentstring("AT+CNMI=2,1"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); } void Readmessage(unsigned char msgnum) //读短信 { ES=1; Sentstring("AT+CMGR="); Sendchar(msgnum); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(300); ES=0; } void Delete_message(uchar num) { Sentstring("AT+CMGD="); Sendchar(num); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); }
void Send_yfhz(uchar str[]) { Sentstring("AT"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGF=0"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGS=23"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("0891683108408705F0"); //发送内容 Sentstring("11000D9168"); Sentstring(str); Sentstring("000801086CE8610F9632706B"); Sendchar(0x1a); delay_1000us(500); }//0891683108200305F011000D91683146384837F2000801084E3B4EBA8BF7610F6CE8 //0891683108200309F011000D91685121333639F7000801064E3B4EBA8BF7610F6CE8 void Send_bxg(uchar str[]) { Sentstring("AT"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGF=0"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGS=23"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("0891683108408705F0"); //发送内容 Sentstring("11000D9168"); Sentstring(str); Sentstring("000801086CE8610F963276D7"); Sendchar(0x1a); delay_1000us(500); } void Send_tdg(uchar str[]) { Sentstring("AT"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGF=0"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGS=23"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("0891683108408705F0"); //发送内容 Sentstring("11000D9168"); Sentstring(str); Sentstring("0008010853F0706F5DF25173"); Sendchar(0x1a); delay_1000us(500); } void Send_secret(uchar str[]) { Sentstring("AT"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGF=0"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGS=23"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("0891683108408705F0"); //发送内容 Sentstring("11000D9168"); Sentstring(str); Sentstring("0008010895E8670953719669"); Sendchar(0x1a); delay_1000us(500); } void Send_tdk(uchar str[]) { Sentstring("AT"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGF=0"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGS=23"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("0891683108408705F0"); //发送内容 Sentstring("11000D9168"); Sentstring(str); Sentstring("0008010853F0706F5DF25F00"); Sendchar(0x1a); delay_1000us(500); } /* void Send_tdk1() {
Sentstring("AT"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGF=0"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGS=23"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(30); Sentstring("0891683108408705F0"); //发送内容 Sentstring("11000D91685112059288F2"); Sentstring("0008010853F0706F5DF25F00"); Sendchar(0x1a); delay_1000us(500); }*/ void Send_fsg(uchar str[]) { Sentstring("AT"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGF=0"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGS=23"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("0891683108408705F0"); //发送内容 Sentstring("11000D9168"); Sentstring(str); Sentstring("0008010898CE62475DF25173"); Sendchar(0x1a); delay_1000us(500); } void Send_fsk(uchar str[]) { Sentstring("AT"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGF=0"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGS=23"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("0891683108408705F0"); //发送内容 Sentstring("11000D9168"); Sentstring(str); Sentstring("0008010898CE62475DF25F00"); Sendchar(0x1a); delay_1000us(500); } void Send_ykm(uchar str[]) { Sentstring("AT"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGF=0"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGS=23"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("0891683108408705F0"); //发送内容 Sentstring("11000D9168"); Sentstring(str); Sentstring("000801085DF262535F0095E8"); Sendchar(0x1a); delay_1000us(500); } void Send_jiankong(uchar str[],uint a,uintb) { Sentstring("AT"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGF=1"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("AT+CMGS="); Sentstring(str); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("taideng shi "); if(a==1) Sentstring("guan de,"); else Sentstring("kai de,"); Sentstring("fengshan shi "); if(b==1) Sentstring("guan de!"); else Sentstring("kai de!"); Sendchar(0X0D); Sendchar(0X0A); Sendchar(0x1a); delay_1000us(500); } void Send_phone(uchar str[]) {
Sentstring("AT"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(20); Sentstring("atd"); Sentstring(str); Sentstring(";"); Sendchar(0X0D); Sendchar(0X0A); delay_1000us(500); } #endif
|