【51单片机】OOK无线通讯在无线门磁报警中的应用
门磁报警器
门磁报警器,是由开关和磁铁两部分组成,开关部分由磁簧开关经引线连接。定型封装而成;磁铁部分由对应的磁场强度的磁铁封装于塑胶或合金壳体内。当两者分开或接近至一定距离后,引起开关的开断从而感应物体位置的变化。一般多用于城市安防领域。门磁报警器广泛应用于城市安防、银行、电信、电力、司法、小区、工厂、公司、学校、家庭、别墅、仓库等众多领域门窗安装使用。
设计功能
1开门报警。
2关门报警。
3电池低压报警。
4能通过OOK无线通讯将报警信号传送到WIFI报警主机上。
OOk无线通讯技术原理
OOK即On-Off Keying。
OOK是ASK调制的一个特例,把一个幅度取为0,另一个幅度为非0,就是OOK。二进制启闭键控(OOK:On-Off Keying)又名二进制振幅键控(2ASK),它是以单极性不归零码序列来控制正弦载波的开启与关闭。
参考波形图
代码
本次项目中采用的,是5.5296Mhz的晶振,分频为12T,根据上图,可以用STC烧录工具中自带的定时器计算器,计算出不同信号持续时间
///12.8ms
#define OOK_TONG_H 0xE8 //同步头高位
#define OOK_TONG_L 0xF4 //同步头低位
//0.4ms
#define OOK_SMALL_H 0xFF //小脉冲高位
#define OOK_SMALL_L 0x47 //小脉冲低位
//1.2ms
#define OOK_LONG_H 0xFD //大脉冲高位
#define OOK_LONG_L 0xD6 //大脉冲低位
得知三个不同时长之后,就可以组合成同步信号,高电平信号和低电平信号。
同步信号:
//0.4ms
TH0=OOK_SMALL_H 0xFF //小脉冲高位
TL0=OOK_SMALL_L 0x47 //小脉冲低位
//12.8ms
TH0=OOK_SMALL_H 0xE8 //同步头高位
TL0=OOK_SMALL_L 0xF4 //同步头低位
高电平信号
//1.2ms
TH0=OOK_LONG_H 0xFD //大脉冲高位
TL0=OOK_LONG_L 0xD6 //大脉冲低位
//0.4ms
TH0=OOK_SMALL_H 0xFF //小脉冲高位
TL0=OOK_SMALL_L 0x47 //小脉冲低位
低电平信号
//0.4ms
TH0=OOK_SMALL_H 0xFF //小脉冲高位
TL0=OOK_SMALL_L 0x47 //小脉冲低位
//1.2ms
TH0=OOK_LONG_H 0xFD //大脉冲高位
TL0=OOK_LONG_L 0xD6 //大脉冲低位
最终,得到如下程序:
void OOK_Save(unsigned char SendData)
{unsigned char data0;unsigned char data1;unsigned char data2;unsigned char i, j, temp;unsigned char arr[100];data1 = CBYTE[0xFF7];data0 = CBYTE[0xff8];data2 = SendData;arr[0] = OOK_SMALL_H;arr[1] = OOK_SMALL_L;arr[2] = OOK_TONG_H;arr[3] = OOK_TONG_L;//将数据存储当数组中for (i = 4; i < 100; i++){if (i == 4){temp = data0;}else if (i == 36){temp = data1;}else if (i == 68){temp = data2;}for (j = 0; j < 8; j++){//取出最高位if (temp & 0x80){arr[i] = OOK_LONG_H;i++;arr[i] = OOK_LONG_L;i++;arr[i] = OOK_SMALL_H;i++;arr[i] = OOK_SMALL_L;i++;}//最高位为0else{arr[i] = OOK_SMALL_H;i++;arr[i] = OOK_SMALL_L;i++;arr[i] = OOK_LONG_H;i++;arr[i] = OOK_LONG_L;i++;}temp <<= 1;//左移,让低位成为高位}i--;}TR0 = 1;//定时器开始计时P3M0 |= 0x04;//P32设置为开漏输出模式LED_WORKER = 1;ASK_SENDDATA = 0;for (j = 0; j < 23; j++)//发送多次{for (i = 0; i < 100; i++){TF0 = 0;ASK_SENDDATA = !ASK_SENDDATA;TH0 = arr[i];//定时器高位i++;TL0 = arr[i];//定时器低位 //消耗定时器时间while (!TF0){}}}ASK_SENDDATA = 0;TR0 = 0;TF0 = 0;LED_WORKER = 0;P3M0 &= ~0X04;}
这里的data0、data1为地址码,而data2为发送过去的信息。
总结
代码类似ev1527编码芯片的编码,但这个门磁并没有用上ev1527编码芯片,只是模拟它,ev1527是20个基础码,4个功能码,但是我们做的项目是16+8,所以要做好这个理解,另外里面有一个TH0和TL0记数的,16位,加起来65536,有一个TF0来控制while,如果TH0和TL0满了,就是让TF0置1,停止这个while循环,继续执行外层的for循环。
当我们的门开关状态发生改变时,就可以用该函数将数据传到data2中,发送给报警主机,再通过WIFI或者4G信号发送到我们的手机上。
很显然这个程序也暴露了OOK无线通讯方式的缺陷,为了防止干扰,保证信号无误,三个字节的数据,要反复发送23次,时间一秒钟,严重拖慢了效率。
【51单片机】OOK无线通讯在无线门磁报警中的应用相关推荐
- sja1000编程c语言,基于51单片机SJA1000 CAN通讯实现(C语言程序)
经过一个星期的艰苦奋斗,终于将两个SJA1000通过51单片机成功通讯了!采用的是Pelican工作模式,扩展帧数据格式,验收滤波器是采用单滤波扩展帧模式. 发送和接收代码都全部相同样! 一 实物图 ...
- 基于51单片机SJA1000 CAN通讯实现(C语言程序)
经过一个星期的艰苦奋斗,终于将两个SJA1000通过51单片机成功通讯了!采用的是Pelican工作模式,扩展帧数据格式,验收滤波器是采用单滤波扩展帧模式. 发送和接收代码都全部相同样! 一 实物图 ...
- c语言跟plc做485通讯,三菱PLC扩展RS485通讯板与51单片机之间的通讯设计
描述 我用了两个晚上的时间查阅一些资料,利用三菱PLC的扩展RS485通讯板与其51单片机连接通讯,可写PLC任意的地址.长度可达1000米,看见网上写的都很烦且对三菱和单片机不是很熟的朋友来说有一定 ...
- 基于51单片机SJA1000 CAN通讯实现(代码+原理图)
STC89C52调试can总线-SJA1000记录(代码都测试过) can通信模块 51单片机系统板 最小系统板 另外一些需要注意点 最近调试51单片机的can总线,网上的资料相对而言实在是比较少,在 ...
- 51单片机——UART串口通讯-波特率可选,增添定时器2产生波特率1.0
1.51单片机自带硬件串口接口,使用时只需要进行寄存器配置即可. 2.定时器1波特率有4种可选择,默认9600bps.另外还有1个字节的发送函数,字符串发送函数. 3.增添:定时器2波特率有5种可选择 ...
- 51单片机——UART串口通讯-波特率4种模式可选1.0
1.51单片机自带硬件串口接口,使用时只需要进行寄存器配置即可. 2.波特率有4种可选择,默认9600bps.另外还有1个字节的发送函数,n个字符发送函数. 3.有几个寄存器默认的reg52.h里面没 ...
- 基于51单片机的计步器步数检测无线蓝牙APP上传方案原理图设计
系统的功能分析 (末尾符文件) 本设计由STC89C52单片机最小系统+ADXL345加速度传感器+lcd1602液晶电路+蓝牙模块电路+呼吸灯电路+电源电路组成. 1.通过ADXL345检测步数,然 ...
- 51单片机之串口通讯应用实例(逻辑分析仪调试)
硬件:STC89C52RC 开发工具:Keil uVision4 前言:8051是一款很经典的.历史悠久的单片机,作为一款入门级的单片机8051受到很多初学者的欢迎.89c52是8051系列的成员之一 ...
- 单片机红外通信c语言,用51单片机实现红外通讯源码
/************************************************************************************** * ...
- sja1000 c语言,基于51单片机SJA1000 CAN通讯实现
5.sja1000.c #include "sja1000.h" sbit LED=P1^0; unsigned char xdata *SJA_BCANAdr; unsigned ...
最新文章
- 海外名校毕业!好不容易凭借超强的面试能力+算法入职的谷歌新员工被批干活太慢,委屈得要哭!作为职场新人该怎么办?...
- IBM 2019-2020数据科学校招
- 前端文件上传-javascript-ajax
- T-SQL with as 关键字
- 剖析数组名、函数名(不是指针常量,更不是指针)
- 斯坦福完全可解释深度神经网络:你需要用决策树搞点事
- PostgreSQL中UUID的完整指南
- (深度剖析结构)模块化解释矢量控制
- 使用SQLite Developer可视化解析sqlite数据库文件
- python火车票票价_Python火车票代码
- dym 微服务 快速开发框架
- TensorFlow简单实例(二):logistic regression
- 【CSS选择器】CSS选择器有哪些?如何选择合适的使用?各类选择器的优劣势是什么?
- 如何评小学计算机课,小学信息技术优质课评选听课心得体会
- java递归堆栈溢出_【java】递归次数过多导致堆栈溢出
- 计算机命令vty是什么意思,华为交换机基础命令中user interface 0和user-interface vty 0的区别...
- Calibre物理验证技术点滴 (中)
- HTML5小游戏笑说米,活跃气氛的70个小游戏 带动气氛的小游戏
- GSMA RCS - 简介
- HackerRank问题:Gary hiker valleys