门磁报警器

门磁报警器,是由开关和磁铁两部分组成,开关部分由磁簧开关经引线连接。定型封装而成;磁铁部分由对应的磁场强度的磁铁封装于塑胶或合金壳体内。当两者分开或接近至一定距离后,引起开关的开断从而感应物体位置的变化。一般多用于城市安防领域。门磁报警器广泛应用于城市安防、银行、电信、电力、司法、小区、工厂、公司、学校、家庭、别墅、仓库等众多领域门窗安装使用。

设计功能

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无线通讯在无线门磁报警中的应用相关推荐

  1. sja1000编程c语言,基于51单片机SJA1000 CAN通讯实现(C语言程序)

    经过一个星期的艰苦奋斗,终于将两个SJA1000通过51单片机成功通讯了!采用的是Pelican工作模式,扩展帧数据格式,验收滤波器是采用单滤波扩展帧模式. 发送和接收代码都全部相同样! 一 实物图 ...

  2. 基于51单片机SJA1000 CAN通讯实现(C语言程序)

    经过一个星期的艰苦奋斗,终于将两个SJA1000通过51单片机成功通讯了!采用的是Pelican工作模式,扩展帧数据格式,验收滤波器是采用单滤波扩展帧模式. 发送和接收代码都全部相同样! 一 实物图 ...

  3. c语言跟plc做485通讯,三菱PLC扩展RS485通讯板与51单片机之间的通讯设计

    描述 我用了两个晚上的时间查阅一些资料,利用三菱PLC的扩展RS485通讯板与其51单片机连接通讯,可写PLC任意的地址.长度可达1000米,看见网上写的都很烦且对三菱和单片机不是很熟的朋友来说有一定 ...

  4. 基于51单片机SJA1000 CAN通讯实现(代码+原理图)

    STC89C52调试can总线-SJA1000记录(代码都测试过) can通信模块 51单片机系统板 最小系统板 另外一些需要注意点 最近调试51单片机的can总线,网上的资料相对而言实在是比较少,在 ...

  5. 51单片机——UART串口通讯-波特率可选,增添定时器2产生波特率1.0

    1.51单片机自带硬件串口接口,使用时只需要进行寄存器配置即可. 2.定时器1波特率有4种可选择,默认9600bps.另外还有1个字节的发送函数,字符串发送函数. 3.增添:定时器2波特率有5种可选择 ...

  6. 51单片机——UART串口通讯-波特率4种模式可选1.0

    1.51单片机自带硬件串口接口,使用时只需要进行寄存器配置即可. 2.波特率有4种可选择,默认9600bps.另外还有1个字节的发送函数,n个字符发送函数. 3.有几个寄存器默认的reg52.h里面没 ...

  7. 基于51单片机的计步器步数检测无线蓝牙APP上传方案原理图设计

    系统的功能分析 (末尾符文件) 本设计由STC89C52单片机最小系统+ADXL345加速度传感器+lcd1602液晶电路+蓝牙模块电路+呼吸灯电路+电源电路组成. 1.通过ADXL345检测步数,然 ...

  8. 51单片机之串口通讯应用实例(逻辑分析仪调试)

    硬件:STC89C52RC 开发工具:Keil uVision4 前言:8051是一款很经典的.历史悠久的单片机,作为一款入门级的单片机8051受到很多初学者的欢迎.89c52是8051系列的成员之一 ...

  9. 单片机红外通信c语言,用51单片机实现红外通讯源码

    /************************************************************************************** *            ...

  10. sja1000 c语言,基于51单片机SJA1000 CAN通讯实现

    5.sja1000.c #include "sja1000.h" sbit LED=P1^0; unsigned char xdata *SJA_BCANAdr; unsigned ...

最新文章

  1. 海外名校毕业!好不容易凭借超强的面试能力+算法入职的谷歌新员工被批干活太慢,委屈得要哭!作为职场新人该怎么办?...
  2. IBM 2019-2020数据科学校招
  3. 前端文件上传-javascript-ajax
  4. T-SQL with as 关键字
  5. 剖析数组名、函数名(不是指针常量,更不是指针)
  6. 斯坦福完全可解释深度神经网络:你需要用决策树搞点事
  7. PostgreSQL中UUID的完整指南
  8. (深度剖析结构)模块化解释矢量控制
  9. 使用SQLite Developer可视化解析sqlite数据库文件
  10. python火车票票价_Python火车票代码
  11. dym 微服务 快速开发框架
  12. TensorFlow简单实例(二):logistic regression
  13. 【CSS选择器】CSS选择器有哪些?如何选择合适的使用?各类选择器的优劣势是什么?
  14. 如何评小学计算机课,小学信息技术优质课评选听课心得体会
  15. java递归堆栈溢出_【java】递归次数过多导致堆栈溢出
  16. 计算机命令vty是什么意思,华为交换机基础命令中user interface 0和user-interface vty 0的区别...
  17. Calibre物理验证技术点滴 (中)
  18. HTML5小游戏笑说米,活跃气氛的70个小游戏 带动气氛的小游戏
  19. GSMA RCS - 简介
  20. HackerRank问题:Gary hiker valleys

热门文章

  1. ID3、C4.5决策树算法的Python实现(注释详细)
  2. 图片转换html源代码,将图片转换成HTML格式的文字图程序源代码
  3. MOS管烧毁,90%以上的硬件工程师都会遇到的问题!
  4. 【指标异动】贡献度定量归因之法
  5. Linux 中的 owner,group,others
  6. 星巴克 销售数据分析_星巴克大数据科学家纳米级推广战略顶峰项目
  7. 计算机网络树形结构例子,网络拓扑结构大全和实例
  8. 计算机表格填充,Excel表格的自动填充功能
  9. 用python处理mp4与gif格式互转,简单到爆!
  10. whistle抓包工具