作者maxwellyann (不彦其烦)
看板ASM
标题利用8051撰写AT command 的问题
时间Mon Dec 14 23:06:39 2009
各位大大好,我是新手,不太会发文,如有违规,敬请见谅唷!
如果有大大会解答这个问题的话,可以向我丢水球吗?非常需要各位大大的协助!
非常迫切需要,这星期要交!
我的问题如下:
使用Keil C撰写;
LED设定为P1^0 ; senser设定为P2^0
每当一senser = = 1(感测到) ,则LED = 1(闪烁),之後再发送ATcommand。
我的疑问是,我的AT command是已宣告字元的方式来撰写,不知道这样写是否可以使用。
再来是我们是使用RS-232传输介面来与GSM MODEN做沟通,senser感测到以後传送
AT command 给GSM MODEN,GSM MODEN将会传送简讯给使用者的手机。
想请问RS-232定义的部分有无问题,以及AT command的写法有无错误。
以下是我的程式码:
#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不亮
}
}
谢谢各位大大的耐心观看,高手来帮帮我吧!感激不尽!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.168.47.118
※ 编辑: maxwellyann 来自: 118.168.47.118 (12/14 23:12)