历史上的今天
返回首页

历史上的今天

今天是:2024年11月06日(星期三)

正在发生

2019年11月06日 | M8单片机串口通讯监听(使用PROTEUS串口仿真GSM模块AT指令通讯)

2019-11-06 来源:51hei

实现监听(使用PROTEUS串口例子)V1.0
M8单片机仿真原理图如下

单片机源程序如下:

////////////////////////////////////////////////////////////////////////////////

// ICC-AVR application builder : 6-25 下午 06:02:39

// Target : M8

// Crystal: 3.6864Mhz

// Author:  Anwarye

// Title:   Detcetaphone

////////////////////////////////////////////////////////////////////////////////


#include

#include

#include "var.h"


#define XTAL == 3.6864M


////////////////////////////////////////////////////////////////////////////////

#pragma interrupt_handler uart0_rx_isr:12

void uart0_rx_isr(void)

{

    unsigned char i,j;

    if(UDR == 0x0A)

    { 

       return;                 // 收到0x0A直接丢弃

    }

        

        i = RxIndex;

        j = RxIndex-1;

    if((RxBuf[0] == 0x30) && (RxBuf[1] == 0x0D))

    {

        RxIndexTail = RxIndex;              // 保存接收缓冲指针尾

        RxIndex = 0;                                                   // 接收缓冲指针归零

            RxStatus = 1;                                                // 接收完成标志置位

                OkFlag = 1;

                error = 0;

                return; 

        }

    if((RxBuf[0] == 0x32) && (RxBuf[1] == 0x0D))  // 收到来电信号,来电标志置位

    {

        CallInFlag = 1;                            // 置电话呼入标志

            RxIndex = 0;

                RxStatus = 1;

                OkFlag = 1;

                return;  

    }

    else if((RxBuf[0] == 0x33) && (RxBuf[1] == 0x0D))  // 被叫号码忙 或者挂机 主叫挂机

    {

        BusyFlag = 1;                                       // 置电话呼入标志

            RxIndex = 0;

                RxStatus = 1;

                OkFlag = 1;

                return;  

    }      

    else if((RxBuf[0] == 0x37) && (RxBuf[1] == 0x0D))  // 收到来电信号,来电标志置位

    {

        NoCarrierFlag = 1;                                   // 置电话呼入标志  NO CARRIER

            RxIndex = 0;

                RxStatus = 1;

                OkFlag = 1;

                return;

    }

    else if((RxBuf[0] == 0x34) && (RxBuf[1] == 0x0D))  // 收到来电信号,来电标志置位

    {

            RxIndex = 0;

                RxStatus = 1;

                OkFlag = 1;

                error = 1;

                return;        

        }

        else 

    {

    

    RxBuf[RxIndex++] = UDR;                 // 继续接收数据放入接收缓冲

        RxStatus = 0;                         // 串口接收中

//        return;                                                                     // 结束接收,直接跳出

        }

}


////////////////////////////////////////////////////////////////////////////////

#pragma interrupt_handler uart0_tx_isr:14

void uart0_tx_isr(void)

