xiaokang1990 发表于 2011-12-7 15:30:39

STC52单片机控制sim300模块没反应

用串口调试助手给sim300模块发送指令正常,观察单片机发送数据正常,就是单片机与sim300模块连接控制时,模块没反应,程序非常简单,只有打电话功能,同学前两天还用单片机控制成功过,可是现在不行了,只能用PC控制,求高手帮忙啊!!!
程序如下:
(注:我用的时普中科技的开发板,用按键拨打和数码管显示)
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
char code table[]={0xC0,0xF9,0xA4,0xB0,
                                        0x99,0x92,0x82,0xF8,
                                        0x80,0x90,0x88,0x83,
                                        0xC6,0xA1,0x86,0x8E};
char haoma[]="ATD15243640684;\r";
void SerialInit()//串口初始化程序
{
                TMOD=0x20; //设置定时器8位自动装入数据
                TH1=0xfd;//装入初值,波特率9600
                TL1=0xfd;
                TR1=1;    //打开定时器
                SM0=0;    //设置串口通讯工作模式
                SM1=1;
                REN=1;   //串口接收允许               
}
void SerialSendChars(char *str) //串口连续发送字符串,遇到终止符\0停止
        {
                while(*str!='\0')
                {
                        SBUF=*str;
                        while(!TI);//等待发送完成信号
                        TI=0;
                        str++;
                }       
        }
void delay_50ms(int t)//延时程序
        {
                int j;
                for(;t>0;t--)
                for(j=6245;j>0;j--)
                ;
        }
void delayms(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}
void display(char num)
{
    P0=0;
        wela=1;
        P0=0xfe;
        wela=0;
        dula=1;
        P0=table;
        P0=~P0;
        dula=0;
        delayms(5);

        /*P2=0X00;
        P0=table;
        delayms(5);*/
}

char keyscan()
{
        char temp,scan1,scan2,num;
        P1=0xf0;
        scan1=P1;
        if((scan1&0xf0)!=0xf0)
        {
                delayms(10);
                scan1=P1;
                if((scan1&0xf0)!=0xf0)
                {
                        P1=0x0f;
                        scan2=P1;
                        temp=scan1|scan2;
                        switch(temp)
                        {
                                case 0xee: num=15;break;
                                case 0xde: num=15;break;
                                case 0xbe: num=15;break;
                                case 0x7e: num=15;break;
                                case 0xed: num=1;break;
                                case 0xdd: num=2;break;
                                case 0xbd: num=3;break;
                                case 0x7d: num=4;break;
                                case 0xeb: num=5;break;
                                case 0xdb: num=6;break;
                                case 0xbb: num=7;break;
                                case 0x7b: num=8;break;
                                case 0xe7: num=9;break;
                                case 0xd7: num=0;break;
                                case 0xb7: num=10;break;
                                case 0x77: num=11;break;
                        }
                        while(1)
                        {
                                  P1=0xf0;
                                if((P1&0xf0)==0xf0)
                                        break;
                        //        else display(15);
                        }
                        return num;
                }
        }
        return 15;
}

void main()          //主程序
{
        char key,i,a=0;
        SerialInit();
        while(1)
        {
                SerialSendChars("ati\r");//ati初始化
                delay_50ms(20);
                SerialSendChars("ati\r");//ati初始化
                delay_50ms(20);
                SerialSendChars("ati\r");//ati初始化
                delay_50ms(20);

                key=keyscan();
                while(key!=10)
                        key=keyscan();
                display(key);
                for(i=0;i<11;i++)
                {
                        key=keyscan();
                        while(key==15|key==11|key==10)
                                key=keyscan();
                        display(key);
                        haoma=key+'0';       
                        a++;       
                }
                a=0;
                key=keyscan();
                while(key!=10)
                        key=keyscan();
                SerialSendChars(haoma);
                display(15);
                key=keyscan();
                while(key!=11)
                        key=keyscan();
                display(11);
                SerialSendChars("ATH\R");                       
        }       
}

tjjack 发表于 2011-12-7 15:42:39

是程序的问题,肯定和单片机没有关系

zhanyicai000 发表于 2012-8-27 17:00:07

楼主,,同求单片机控制sim300成功的程序啊

zhanyicai000 发表于 2012-8-27 17:00:41

zhanyicai000 发表于 2012-8-27 17:00 static/image/common/back.gif
楼主,,同求单片机控制sim300成功的程序啊

我只要让他发个信息

jetli 发表于 2012-8-28 09:00:16

sim100 的有成功c51例程木有? {:mad:}
页: [1]
查看完整版本: STC52单片机控制sim300模块没反应