利用8051撰寫AT command 的問題
各位大大好,我是新手,不太會發文,如有違規,敬請見諒唷!
如果有大大會解答這個問題的話,可以向我丟水球嗎?非常需要各位大大的協助!
非常迫切需要,這星期要交!
我的問題如下:
使用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)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章