{

    

    if(!TxStatus)                                   // 本帧数据未发完,则继续发送  

        {

            //while ( !(UCSRA & (1<            UDR = TxBuf[TxIndex];                

        }

        if((TxBuf[TxIndex] == 0x0D) || (TxBuf[TxIndex] == 0x1A))  // 本帧数据发送结束

        {

                TxStatus = 1;                          // 发送完成状态标志置位

                TxIndex = 0;                           // 发送缓冲区指针归零

                UCSRB &= ~((1<                return;

        }

        TxIndex++;                              

}

unsigned char CheckRx(void)

{

    unsigned char i,j;

        i = RxIndex;

        j = RxIndex - 1;

    if(( RxBuf[j] == 0x30) && (RxBuf[i] == 0x0D))

        {

            RxIndex = 0;

                return (1);

        }

        else

        {

            return (0);

        }

}

/*-----------------------------------------------------------------------*/

///////////////////////////  清除接收缓冲  ////////////////////////////////

/*-----------------------------------------------------------------------*/

void ClearRxBuf(void)

{

    unsigned char i;

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

        {

            RxBuf[i] = 0;

        }

}

/*-----------------------------------------------------------------------*/

///////////////////////////  串口发送使能  ////////////////////////////////

/*-----------------------------------------------------------------------*/

void TxEnable(void)

{

    //RxIndex = 0;

    UDR = TxBuf[0];                            // 发送缓冲头送入串口发送寄存器,激活开始发送

        UCSRB |= ((1<}

/*-----------------------------------------------------------------------*/

/////////////////////////////  发送AT命令 /////////////////////////////////

/*-----------------------------------------------------------------------*/

void Put_AT_command(const unsigned char *atc, unsigned char atlen)

{

    unsigned char count;

        

        for(count = 0;count < atlen;count++)      // AT命令窜移入发送缓冲

        {

            TxBuf[count] = atc[count];

        }

        

        TxBuf[atlen] = 0x0D;                      // 发送缓冲窜结尾加“回车”

        TxBuf[atlen + 1] = 0x00;                  // 发送缓冲窜结束符号


        OkFlag = 0;

    TxStatus = 0;

        TxIndex = 1;                              // 发送指针偏移1

        TxEnable();                               // 激活发送

    while(!TxStatus);                         // 等代发送结束,发送缓冲指针为零则可以发送

        DelayMs(20);

        while(!OkFlag);                           // 收到模块返回OK,命令结束

        OkFlag = 0;


}


/*-----------------------------------------------------------------------*/

/////////////////////////  从内存发送AT命令串  ////////////////////////////

/*-----------------------------------------------------------------------*/

void Put_AT_String(unsigned char *atc, unsigned char atlen)

{

    unsigned char count;

                

        for(count = 0;count < atlen;count++)

        {

            TxBuf[count] = *(atc+count);

        }

        

        TxBuf[atlen] = 0x0D;                      // 发送缓冲窜结尾加“回车”

        TxBuf[atlen + 1] = 0x00;                  // 发送缓冲窜结束符号

推荐阅读

史海拾趣

FUJIKURA公司的发展小趣事

FUJIKURA(株式会社藤仓)在电子及光纤通信行业中有着悠久而辉煌的发展历程。以下是五个关于FUJIKURA公司发展起来的相关故事,每个故事均基于事实描述,并尽量保持字数在500字以上:

1. 创立与早期发展

FUJIKURA公司成立于1885年,由藤仓善八先生创立,起初专注于发电机用的绢卷线制造。这一初创阶段为公司奠定了坚实的电线电缆制造基础。随着技术的不断积累,FUJIKURA逐渐扩展到更广泛的电气和电子领域,为公司的长期发展奠定了坚实的基础。

2. 技术创新与行业领导地位

在多年的发展中,FUJIKURA始终致力于技术创新,不断推出具有行业影响力的新产品。特别是在光纤通信领域,FUJIKURA凭借其强大的研发能力和技术实力,成为了全球领先的光纤通信产品研发与生产商。公司不仅在光纤制造方面取得了显著成就,还在光纤熔接、光数据传输等领域拥有多项专利技术,推动了整个行业的发展。

3. 全球化战略与市场拓展

随着全球市场的不断开放和竞争的加剧,FUJIKURA积极实施全球化战略,通过设立海外分支机构、与当地企业合作等方式,不断拓展海外市场。目前,FUJIKURA的商务与服务网络已经覆盖全球多个国家和地区,为全球客户提供优质的产品和服务。这一战略不仅提升了公司的国际影响力,还为公司带来了更多的商业机会和发展空间。

4. 企业文化与团队建设

FUJIKURA注重企业文化的建设和团队精神的培养。公司秉承“向客户提供价值”的企业理念,致力于为员工创造一个积极向上、团结协作的工作环境。通过定期的培训、团队建设活动等方式,FUJIKURA不断提升员工的综合素质和团队协作能力,为公司的持续发展提供了有力的人才保障。

5. 应对挑战与持续发展

面对全球经济大萧条等严峻挑战,FUJIKURA展现出了强大的韧性和适应能力。公司全体员工团结一致,以共享目标和积极态度应对挑战,将危机视为机遇。通过实施“第三次创业”和企业文化改革等措施,FUJIKURA不仅成功度过了难关,还实现了持续稳健的发展。未来,FUJIKURA将继续秉持顾客价值创造的理念,积极应对社会需求,为实现赢得客户信赖的承诺而努力。

Belden Wire and Cable公司的发展小趣事

随着业务的不断扩展,Belden公司于1910年搬迁至芝加哥更大的区域,并在产品线上增加了橡胶绝缘电线。这一举措不仅扩大了公司的生产规模,也进一步丰富了产品种类,满足了市场的多样化需求。随后,百通工程师于1927年发明的软橡胶塞技术,进一步推动了公司的技术创新和业务拓展。

Hsuan Mao Technology Co公司的发展小趣事

为了满足不断增长的市场需求,1928年,Belden在印第安纳州里士满开设了一家专为制造电线而设计的新工厂。这家工厂的建立极大地提升了公司的产能和效率,为公司的进一步发展提供了有力保障。在随后的几十年里,随着第二次世界大战的爆发和战后经济的复苏,里士满工厂经历了多次扩建和升级,逐渐成为百通最大的制造工厂之一。

港源(GANGYUAN)公司的发展小趣事

随着业务的不断扩展,Belden公司于1910年搬迁至芝加哥更大的区域,并在产品线上增加了橡胶绝缘电线。这一举措不仅扩大了公司的生产规模,也进一步丰富了产品种类,满足了市场的多样化需求。随后,百通工程师于1927年发明的软橡胶塞技术,进一步推动了公司的技术创新和业务拓展。

Cal Crystal Lab Inc / Comclok Inc公司的发展小趣事

在激烈的市场竞争中,品牌建设和形象提升对于企业的发展至关重要。Comclok Inc深知品牌建设的重要性,从产品设计、生产到销售服务,都注重塑造公司的品牌形象。公司注重产品的品质和用户体验,不断提升产品的性能和稳定性。同时,Comclok Inc还积极参加各类行业展会和交流活动,展示公司的技术实力和产品优势,提升了公司在行业内的知名度和影响力。

宁波晨翔电子(CONNFLY)公司的发展小趣事

为了提高产品质量和客户满意度,晨翔电子高度重视质量管理体系建设。公司先后通过了ISO9001质量管理体系认证、ISO14001环境体系认证、OHSAS18001职业健康安全体系认证及TS16949汽车质量体系认证。这些认证不仅证明了公司在质量管理方面的实力,也为公司赢得了更多客户的信任和支持。

问答坊 | AI 解惑

闭路监视系统的组成及雷害成因

1、电视监控系统(Closed Circait Televisiow,简称CCTV),一般由以下三部分组成:前端部分:主要由黑白(彩色)摄像机、镜头、云台、防护罩、支架等组成。传输部分:使用同轴电缆、电线、多芯线采取架空、地埋或沿墙敷设等方式传输视频、音频或控 ...…

查看全部问答>

中国的汽车电子方向

根据中国半导体协会的说法,截至2005年,中国车用芯片供应能力是零。那么,都是哪些因素把中国本土IC设计者挡在了圈外     中国汽车产量已接近600万辆,成为世界第三汽车大国,而且发展速度居世界第一。来自IC Insight的数据显示,全球 ...…

查看全部问答>

想GDI全屏画图,(0,0)并不是屏幕坐标顶点,如何才能使得(0,0)代表屏幕坐标顶点?

WinCE下,我的MFC程序用GDI全屏画图,但是(0,0)并不是屏幕坐标顶点B,而是对应着title下面的区域的顶点A, B--------------------        title A-------------------- --------------------- Menu -------------------- ...…

查看全部问答>

我又来了..WINCE 6.0 LOGO和进度条的进度问题

问题1:我想修改我的WINCE 6.0系统的启动LOG,我将JPEG图片转化成.C文件后复制都SRC\\BOOTLOADER\\EBOOT中的   Bitmap.C中,const unsigned char ScreenBitmap[45880] = {}      其他都没改.编译后起来.发现图象LOG显示 ...…

查看全部问答>

U盘 固件程序格式化问题

在开发U盘固件程序的时候,不知道U盘在接收到格式化命令后,该有什么样的动作? 格式化的原理和过程是什么? 谢谢…

查看全部问答>

Altium+designer+元件库大全

一个很不错的电子设计,工程开发软件,附件为部分个人整理的元件库,需要的童鞋拿去啊…

查看全部问答>

hdmi解码器绿边问题求助

最近在玩hdmi解码器,解码器连接液晶电视显示我采集好的视频源,在没有解码时,电视上出现的是颜色条,但是在颜色条的最右边会看到一条清楚的绿边,本人觉得这条绿边影响了视频的质量,而且从抓图来看,我的视频源是没有绿边的,这绿边可能只是相邻 ...…

查看全部问答>

电源设计小贴士 50:铝电解电容器常见缺陷的规避方法

因其低成本的特点,铝电解电容器一直都是电源的常用选择。但是,它们寿命有限,且易受高温和低温极端条件的影响。铝电解电容器在浸透电解液的纸片两面放置金属薄片。这种电解液会在电容器寿命期间蒸发,从而改变其电气属性。如果电容器失效,其会出 ...…

查看全部问答>