GSM怎么发不出短信(DB18B20)

newstime 2010-11-06 12:54:40
单独测试的时候温度可以读出来,,,短信可以发出去,怎么弄一起就发不出短信了呢?大家帮忙看看。
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

#define jump_ROM 0xCC
#define start 0x44
#define read_EEROM 0xBE
sbit DQ=P3^4; //温度IO口
sbit beep=P3^5; //蜂鸣器

unsigned char TMPH,TMPL;
unsigned char code table[11] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09,0X63};//没有小数点。
unsigned char code table1[11] = {0x01, 0x9e, 0x24, 0x0c, 0x98, 0x48, 0x40, 0x1e, 0x00, 0x08,0xfd};//小数点,0xfe 是“-”
//延时
void delay(uint N)
{
int i;
for(i=0; i<N; i++)
;
}
void delay_gsm(unsigned int delay_time) //延时子程序
{for(;delay_time>0;delay_time--)
{}
}
//复位函数
uchar Reset(void)
{
uchar deceive_ready;
DQ = 0;
delay(29);
DQ = 1;
delay(3);
deceive_ready = DQ;
delay(25);
return(deceive_ready);
}
//read_bit()
uchar read_bit(void)
{
uchar i;
DQ = 0;
DQ = 1;
for(i=0; i<3; i++);
return(DQ);
}
/***write_bit()*************/
void write_bit(uchar bitval)
{
DQ=0;
if(bitval==1)
DQ=1;
delay(5);
DQ=1;
}

uchar read_byte(void)
{
uchar i,m,receive_data;
m = 1;
receive_data = 0;
for(i=0; i<8; i++)
{
if(read_bit())
{
receive_data = receive_data + (m << i);
}
delay(6);
}
return(receive_data);
}

void write_byte(uchar val)
{
uchar i,temp;
for(i=0; i<8; i++)
{
temp = val >> i;
temp = temp & 0x01;
write_bit(temp);
delay(5);
}
}
/**************************十六进制转十进制函数**************************/

unsigned int htd(unsigned int a)
{
unsigned int b,c;
b=a%10;
c=b;
a=a/10;
b=a%10;
c=c+(b<<4);
a=a/10;
b=a%10;
c=c+(b<<8);
a=a/10;
b=a%10;
c=c+(b<<12);
return c;
}

//数码管显示
void display(uint tem)
{
uchar j;
for(j=50; j>0; j--)
{
P0 = table[tem / 100];
P2 = 0x08;
delay(500);
P0 = table1[tem %100/10];
P2 = 0x04;
delay(500);
P0 = table[tem % 10];
P2 = 0x02;
delay(500);
P2=0X01;
P0=table[10];
delay(500);
}
}
uint get_temp(uint temperature)
{
float f_temperature;

Reset();
write_byte(jump_ROM);
write_byte(start);
Reset();
delay(1000);
write_byte(jump_ROM);
write_byte(read_EEROM);
TMPL = read_byte();
TMPH = read_byte();
temperature = TMPH;
temperature <<= 8;
temperature = temperature | TMPL;

f_temperature=temperature*0.0625;
temperature =f_temperature*10+0.5;
return temperature;


}

//串口初始化
void init_serial()
{
TMOD=0x20; //定时器1--方式2
TL1=0xfd;
TH1=0xfd; //11.0592MHZ晶振,波特率为9600
SCON=0x50; //方式1
TR1=1; //启动定时

}
/**************************发送字符(ASCII码)函数*********************/
void send_ascii(unsigned char *b)
{
for (b; *b!='\0';b++)
{
SBUF=*b;
while(TI!=1);

TI=0;
}
}


/**************************发送字符(十六进制)函数*********************/

void send_hex(unsigned char b)
{
SBUF=b;
while(TI!=1) ;
TI=0;
}



//主函数
void main()
{
uint temp,i;

temp=get_temp(0); //代码目的是去除上电的85°。
for(i=0;i<150;i++)
delay(300);
init_serial();

while(1)
{
uint c,a;
float m;
m=get_temp(0);
delay(20);
display(m);

if(c>5)
{

send_ascii("at");
send_hex(0x0d); //回车
delay_gsm(20);
send_ascii("at+cmgf=1");//以文本的形式发送
send_hex(0x0d);
//for(a=0;a<600;a++)//显示,兼有延时的作用
// display(m);
delay_gsm(20);
send_ascii("at+cmgs=\"13408136925\"");//发送到指定号码
send_hex(0x0d);
//for(a=0;a<600;a++)//显示,兼有延时的作用
// display(m);
delay_gsm(20);
send_ascii("The temperture is ");//发送短信
send_hex(0x30+((htd(m)>>8)&0x0f));
send_hex(0x30+((htd(m)>>4)&0x0f));


send_ascii(".");

send_hex(0x30+(htd(m)&0x0f));
send_ascii(" degree now.");
send_hex(0x1a);
send_hex(0x0d);
c=0;
P0=0x55; //问题应该就在这一块

}
c++;


}
}


...全文
61 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
kangyonghui 2010-11-07
  • 打赏
  • 举报
回复
显示函数哪里有问题吧,仔细再看看

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