历史上的今天
今天是: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< } if((TxBuf[TxIndex] == 0x0D) || (TxBuf[TxIndex] == 0x1A)) // 本帧数据发送结束 { TxStatus = 1; // 发送完成状态标志置位 TxIndex = 0; // 发送缓冲区指针归零 UCSRB &= ~((1< } 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; // 发送缓冲窜结束符号
史海拾趣
|
1、电视监控系统(Closed Circait Televisiow,简称CCTV),一般由以下三部分组成:前端部分:主要由黑白(彩色)摄像机、镜头、云台、防护罩、支架等组成。传输部分:使用同轴电缆、电线、多芯线采取架空、地埋或沿墙敷设等方式传输视频、音频或控 ...… 查看全部问答> |
|
想GDI全屏画图,(0,0)并不是屏幕坐标顶点,如何才能使得(0,0)代表屏幕坐标顶点? WinCE下,我的MFC程序用GDI全屏画图,但是(0,0)并不是屏幕坐标顶点B,而是对应着title下面的区域的顶点A, B-------------------- title A-------------------- --------------------- Menu -------------------- ...… 查看全部问答> |
|
问题1:我想修改我的WINCE 6.0系统的启动LOG,我将JPEG图片转化成.C文件后复制都SRC\\BOOTLOADER\\EBOOT中的 Bitmap.C中,const unsigned char ScreenBitmap[45880] = {} 其他都没改.编译后起来.发现图象LOG显示 ...… 查看全部问答> |
|
最近在玩hdmi解码器,解码器连接液晶电视显示我采集好的视频源,在没有解码时,电视上出现的是颜色条,但是在颜色条的最右边会看到一条清楚的绿边,本人觉得这条绿边影响了视频的质量,而且从抓图来看,我的视频源是没有绿边的,这绿边可能只是相邻 ...… 查看全部问答> |
|
因其低成本的特点,铝电解电容器一直都是电源的常用选择。但是,它们寿命有限,且易受高温和低温极端条件的影响。铝电解电容器在浸透电解液的纸片两面放置金属薄片。这种电解液会在电容器寿命期间蒸发,从而改变其电气属性。如果电容器失效,其会出 ...… 查看全部问答> |




