久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2604|回復: 1
打印 上一主題 下一主題
收起左側

求一段AT89C51單片機控制SIM900A模塊發送英文短信的程序,能直接調用到主函數的

[復制鏈接]
跳轉到指定樓層
樓主
ID:716476 發表于 2020-5-23 22:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
100黑幣
如題

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:887750 發表于 2021-3-13 13:05 | 只看該作者
/************************************************************
程序說明:
首先要確定模塊已經注冊到網絡
然后正確的硬件連接   P3.0-----STXD或者5VT   P3.1-----SRXD或者5VR   GND---GND(只要保證公地即可,沒必要單獨接一次)
然后確認你單片機上的晶振,根據晶振修改自己的程序。
推薦先將單片機與電腦相連,確定單片機發送的數據是正確的。如果發送的是亂碼,請檢查晶振與單片機的串口波特率。
如果通過以上幾條還解決不了問題,請看群共享文件 AN0004 。

*************************************************************/
#include <REG51.H>
#include <string.H>
#include <stdio.h>
#include "DHT11.H"

#define uchar unsigned char
#define uint unsigned int
//以下是板子上LED的配置,把Px_x改成自己對應的腳。LED 只是用來提示,非必須。
//以下是你的51單片機的晶振大小


sbit P13=P2^3;
sbit P14=P2^4;
sbit P15=P2^5;

sbit P11=P2^2;

#define FOSC_110592M
//#define FOSC_12M

//以下是GSM模塊返回數據
uchar rec_data[50];
uchar rec_num;

uchar S[20];
//注意,無論接收到信號還是發送完信號,都會進中斷服務程序的
/*初始化程序(必須使用,否則無法收發),次程序將會使用定時器1*/
void SerialInti()//初始化程序(必須使用,否則無法收發)
{
        TMOD=0x20;//定時器1操作模式2:8位自動重載定時器

#ifdef FOSC_12M                   //在這里根據晶振大小設置不同的數值初始化串口
        TH1=0xf3;//裝入初值,波特率2400
        TL1=0xf3;       
#else        
        TH1=0xfd;//裝入初值,波特率9600
        TL1=0xfd;
#endif //end of SOC_12M
       
        TR1=1;//打開定時器
        SM0=0;//設置串行通訊工作模式,(10為一部發送,波特率可變,由定時器1的溢出率控制)
        SM1=1;//(同上)在此模式下,定時器溢出一次就發送一個位的數據
        REN=1;//串行接收允許位(要先設置sm0sm1再開串行允許)
        EA=1;//開總中斷
        ES=1;//開串行口中斷       
}

/*串行通訊中斷,收發完成將進入該中斷*///如:+CMTI:"SM",2
void Serial_interrupt() interrupt 4
{

        uchar temp;
        temp=SBUF;
        rec_data[rec_num++]=temp;
        if(rec_num>=50)
                rec_num=0;
        else
                ;
        RI=0;//接收中斷信號清零,表示將繼續接收

}

//串行口連續發送char型數組,遇到終止號/0將停止
void Uart1Sends(uchar *str)
{
        while(*str!='\0')
        {
                SBUF=*str;
                while(!TI);//等待發送完成信號(TI=1)出現
                TI=0;
                str++;
        }
}
void Uart1BYTE(uchar temp)
{
                SBUF=temp;
                while(!TI);//等待發送完成信號(TI=1)出現
                TI=0;

}


void clear_rec_data()
{
        uchar i;
        for(i=0;i<strlen(rec_data);i++)
        {
                rec_data[i]='0';
       
        }
        rec_num=0;


}
//延時函數大概是1s鐘,不過延時大的話不準...
void DelaySec(int sec)
{
        uint i , j= 0;

        for(i=0; i<sec; i++)
        {
                for(j=0; j<65535; j++)
                {       
                }
        }
}

void main()
{
        uchar i = 0;
        SerialInti();
        receive();
        P13=1;
        P14=1;
        P15 = 1;
        if(P11==0)
        {
                receive();
         P13=0;       
        clear_rec_data();
        DelaySec(1);//延時
//以下是發送英文短信短信
        Uart1Sends("AT+CSCS=\"GSM\"\r\n"); //
        DelaySec(1);//延時
        Uart1Sends("AT+CSCA?\r\n"); //短信中心號碼
        DelaySec(1);//延時
        Uart1Sends("AT+CMGF=1\r\n");  //方式1
        DelaySec(1);//延時       
        Uart1Sends("AT+CMGS=\"18295376558\"\r\n");  //此處修改短信接收方電話號
        DelaySec(1);//延時
        P14 = 0;
        sprintf(S,"Water level overrun!T:%d-R:%d",RH,TH);//         
        Uart1Sends(S);  //此處修改短信內容
        DelaySec(1);//延時
        Uart1BYTE(0X1A);
        P15=0;
        DelaySec(1);//延時
        DelaySec(1);//延時
        DelaySec(1);//延時
        DelaySec(1);//延時
        }
       
}


