#include "elenessamessage.h"u8 ioio; /******************** IO配置函数 **************************/ //------- void tongxunGPIO_config(void) // ------//改一下输出模式,复位值改装 { /****模块下面做完注释掉*******——————————————————————————————————————————————————————————————————————————————————————————————*P2M0 = 0; //设置准双向口P2M1 = 0; **/P5M0 = 0; //设置准双向口 // P5M1 = 0; /****模块下面做完注释掉*******——————————————————————————————————————————————————————————————————————————————————————————————**P1M0 = 0xff; //设置led推挽输出模式(调试专用) //模块调用不需要P1M1 = 0; **/TXGZ1=0;TXGZ2=0;} //***************100us软定时----------------------------//大概采样中间值 //版本2017年10月31日 15:14:08void Delay100us() //@11.0592MHz {unsigned char i, j;_nop_();_nop_();i = 2;j = 15;do{while (--j);} while (--i); }//***************200us软定时---------------------------- //版本2017年10月31日 15:14:08 void Delay200us() //@11.0592MHz 软件定时器 {unsigned char i, j;i = 3;j = 35;do{while (--j);} while (--i); }/*******这个直接累加多少个200us //版本2017年10月31日 15:14:08void delay_200us(unsigned char us) { unsigned char k; for(k=0;k*//******************** 判断是否有数据变化否者将停止运行寻找id地址,将亮通讯故障灯 **************************/ //版本2017年10月31日 u8 tongxunguzhang(){u8 i;i=0;while(KEYGAODI) //如果电平下降跳出{i++; Delay200us();if(i==250)return 0;} //如果电平一直不下降或者上升,将返回故障i=0;while(!KEYGAODI){i++; Delay200us();if(i==12)return 0;} //如果电平一直不下降或者上升,将返回故障i=0;while(KEYGAODI){i++; Delay200us();if(i==12)return 0;} //如果电平一直不下降或者上升,将返回故障return 1;}/******************** 寻找数据头下降沿下降函数 **************************/ //版本2017年10月31日 // // 寻找5ms 10次是2ms 15次 刚好3ms 就是连续采集到15次,表示高电平 //--------______---- bit xunzhi() {unsigned char i=0;unsigned char j=0;//TXGZ3=1; //避免陷入死循环,如果不陷入死循环,将很快灭掉do{if(KEYGAODI==1)i++;else{i=0;j++;if(j>254)return 0;} //如果一直低电平故障,将跳出0值 Delay200us();} while (i<15);return 1; //检测到大于3ms的高电平值1 }//**********************读取id值**************************** //版本2017年10月31日 基本没变 void duqu() { ioio=0;while(KEYGAODI);//等待电平下降或者上 _nop_(); Delay100us(); Delay200us(); if(!KEYGAODI) //第一位 因为三菱编码加密缘故,从低往高读取,需右移,{ioio>>=1;ioio=(ioio|0x80);}elseioio>>=1;Delay200us(); if(!KEYGAODI) //第2位 因为三菱编码加密缘故,从低往高读取,需右移,{ioio>>=1;ioio=(ioio|0x80);}elseioio>>=1;Delay200us(); if(!KEYGAODI) //第3位 因为三菱编码加密缘故,从低往高读取,需右移,{ioio>>=1;ioio=(ioio|0x80);}elseioio>>=1;Delay200us(); if(!KEYGAODI) //第4位 因为三菱编码加密缘故,从低往高读取,需右移,{ioio>>=1;ioio=(ioio|0x80);}elseioio>>=1;Delay200us(); if(!KEYGAODI) //第5位 因为三菱编码加密缘故,从低往高读取,需右移,{ioio>>=1;ioio=(ioio|0x80);}elseioio>>=1;Delay200us(); if(!KEYGAODI) //第6位 因为三菱编码加密缘故,从低往高读取,需右移,{ioio>>=1;ioio=(ioio|0x80);}elseioio>>=1;Delay200us(); if(!KEYGAODI) //第7位 因为三菱编码加密缘故,从低往高读取,需右移,{ioio>>=1;ioio=(ioio|0x80);}elseioio>>=1;Delay200us(); if(!KEYGAODI) //第8位 因为三菱编码加密缘故,从低往高读取,需右移,{ioio>>=1;ioio=(ioio|0x80);}elseioio>>=1;Delay200us(); }u8 panduan() { u8 k=0; u8 kk=0;if(tongxunguzhang()) //判断是否通讯正常//if(1) //判断是否通讯正常 { while(k!=40) //找到f7 f7 f8 第4个才为楼层数据 {if(xunzhi())//需找5ms空隙 { duqu(); //读取ip值if(ioio==0xf7) //是否这个值,如果是,找到该值_ _ _ -_ _ _ _11101111(oxf7) //注意这个值以 测量为准 {Delay200us();duqu();if(ioio==0xf7) //在此寻找f7 {Delay200us();duqu();if(ioio==0xf8) //在此寻找f8 {Delay200us();duqu();kk=ioio;//退出循环return kk;}}}}k++;}{TXGZ2=1;/****模块下面做完注释掉*******——————————————————————————————————————————————————————————————————————————————————————————————**P1=0x83; **/return 0x30;} //20次 找不到数据值1 ————————————————————一定要在外面做数据灯,万一陷入死循环 }else{TXGZ1=1;/****模块下面做完注释掉*******——————————————————————————————————————————————————————————————————————————————————————————————**P1=0xff; **/return 0x2f;}//通讯故障亮起 //可以设置 }
#ifndef __ELENESSAMESSAGE_H // elenessamessage.h #define __ELENESSAMESSAGE_H #include "STC15.H" #include#include "config.h" //typedef unsigned char u8; //typedef unsigned int u16; //typedef unsigned long u32;//下面是所需要的io口 #define KEYGAODI P53 ////接受信号io #define TXGZ1 P50 //直接没检测到信号 亮起 #define TXGZ2 P51 //20次没记录亮起 //#define TXGZ3 P52 //死循环亮起 void tongxunGPIO_config(void);//初始化io模块 //占用了p5, 模块调试玩注释掉p2(复位) p1(led) u8 panduan(); //直接读取值出来, //30(20次 找不到数据值)....2f是通讯直接有问题故障吗#endif /*****u8 kkk[64]={0x40,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,// 100x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,//200x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,//300x40,0x3f,0x86,0xdb, 0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40, 0x40,0x40,0x3f,0x86}; ****/
分析了数据花了三天,有些数据不想分析了,只是分析我想要的楼显数据,这里只是做显示作用。
不提供远程控制作用,也不会做,也不想做,做了等于侵权。
本人学习用的,难免不足,不提供技术支援。
禁止商业用途,仅限学习交流使用。