想請問各位大大關於使用8051撰寫AT command的뀠…
這是我第一次的發文唷,如果違規敬請見諒!
有高手會這一部份的,可以向我丟水球嗎?急需要有人可以替我解惑,謝謝唷!
我的問題如下:
我軟體想要的動作是每當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
→
12/14 20:48, , 1F
12/14 20:48, 1F
※ 編輯: maxwellyann 來自: 118.168.47.118 (12/14 22:37)
討論串 (同標題文章)