#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:08 void 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:08 void delay_200us(unsigned char us) { unsigned char k; for(k=0;k<us;k++) Delay200us(); } ****/ /******************** 判断是否有数据变化否者将停止运行寻找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);} else ioio>>=1; Delay200us(); if(!KEYGAODI) //第2位 因为三菱编码加密缘故,从低往高读取,需右移, {ioio>>=1; ioio=(ioio|0x80);} else ioio>>=1; Delay200us(); if(!KEYGAODI) //第3位 因为三菱编码加密缘故,从低往高读取,需右移, {ioio>>=1; ioio=(ioio|0x80);} else ioio>>=1; Delay200us(); if(!KEYGAODI) //第4位 因为三菱编码加密缘故,从低往高读取,需右移, {ioio>>=1; ioio=(ioio|0x80);} else ioio>>=1; Delay200us(); if(!KEYGAODI) //第5位 因为三菱编码加密缘故,从低往高读取,需右移, {ioio>>=1; ioio=(ioio|0x80);} else ioio>>=1; Delay200us(); if(!KEYGAODI) //第6位 因为三菱编码加密缘故,从低往高读取,需右移, {ioio>>=1; ioio=(ioio|0x80);} else ioio>>=1; Delay200us(); if(!KEYGAODI) //第7位 因为三菱编码加密缘故,从低往高读取,需右移, {ioio>>=1; ioio=(ioio|0x80);} else ioio>>=1; Delay200us(); if(!KEYGAODI) //第8位 因为三菱编码加密缘故,从低往高读取,需右移, {ioio>>=1; ioio=(ioio|0x80);} else ioio>>=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 <intrins.h> #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, // 10 0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40, //20 0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40, //30 0x40,0x3f,0x86,0xdb, 0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40, 0x40,0x40,0x3f,0x86}; ****/
分析了数据花了三天,有些数据不想分析了,只是分析我想要的楼显数据,这里只是做显示作用。
不提供远程控制作用,也不会做,也不想做,做了等于侵权。
本人学习用的,难免不足,不提供技术支援。
禁止商业用途,仅限学习交流使用。