微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 各位看看这个程序什么问题?怎么进行不到LED1=1;LED2=1;?

各位看看这个程序什么问题?怎么进行不到LED1=1;LED2=1;?

时间:10-02 整理:3721RD 点击:
#include<reg51.h>
#include<string.h>
#include<stdio.h>
#include <intrins.h>

#define Buf_Max 90 //缓存长度200
#define Delay_Time 3000;        //延时长度3000
sbit KEY1=P0^0;
sbit LED1=P2^0;
sbit LED2=P2^1;
char code num[]="18330382022";  //定义要拨打的电话号码,拨打其它电话在这时修改

void Serial_Init(void);     //声明串口初始化函数
void Delay_ms(unsigned int time);//声明延时函数
void GSM_Call(unsigned char *num);
unsigned char i=0;//定义缓存指针
unsigned char Rec_Buf[Buf_Max];//定义缓存数组
void CLR_Buf(void)                                   //声明清除缓存内容       
{
          unsigned char k;
    for(k=0;k<Buf_Max;k++)    //将缓存内容清零
            {
                        Rec_Buf[k] = 0;
                }
    i = 0;                    //接收字符串的起始存储位置

}
bit Hand(unsigned char *a)//判断缓存中是否有制定字符串函数
{
    if(strstr(Rec_Buf,a)!=NULL)
            return 1;
        else
                return 0;
}
void Send_ASCII(unsigned char *b)         
{
    ES = 0;                   //关串口中断
    for (b; *b!='\0';b++)
            {
                SBUF = *b;
                while(TI!=1);     //等待发送完成
                        TI = 0;           //清除发送中断标志位
                }          
        ES = 1;                   //开串口中断
}
void Send_Hex(unsigned char c)         
{
    ES = 0;               //关串口中断
    SBUF = c;
    while(TI!=1);         //等待发送完成
    TI = 0;               //清除发送中断标志位
        ES = 1;               //开串口中断
}
void main(void)
{
  LED1=0;
  LED2=1;
Serial_Init();
TI=1;
CLR_Buf();
while(!Hand("OK"))
{        Send_ASCII("AT"); //发送联机指令
                        Send_Hex(0x0d);   //发送回车符   
                                        Send_Hex(0x0a);   //发送换行符
                                        Delay_ms(60000);   //延时
}
  LED1=1;
  LED2=1;
while(1)
   {
     if(KEY1==0)
      {
           Delay_ms(20);
       if(KEY1==0)
        {
         GSM_Call(num);
        }

      }
   }
}
void Serial_Init(void)//串口初始化函数
{
SCON = 0x50;//串口:方式1,允许发送和接收
TMOD = 0x20;//定时器1:模式2,8位自动重装模式,用于产生波特率   
TH1 = 0xFD; //11.0592MHZ晶振,波特率为9600
TL1 = 0xFD;   
TR1 = 1;    //开启定时器1   
//ES = 1;     //开启串口中断
//EA = 1;     //开启全局中断
}
void Serial_Int() interrupt 4
{       
        ES=0;         //关串口中断,防止中断嵌套
        if(TI)         //如果是发送中断,则不做任何处理
                {
                        TI = 0;  //清除发送中断标志位
                }
        if(RI)         //如果是接送中断,则进行处理
                {       
                        RI = 0; //清除接收中断标志位
                }
        ES = 1;         //开启串口中断
}
void Delay_ms(unsigned int time)  //延时函数
{
int i=250;
for(time;time>0;time--)
   {
           for(i;i>0;i--)
        {
         _nop_();
         _nop_();
         _nop_();
         _nop_();
       
        }
   }
}
void GSM_Call(unsigned char *num)//打电话函数
{
printf("ATD");
printf("%s;\n",num);
Delay_ms(100);
}

这是tc35基于51单片机的程序,实现握手之后的LED等出现效果,下一步进行等待按键按下拨号。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top