本帖最后由 wyhbb163 于 2011-10-30 22:43 编辑
想做一个短信控制的机械。目前用计算机调试买来的TC35开发板是正常的,发出过信息。目前仅仅想实现单片机和模块之间的握手,即发AT收OK。程序也不长,附在下面。单片机的程序用电脑调试过,发OK给他是会有反应的(蜂鸣器),但是把两者连起来之后就什么反应没有。
补充,我是直接将单片机的输入输出口与TC模块的GT-R,GT-T相连的。急求高手指点。
以下是程序。
#include<stdio.h>
#include<reg52.h>
#define uint unsigned int //定义常用数据类型替代码
#define uchar unsigned char
sbit buz=P3^4;
void delay_1ms(void);
void init_serial(); //串口初始化程序
void sendchar(char a);
int check();
void beep();
char dat;
char string[50]="";
code char ipr[]="AT+IPR=9600";
int l;
int main()
{
int j;
init_serial(); //初始化串行口
for(j=1;j<=4000;j++) delay_1ms();
while(1){
{
l=0;
//sendstring(ipr);
//sendchar(0x0d);
sendchar('A');
sendchar('T');
sendchar(0x0d);
delay_1ms();
delay_1ms();
delay_1ms();
for(j=1;j<=2000;j++) delay_1ms();
}
}
return 0;
}
void init_serial() //初始化串口
{
TMOD=0x20; //定时器T1使用工作方式2
TH1=0xfd; //设置初值
TH0=0xfd;
TR1=1; //开始计时
SCON=0x50; //工作方式1,波特率9600bit/s,允许接收
PCON=0x00; //SMOD=0;
EA=1;
ES=1;
ET0=1;
}
void sendchar(char a)
{
int j;
ES=0;
SBUF=a;
while(TI==0) {};
TI=0;
for(j=0;j<=25;j++) delay_1ms();
ES=1;
}
void delay_1ms(void) //延时程序
{
uint i,j;
for(i=0;i<10;i++)
for(j=0;j<20;j++);
}
void beep()
{
int j;
buz=0;
for(j=0;j<=100;j++) delay_1ms();
buz=1;
}
void receive() interrupt 4 using 3
{
if(RI)
{
RI=0;
dat=SBUF;
string[l]=dat;
if(dat==0x0a)
{
//beep();
string[l]='\0';
check();
}
else l++;
}
}
int check()
{
int j;
j=0;
while(string[j]!='\0')
{
if(j>=1 && string[j-1]=='O' && string[j]=='K')
{
beep();
l=0;
return 0;
}
j++;
}
l=0;
return 0;
} |