#include "DHT11.H"

uint RH, RL, TH, TL;        //濕度(整數),濕度(小數),溫度(整數),溫度(小數)//
uchar data_byte;

void delay(uchar ms) //延時模塊//
{
  uchar i;
  while(ms--)                 
for(i=0;i<100;i++);
}


void delay1()//一個for循環大概需要8個多機器周期一個機器周期為1us晶振為12MHz也就是說本函數延時8us多此延時函數必須德稍微精確一點

{

  uchar i;

  for(i=0;i<1;i++);

}

  
void start()//開始信號

{

  io=1;

  delay1();

  io=0;

  delay(25);// 主機把總線拉低必須大于18ms保證DHT11能檢測到起始信號

  io=1;    //發送開始信號結束后拉高電平延時20-40us

  delay1();//以下三個延時函數差不多為24us符合要求

  delay1();

  delay1();

}



uchar receive_byte()//接收一個字節//

{

  uchar i,temp;

  for(i=0;i<8;i++)//接收8bit的數據

  {

        while(!io);//等待50us的低電平開始信號結束

        delay1();//開始信號結束之后延時26us-28us以下三個延時函數

         delay1();

        delay1();

        temp=0;//時間為26us-28us表示接收的為數據'0'

        if(io==1)

         temp=1; //如果26us-28us之后還為高電平則表示接收的數據為'1'

    while(io);//等待數據信號高電平'0'為26us-28us'1'為70us

        data_byte<<=1;//接收的數據為高位在前右移

         data_byte|=temp;

  }

  return data_byte;

}

   

void receive()//接收數據//

{

  uchar T_H,T_L,R_H,R_L,check,num_check,i;

  start();//開始信號//

  io=1;   //主機設為輸入判斷從機DHT11響應信號

  if(!io)//判斷從機是否有低電平響應信號//

  {  
        while(!io);//判斷從機發出 80us 的低電平響應信號是否結束//

        while(io);//判斷從機發出 80us 的高電平是否結束如結束則主機進入數據接收狀態

        R_H=receive_byte();//濕度高位

        R_L=receive_byte();//濕度低位

        T_H=receive_byte();//溫度高位

        T_L=receive_byte();//溫度低位

        check=receive_byte();//校驗位

        io=0; //當最后一bit數據接完畢后從機拉低電平50us//

        for(i=0;i<7;i++)//差不多50us的延時

        delay1();

        io=1;//總線由上拉電阻拉高進入空閑狀態

        num_check=R_H+R_L+T_H+T_L;

        if(num_check==check)//判斷讀到的四個數據之和是否與校驗位相同

        {

   RH=R_H;

   RL=R_L;

   TH=T_H;

   TL=T_L;

   check=num_check;

        }

  }

}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.4虎影院 国产999精品久久久影片官网 | 欧美黄色片 | 国产精品99久久久久久宅男 | 男女午夜激情视频 | 日韩一区二区福利视频 | 亚洲一区二区在线播放 | 亚洲天堂免费在线 | 正在播放国产精品 | 91在线视频在线观看 | 一区二区中文字幕 | 精品国产欧美 | 亚洲在线| www.av在线| 日本午夜网 | 欧美一区二区 | 久久av一区二区三区 | 一色桃子av一区二区 | 99久久日韩精品免费热麻豆美女 | 欧美日韩在线不卡 | 婷婷狠狠| 亚洲 中文 欧美 日韩 在线观看 | av黄色国产 | 国产精品久久久av | 99热首页| 国产黄色精品 | xx视频在线观看 | 国产精品免费一区二区 | 亚洲视频一区二区三区 | 国产中文在线观看 | 国产精品成人一区二区三区夜夜夜 | 成人国产精品 | 午夜影院网站 | 狠狠入ady亚洲精品经典电影 | 欧美一区二区免费 | 欧美日一区二区 | 国产精品亚洲一区 | 国产精品美女久久久久久免费 | 久久大陆| 91麻豆精品国产91久久久久久久久 | 一区二区三区在线播放 | 自拍偷拍3p |