作者maxwellyann (不彦其烦)
看板C_and_CPP
标题想请问各位大大关於使用8051撰写AT command的问题!
时间Mon Dec 14 14:21:16 2009
这是我第一次的发文唷,如果违规敬请见谅!
有高手会这一部份的,可以向我丢水球吗?急需要有人可以替我解惑,谢谢唷!
我的问题如下:
我软体想要的动作是每当senser = = 0, 8051就发送AT command,每发送一段 command,
与8051连接的的LED会闪烁一次,最後将AT command传送给GSM模组,发送简讯出去。
我是使用宣告字元的方式来发送AT command,可是不知道这样可不可行,希望各位大大
帮我解答,该怎麽样才能顺利的将AT command传送出去。
还是我RS-232定义的部分有错误呢?
使用的8051是AT89S52
我是将LED定义为P1^0
senser定义为P2^0
利用RS-232做串列传输
程式码如下:
#include<AT89x52.h>
sbit led = P1^0;//LED脚位定义
sbit sensor = P2^0;//感应器
char *C1="AT";
char *C2="AT+CMGF=1";
char *C3="AT+CMGS=0986426579";
char *C4="THIS IS A TEST";
delay(int d) //延迟副程式
{
int i,j;
for(i=0;i<d;i++)
for(j=0;j<200;j++);
}
init_rs232() //初始化RS232通讯介面 <<这里怪怪的 分号的部份>>
{ //通讯协定:<9600 N 8 1>
SCON=0x50; //设定串列界面工作模式1,接收资料致能
TMOD=0x20; //设定计时器1工作於模式2
TH1=0xFD; //设定鲍率为9600BPS
TR1=1; //启动计时器1开始计数
TI=1; //设定串列传送中断产生旗号
}
tx_char(unsigned char c) //传送一位元组资料
{
while(1)
if(TI)break; //等待传送中断旗号产生
TI=0; //清除串列传送中断旗号
SBUF=c; //由串列埠传送资料出去
}
tx_str(char*str) //传送字串资料
{
do{tx_char(*str++);}
while(*str!='\0');
}
void main(void)
{
int i=0;
init_rs232(); //初始化RS232通讯介面
delay(500);
while(i==20)
{
led=0;
delay(500);
led=1;
delay(500);
i=i+1;
}
while(sensor ==1)
{
if (sensor ==0)//收到讯号
{
tx_str(C1); //传送执行讯息出去
led=0;//LED亮
delay(500);
led=1;//LED不亮
tx_str(C2); //传送执行讯息出去
led=0;//LED亮
delay(500);
led=1;//LED不亮
tx_str(C3); //传送执行讯息出去
led=0;//LED亮
delay(500);
led=1;//LED不亮
tx_str(C4); //传送执行讯息出去
led=0;//LED亮
delay(500);
led=1;//LED不亮
}
led=1;//LED不亮
}
}
拜托各位大大了!
非常非常迫切的需要神手替我解答,我是code超新手,专题卡关!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 120.96.47.178
1F:→ ksmrt0123:init_rs232()中 TI不应设为1 12/14 20:48
※ 编辑: maxwellyann 来自: 118.168.47.118 (12/14 22:37)