串行编程器源程序(Keil C语言)//FID=01:AT89C2051系列编程器//实现编程的读,写,擦等细节//AT89C2051的特殊处:给XTAL一个脉冲,地址计数加1;P1的引脚排列与AT89C51相反,需要用函数转换#include <e51pro.h> #define C2051_P3_7 P1_0#define C2051_P1 P0//注意引脚排列相反#define C2051_P3_0 P1_1#define C2051_P3_1 P1_2#define C2051_XTAL P1_4#define C2051_P3_2 P1_5#define C2051_P3_3 P1_6#define C2051_P3_4 P1_7#define C2051_P3_5 P3_5 void InitPro01()//编程前的准备工作{ SetVpp0V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=0; Delay_ms(20); nAddress=0x0000; SetVpp5V();} void ProOver01()//编程结束后的工作,设置合适的引脚电平{ SetVpp5V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=1;} BYTE GetData()//从P0口获得数据{ B_0=P0_7; B_1=P0_6; B_2=P0_5; B_3=P0_4; B_4=P0_3; B_5=P0_2; B_6=P0_1; B_7=P0_0; return B;} void SetData(BYTE DataByte)//转换并设置P0口的数据{ B=DataByte; P0_0=B_7; P0_1=B_6; P0_2=B_5; P0_3=B_4; P0_4=B_3; P0_5=B_2; P0_6=B_1; P0_7=B_0;} void ReadSign01()//读特征字{ InitPro01(); Delay_ms(1);//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(20); ComBuf[2]=GetData(); C2051_XTAL=1; C2051_XTAL=0; Delay_us(20); ComBuf[3]=GetData(); ComBuf[4]=0xff;//----------------------------------------------------------------------------- ProOver01();} void Erase01()//擦除器件{ InitPro01();//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 C2051_P3_3=1; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(1); SetVpp12V(); Delay_ms(1); C2051_P3_2=0; Delay_ms(10); C2051_P3_2=1; Delay_ms(1);//----------------------------------------------------------------------------- ProOver01();} BOOL Write01(BYTE Data)//写器件{//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 //写一个单元 C2051_P3_3=0; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; SetData(Data); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); Delay_us(20); C2051_P3_4=0; Delay_ms(2); nTimeOut=0; P0=0xff; nTimeOut=0; while(!GetData()==Data)//效验:循环读,直到读出与写入的数相同 { nTimeOut++; if(nTimeOut>1000)//超时了 { return 0; } } C2051_XTAL=1; C2051_XTAL=0;//一个脉冲指向下一个单元//----------------------------------------------------------------------------- return 1;} BYTE Read01()//读器件{ BYTE Data;//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 //读一个单元 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=1; C2051_P3_7=1; Data=GetData(); C2051_XTAL=1; C2051_XTAL=0;//一个脉冲指向下一个单元//----------------------------------------------------------------------------- return Data;} void Lock01()//写锁定位{ InitPro01();//先设置成编程状态//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 if(ComBuf[2]>=1)//ComBuf[2]为锁定位 { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); } if(ComBuf[2]>=2) { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=0; C2051_P3_7=0; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); }//----------------------------------------------------------------------------- ProOver01();} void PreparePro01()//设置pw中的函数指针,让主程序可以调用上面的函数{ pw.fpInitPro=InitPro01; pw.fpReadSign=ReadSign01; pw.fpErase=Erase01; pw.fpWrite=Write01; pw.fpRead=Read01; pw.fpLock=Lock01; pw.fpProOver=ProOver01;}
上传时间: 2013-11-12
上传用户:gut1234567
针对城市道路交叉口的常发性交通拥堵现象,依据RFID检测系统的特点,提出了一种基于物联网前端信息采集技术的交通流检测方法。并且对城市道路交叉口采集到的交通流量相对增量、车辆的时间占有率相对增量以及地点平均车速等信息进行了对比性分析和统计推导,从理论上论证了交通拥挤产生时的交通流特点,然后以此为基础给出了交通拥挤事件出现时的判别准则,构造出相应的拥挤检测指标及判别算法。最后利用Matlab编程再结合实际交通测量数据验证了算法的正确性。
上传时间: 2014-12-28
上传用户:GavinNeko
为提高农产品追溯效率、降低农产品跟踪、监控成本,通过对现有农产品生产、定位、跟踪、监控、销售等全过程进行了分析,给出了一种基于RFID农产品可追溯系统的物联网设计方案。重点分析了标签的唯一编码方案、RFID防碰撞算法和RFID数据采集过滤算法,最后对RFID数据采集进行了仿真与实现。应用结果表明对提高农产品追溯效率、降低农产品跟踪、监控成本有较明显的效果。
上传时间: 2013-10-23
上传用户:plsee
第八章 labview的编程技巧 本章介绍局部变量、全局变量、属性节点和其他一些有助于提高编程技巧的问题,恰当地运用这些技巧可以提高程序的质量。 8.1 局部变量 严格的语法尽管可以保证程序语言的严密性,但有时它也会带来一些使用上的不便。在labview这样的数据流式的语言中,将变量严格地分为控制器(Control)和指示器(Indicator),前者只能向外流出数据,后者只能接受流入的数据,反过来不行。在一般的代码式语言中,情况不是这样的。例如我们有变量a、b和c,只要需要我们可以将a的值赋给b,将b的值赋给c等等。前面所介绍的labview内容中,只有移位积存器即可输入又可输出。另外,一个变量在程序中可能要在多处用到,在图形语言中势必带来过多连线,这也是一件烦人的事。还有其他需要,因此labview引入了局部变量。
上传时间: 2013-10-27
上传用户:xieguodong1234
针对城市道路交叉口的常发性交通拥堵现象,依据RFID检测系统的特点,提出了一种基于物联网前端信息采集技术的交通流检测方法。并且对城市道路交叉口采集到的交通流量相对增量、车辆的时间占有率相对增量以及地点平均车速等信息进行了对比性分析和统计推导,从理论上论证了交通拥挤产生时的交通流特点,然后以此为基础给出了交通拥挤事件出现时的判别准则,构造出相应的拥挤检测指标及判别算法。最后利用Matlab编程再结合实际交通测量数据验证了算法的正确性。
上传时间: 2013-10-19
上传用户:zhaiye
一个算法问题包括,一些数据结构的算法,全部是已经编译通过的源码,且是我自己写的!
标签: 算法
上传时间: 2014-11-23
上传用户:guanliya
该演示程序最初来自Sun公司的Java网站。笔者添加了另外三个算法(插入,堆和Shell排序)。这样一共有六个排序算法同时演示,(包括起泡排序,双向起泡和快速排序 )。
上传时间: 2014-01-08
上传用户:zycidjl
递归算法求统计二叉树T中叶子结点的数目,数据结构常用算法
上传时间: 2015-03-19
上传用户:silenthink
数据块的首址在R0中,字节数在R7中。 单字节无符号数据块排序(减序) 影响资源:PSW、A、R1、R6
标签: 数据
上传时间: 2013-12-29
上传用户:gxrui1991
程序以图形的形式对各种排序的效率进行对比,是学习排序算法的很好的工具
上传时间: 2013-12-23
上传用户:jennyzai