1、资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 测温控制系统 摘要: 使用铂热电阻传感器测量温度, 采用恒流源电路测量铂热电阻阻值的变化, 经过放大器放大模拟量, 经A/D转换得到数字量传给单片机。使用单片机进行数字滤波, 并算出温度的测量值, 将温度在LED上显示出来。 一、 硬件设计 1, 铂热电阻 金属铂的电阻值随温度变化而变化, 而且具有很好的重现性和稳定性, 利用此种温度特性之称的温度传感器成为铂热电阻温度传感器。使用最多的铂热电阻温度传感器零摄氏度标称中阻阻值为100欧和10欧, 电阻的变化系数为0.003851.铂电阻温度传感器, 精度高, 稳定性好
2、 应用温度范围广, 是中低温区常见的一种温度传感器。 对于0︒C~650︒C的温度范围: Pt100Ω温度特性为非线性, Rt=R0( 1+At+Bt²) 式中R0表示Pt100在0︒C事的电阻值。A=3.96847×10-3/︒C, B=-5.847×10-7︒C 。 2、 稳定的电压源 实验研究的一个高度稳定的电压源( 图1) 的模范计划, 在温度范围从-18 ° C至50 ° C表明, 温度误差小于, ± 0.001%/ ° C, 时间漂移不超过每天的± 0.005%。源有一个小的热迟滞。 图0.1高度稳定的收入来源的电压示意图 实验研究的一个高度稳定
3、的电压源(图1)的模范计划, 在温度范围从-18 ° C至50 ° C表明, 温度误差小于, ± 0.001%/ ° C, 时间漂移不超过每天的± 0.005%。源有一个小的热迟滞(图2)。 图 2源的温度特性 零件清单: R1, R3 = 1K R2= 15K R4 = 6K8 R5 = 2K2 R6, R10= 110欧姆 R7 = 11欧姆 奥迪R8 = 820欧姆 R9 = 3K3 C1, C2 = 10nF的 D1 = D818E 3、 恒流源测电阻 恒流源电路如图所示。其中芯片OP07为运算放大器, 它和5个电阻组成恒流源电路, 在VIN+处输
4、出1 mA的工作电流。图中DGND-5 V, VMC-o V, 有4个节点分别是NET1, NET2.NET3, NET4。设流过R110的电流为Ia, 流过R114的电流为Ib, 单位为mA, 方向都向右。则根据运放的虚断和虚短, 则有方程: DGND- (R111+R110)×Ia.+ R114×Ib- R118×( (DGND - R111×Ia)/ R112) - (VDGND - R111×Ia)=0 代人数据, 有: 5- (10+1)×Ia+1×Ib-2×((5 - 10×Ia)/10) -(5 - 10×Ia) =0 可算得Ia+Ib=1, 而Ia+
5、Ib即为所求电流I,为1 mA. 根据方程, 可知要得到Ia+Ib为常数, 必须满足: R113 XR111/R112- R110=R114 因此, 这个电路成为恒流源的条件是: R111/R112= (R110+R114 )/ R113 如果R111 =R112则必须R110 +R114=R113.此时, 恒流值 为I= DGND×R113 /R112 /R114. 其中J110用于连接PT100铂热电阻。 注: ( Op07芯片是一种低噪声, 非斩波稳零的双极性运算放大器集成电路。由于 OP07具有非常低的输入失调电压( 对于 OP
6、07A 最大为25?V) , 因此 OP07在很多应用场合不需 要额外的调零措施。 OP07同时具有输入偏置电流低 ( OP07A 为±2nA) 和开环增益高 ( 对于 OP07A 为300V/mV) 的特点, 这种低失调、 高开环增益的特性使得 OP07特别适用于高增益的测量设备 和放大传感器的微弱信号等方面。 特点 : 超低偏移150µV 最大 。 低输入偏置电流 1.8nA 。 低失调电压漂移 0.5µV/℃ 。 超稳定, 时间 2µV/month 最大 高电源电压范围 ±3V 至±22V 工作电源电压范围是±3V~±18) 由于Pt电阻的恒流电压较小, 不已被A/D转
7、换器分辨, 因此加一个放大器放大150倍。放大器用AD620。电源供应范围± 2.3V ~ ±18V ; 精确度高 voltage of 50µV 。 由于公式中Rt=R0( 1+At+Bt²) , A=3.96847×10-3/︒C, B=-5.847×10-7︒C。B比A小了四个数量级, 因此B的二次项能够忽略。在检测电路中可认为Rt=R0( 1+At) , 则符合恒流源电路对Pt电阻的检测要求。 2, A/D 1、 摘要 ads7804是美国Burr-brown公司推出的种新型12位A/d转换器。文中介绍了它的特性与功能, 结出了一种简洁而新颖的与51
8、单片机的接口方法, 同时给出了用c语言编写的数据采集的应用程 在计算机控制系统及各类用单片机( 或微处理器) 构成的智能仪器仪表中, 外部的各种模拟信号必须经过A/D转换器变换为数字信号后才能送入计算机。与8位和16位的A/d转换器相比, 12位A/D转换器以其较高的性价比而在仪器仪表中得到广泛的应用。 ADS7804芯片采用28脚0.3英寸PDIP( 塑料双列直插式) 封装, 两列管脚间距为0.3英寸, 比般DIF2B封装窄一倍, 因此俗称瘦型DIp, ADS7804采用单5v电源供电, 芯片内部含有采样保持、 电压基准和时钟等电路, 可极大简化用户的电路设计和硬件开锁, 并可提高系统的
9、稳定性。 ADS7804采用cmos工艺制造, 转换速度快、 功耗低(最大功耗为100mw)。 该A/D转换器采用逐次逼近式工作原理, 单通道输入, 模拟输入电压的范围为±10v, 采样速率为100kH.。 2、 引脚功能 ADS7804共有28个引脚, 图1为基引脚图。这些引脚大致上能够划分为三类。 a电源类 数字电源VDIG和模拟电源vana一般一起接到5v电源上。数字地DGnd和模拟地AGnDl、 AGnD2一般共地。rEF为参考电压端, 一般对地接2.2uF钽电窨, 芯片内部可产生2.5v基准电压。cap为参考电压所需电容, 对地接2.2uF钽电容。
10、b模数信号类 VIN为输入的模拟信号。D11-D0为数字量并行输出口, Dz( 19~22脚) 是为了管脚与16位a/d转换器ADS7805兼容而设的, 可悬空. c.控制信号娄 CS( 输入) 为片选信号, R/C( 输入) 为读取结果/模数转换控制信号, busy( 出) 用于指示转换是吾完成, BytE( 输入) 信号用来控制从总线读出的数据是转换结果的高字节还是低字节。 3、 启动A/D转换和读取转换结果 ADS7804启动转换和读取转换结果的时序比较特点, 参见图2。 首先将R/C脚电平变低, 然后在cs脚输入一个脉冲并在其下降沿启动A/d转换此脉冲的宽度
11、要求在40ns-6us之间, 这时bUSY脚电平拉低表示正在进行转换, 在经过大约8us以后, 转换完成, bUSy脚电平相应变高, 再把R/C脚电平拉高, 这样, cs脚脉冲的下降沿即把转换结果输出到数据总线上。 因为转换结果12位, 因此对8位单片机而言, 必须分两次读入, 这个功能由byte脚实现。当byte脚为高电平时, 数据总线上输出高字节, 反之, 输出低字节。 ADS7804转换得到的数字结果是以补码形式结出的, 现结出几组有特定台义的值, 表1所列即为ADs 7804的模拟电压与其补码形式的数字输出关系, -10V~9.99512V为量程, 4 .88mV为电压分辨率。
12、 模拟电压和数字输出的关系: 4、 与51单片机的接口 因为ADS7804的cs信号腑冲宽度要求为40ns-6us之间, 而对于单片机而言, 只要对外部设备进行读操作, 即会产生RD脉冲, 其宽度为6个振荡周期, 如采用12MHz的晶振, 其脉冲宽度500ns, 因此将ADS7804的cs脚接单片机的RD信号是再合适不过了。 至于R/C、 busy和B ytE信号, 只需连接到普通的锁存功能的端口即可, 如单片机的pi口、 并行口扩展芯片8l55或8255等的端口。 图。是个ADS7804与51单片机的典型接口电路。 5 、 c语言程序设计 Franklin C
13、51交叉编译器是专为51系列单片机设计的种高校的c语言编译器, 使用它能够缩短开发周期, 降低开发成本, 而且开发出的系统易于维护, 可靠性高, 可移植性好。 下面介绍用c语言编写的单点和定长数据采集子程序, 偶设所用的晶振频率为12MHz 单点采样子程序ADS7804( ) 用来返回个有符号整数形式的转换结果。 定长采样子程序DAQ( ) 根据入口参数interval( 单位为us) 结定的采样间隔采样N点, 并采用查询51单片机内置定时器的方式来控制采样时序, N点采样结果存储在定位于外部存储器的数组array中。需要注意的是, 赋给计数寄存器th和tl的值是定时器从开始计数
14、到, 溢出所用的时间, 这个时间再加上清TF和装载计数初值所需的时间( 共5个机器周期, 对于12MHz晶振即为5us) 才是所要的采样间隔, 这点在程序设计十必颊注意。 源程序如附录1. 二、 软件设计 1, 单片机 美同Atmel公司是同际上著名的半导体公司, 该公司的技术优势在于Flash存储器技术。随着业务的发展, 在20世纪90年代初, ATMEL公司一跃成为全球最大的EEPROM供应商。1994年, 为了介入单片机市场, Atmel公司以EEPROM技术和Intel公司的80C31单片机核心技术进行交换, 从而取得了80C31核的使用权。ATMEL公司把自身的先进
15、Flash存储器技术和80C31核柏结合, 推出了Flash AT89系列单片机。这是种内部含Flash存储器的特殊单片机。由于它内部含大容量的Flash存储器, 因此, 在产品开发及生产便携式商品、 手提式仪器等方面有着广泛的应用, 也是日前取代传统的MCS-51系列单片机的主流单片机之一。AT89系列单片机对一般用户米说, 有下列明显的优点: ①内部含有Flash存储器, 在系统开发过程中很容易修改程序, 能够人人缩短了系统的开发时问。②.与MCS-51系列单片机引脚 兼容, 能够直接进行代换。③AT89系列并不对80C31的简单继承, 功能进一步增强。在中国这种单片机受到广泛青眯, 很
16、多以前使用80C51、 80C52的用广都转而使用AT89系列。对于有丰富编程经验的用户而言, 不需要仿真器, 能够直接将程序烧入芯片, 放在目标板上加电直接运行, 观察运行结果, 出现问题时冉进行修改, 然后重新烧写程序, 再进行试验, 直至成功。 AT89系列包括似大类第一类是常规的, 就是AT89C系列, 这类单片机要用常规的并行方法编程, 必须使用编程器编程; 第二类是在系统可编程( 即芯片安装到电路板上之后不用。拿下来而直接往里面烧写程序)ISP Flash系列, 也就是AT89S系列, 这类单片机除了用常规的并行方法编程外, 还能够在系统用下载线进行编程, 省去价格较贵的
17、编程器, 而且能够在目标板上直接修改程序。 2, 数字滤波 经过多次采样得到一个A/D转换的数据序列, 经过软件算法处理后才能得到一个可信度较高的结果。这种方法就是数字滤波。 滤波器是一种能使有用频率信号经过而同时抑制( 或大为衰减) 无用频率信号的电子装置, 可分为模拟滤波器和数字滤波器。模拟滤波器是主要采用R、 L、 C等光源器件组成的滤波电路或由运放和R、 C组成的有源滤波器。而数字滤波则是采用软件算法实现滤波的。数字滤波的前提是对同一数据进行多次采样, 在单片机系统中一般有以下几种方法: 1. 中值滤波: 一般采样5、 7次, 排序后取中间值。 2. 算术平均滤波: 一般采
18、样8次, 求平均值。 3. 去极值平均滤波: 去掉最大最小值后求平均值一般采样10、 12次。 4. 加权平均滤波: 各加权系数之和为1。 5. 滑动平均滤波: 本次采样值和前n次采样值求平均。 数据滤波方法选用要视现场环境和被测对象而定, 在本系统中采用的是去极值均值滤波, 算术平均滤波不能将明显的脉冲干扰或粗大误差消除, 只能将其影响削弱。因明显干扰或粗大误差使采样值远离其实际值, 能够比较容易地将其剔除, 不参与均值计算, 从而使平均滤波的输出值更接近真实值。以去极值平均滤波为例, 程序流程图如图5所示。算法原理如下: 对于温度信号对应的电压采样值, 连续采样n次, 将
19、其累加求和, 同时找出其中最大值和最小值.冉从累加和中减大最大值和最小值, 按n-2个采样值求平均, 即有效采样值。 数字滤波在A/D中已经有这项功能。 3、 计算电阻 由于 ∆R=(R2+R3)/∆V 经过检测到的电压计算出Pt的电阻阻值。 得到电阻值后, 可有两种方法计算温度: ( 1) 、 Rt=R0( 1+At+Bt²) 由上式解出t ( 2) 、 使用查表法。 查表法相对较快, 低功耗。但需要一定的内存空间, 而且需要向内存输入铂热电阻的温度表。直接解二次方程每次计算的时间较查表法长, 功耗高。但其每次计算时间不超过1ms, 对于检测温度系
20、统来说, 能够使用。 故, 使用第一种方法解温度较为简单实用。 程序附录2. 4、 送到LCD显示 本设计选用的是128×64点阵的OCMJ4×8C中文液晶图形显示模块。C系列中文模块能够显示字幕, 数字符号, 中文字型及图形, 具有绘图及文字画面混合显示功能, 与传统的图形点阵液晶显示模块相比, 单片机硬件接口及软件编程比较简单, 内置2Mb中文ROM( CGROM) 总共提供8192个中文字型, 可节省大量单片机设计的ROM空间, 可更多地显示汉字字母的数量, 更加发挥了液晶显示技术在单片机系统的应用。OCMJ4×8C模块非常适合用于显示汉字信息量较大的智能仪器系统及家用电器。
21、可采用8位并行接口与液晶显示接口电路如图所示。程序为附录3. 三, 抗干扰设置 为提高单片机本身的可靠性。近年米单片机的制造商在单片机设计上采取了一系列措施以期提高可靠性。 3.1用于单片机系统的干扰抑制元件 ①去耦电容。每个集成电路的电源、 地之间配置一个去耦电容, 它能够滤掉来自电源的高频噪声。作为储能元件, 它吸收或提供该集成电路内部三极管导通、 截止引起的电流变化, 从而降低系统噪声。要选高频特性好的独石电容或瓷片电容作去耦电容。每块印制电路板电源引入的地方要安放一只大容量的储能电容。由于电解电容的缠绕式结构, 其分布电感较人, 对滤除高频干扰信号几乎不起作
22、用。使用时要与去耦电容成对使用。但电容则比电解电容效果更好。 ②自恢复保险丝。这是用一种新型高分子聚合材料制成的器件, 当电流低于其额定值时, 它的直流电阻只有零点几欧。而电流大到一定程度, 它的阻值迅速升高, 引起发热, 而越热电阻越大, 从而阻断电源电流。当温度降下米以后能自动恢复正常。这种器件可防止CMOS器件在遇到强冲击型干扰时引起所谓”可控硅触发”现象。这种现象指集成电路硅片的基体变得导通, 从而引起电流增大, 导致CMOS集成电路发热乃至烧毁。 ③防雷击器件。室外使用的单片机系统或电源线、 信号线从室外架空引入室内的, 要考虑系统的防雷击问题。常见的防雷击器件有
23、 气体放电管TVS等, 气体放电管是当电源电压大于某一值时, 一般为数十伏或数百伏, 气体击穿放电, 将电源线上强冲击脉冲导入大地, TVS '能够看成两个并联且方向相反的齐纳二极管, 当电两端电压高于某一额定值时导通。其特点是能够瞬态经过数百乃至上千安培的电流。这类元器件要和抗共模和抗差模干扰的电感配合使用以提高抗干扰效果。 3.2提高单片机系统抗干扰能力的主要手段 ①接地。这里的接地指接大地, 也称作保护地。为单片机系统提供良好的地线, 对提高系统的抗干扰能力极为有益。特别是对有防雷击要求的系统, 良好的接地至关重要。上而提到的一系列抗干扰元件, 意在将雷击、 浪涌式干扰以及
24、快脉冲群干扰去除, 而去除的方法都是将干扰引入大地, 如果系统不接地, 或虽有地线但接地电阻过人, 则这些元件都不能发挥作用。为单片机供电的电源的地俗称逻辑地, 它们和大地的关系能够相通、 浮空、 或接电阻, 要视应用场合而定。不能把地线随便接在暖气管子上。绝对不能把接地线, 与动力线的火线、 零线巾的零线混淆。 ②隔离与屏蔽。典型的信号隔离是光电隔离。使用光电隔离器件将单片机的输入输出隔离开, 一方而使干扰信号不得进入单片机系统, , 另一方而单片机系统本身的噪声也不会以传导的方式传播出去。屏蔽则是用来隔离空问辐射的, 对噪声特别人的部件, 如开关电源, 用金属盒罩起米, 可减少噪
25、声源对单片机系统的干扰。对特别怕干扰的模拟电路, 如高灵敏度的弱信号放大电路可屏蔽起来。而重要的是金属屏蔽本身必须接真正的地。 ③滤波。滤波指各类信号按频率特性分类并控制它们的方向。常见的有种种低通滤波器、 高通滤波器、 带通滤波器。低通滤波器川在接入的交流电源线上, 旨在让50周的交流电顺利经过, 将其它高频噪声导入人地。低通滤波器的配置指标是插入损耗, 选择的低通滤波器插入损耗过低起小到抑制噪声的作用, 而过高的插入损耗会导致”漏电”, 影响系统的人身安全性。高通、 带通滤波器则应根据系统中对信号的处理要求选择使用。 印制电路板的设计对单片机系统能否抗干扰非常重要。要本
26、着尽量控制噪声源、 尽量减小噪声的传播与耦合, 尽量减小噪声的吸收这三大原则设计印制电路板和布线。当你设计中单片机用印制电路板时, 不仿对照下面的条条检查一下。印制电路板要合理区分, 单片机系统一般可分三区, 即模拟电路区(怕干扰), 数字电路去(即怕干扰、 又产生干扰), 功率驱动区( 干扰源) 。印刷板按单点接电源、 单点接地原则送电。三个区域的电源线、 地线由该点分三路引出。噪声元件与非噪声元件要离得远一些。 使用满足系统要求的最低频率的时钟, 时钟产生器要尽量靠近用到该时钟的器件。石英晶体振荡器外壳要接地, 时钟线要尽量短, 且不要引得到处都是。使用45度的折线布线, 不要使
27、用90度的折线, 以减小高频信号的发射。时钟线垂直于I/O线比平行于I/O线干扰小, 时钟线要远离I/O线。 每个集成电路要加一个去耦电容, 要选高频信号好的独石电容式瓷片电容作去耦电容。去耦电容焊在印制电路板上时, 引脚要尽量短。需要时, 电源线、 地线上可加铜线绕制铁氧用体而成的高频扼流器件阻断高频噪声的传 四, 附录 1、 2, 附录 A=3.96847×10-3/︒C, B=-5.847×10-7︒C 在程序中a=B , b=A #include"stdio.h" #include"math.h" void ma
28、in() { float a,b,c,disc,x1,x2,realpart,imagpart; x1=0; x2=0; scanf("%f%f%f",&a,&b,&c); disc=b*b-4*a*c; { if(disc==0) printf("xi=%f,x2=%f\n",x1,x2); else if(disc>=0) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc
29、))/(2*a); printf("x1=%2.2f,x2=%2.2f\n",x1,x2); } else if(disc<0) { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); x1=realpart+imagpart; x2=realpart-imagpart; printf("x1=%2.2f+%2.2fi,\tx2=%2.2-
30、2.2fi\n",realpart,imagpart,realpart,imagpart); } } } 3、 附录 ; P2.0-P2.7接LCD数据脚DB0-DB7 ; P3.2接INT0 ; P3.4接LCD RS脚 ; P3.5接LCD RW脚 ; P3.6接LCD E脚 ; P3.7接LCD PSB脚 RS EQU P3.4 RW EQU P3.5 E EQU P3.6 LCD_X EQU 30H ;行座标 LCD_Y EQU 31H ;列座标 COUNT EQU 32H ;定义记数缓冲 COUNT1 EQU 33H CO
31、UNT2 EQU 34H COUNT3 EQU 35H LCD_DATA EQU 36H ;字义数据RAM空间 LCD_DATA1 EQU 37H LCD_DATA2 EQU 38H STORE EQU 39H HAN_WR2A: MOV DPTR,#TAB1A ;显示汉字和字符 MOV COUNT,#10H ;地址计数器设为16。 MOV A,#80H ;第一行起始地 LCALL SEND_I
32、 LCALL QUSHU wait: MOV P1,#00H CALL SCANKEY SJMP wait ;全屏显示点阵图形子程序 ;=========================== PHO_DISP: ;图形点阵排列方式为, 一行128点/8=16个字节, 即每行16字节, 每字节以高位开始排列 MOV COUNT3,#02H MOV LCD_X,#80H
33、 ;显示数据RAM的水平起始地址是80H PHO_DISP1: MOV LCD_Y,#80H ;显示数据RAM的垂直起始地址也是80H MOV COUNT2,#20H ; 上半部份32行 PHO_DISP2: MOV COUNT1,#10H ;每行16字节 LCALL WR_ZB ;功能指令调用, 即为点阵数据 PHO_DISP3: CLR A
34、 MOVC A,@A+DPTR ;读取点阵数据内容 LCALL SEND_D INC DPTR DJNZ COUNT1,PHO_DISP3 INC LCD_Y DJNZ COUNT2,PHO_DISP2 MOV LCD_X,#88H DJNZ COUNT3,PHO_DISP1 MOV A,#36H ;扩充功能设定
35、 LCALL SEND_I MOV A,#30H LCALL SEND_I RET ;---------------------------------------------- CLRRAM: MOV LCD_DATA1,#00H ;GDRAM写0子程序 MOV LCD_DATA2,#00H LCALL LAT_DISP
36、 RET ;显示点阵子程序, 此子程序与图形显示一样, 只是输出的数据是固定的两个数据 ;============================================== LAT_DISP: MOV COUNT3,#02H MOV LCD_X,#80H LAT_DISP1: MOV LCD_Y,#80H CLR F0 MOV
37、 COUNT2,#20H LAT_DISP2: MOV COUNT1,#10H LCALL WR_ZB LAT_DISP3: JB F0,LAT_DISP32 ;P直接寻址位为1转移 MOV LCD_DATA,LCD_DATA1 AJMP LAT_DISP31 LAT_DISP32: MOV LCD_DATA,LCD_DATA2
38、 LAT_DISP31: MOV A,LCD_DATA LCALL SEND_D DJNZ COUNT1,LAT_DISP31 INC LCD_Y CPL F0 DJNZ COUNT2,LAT_DISP2 MOV LCD_X,#88H DJNZ COUNT3,LAT_DISP1 MOV A,#36H
39、 LCALL SEND_I MOV A,#30H LCALL SEND_I RET ;--------------------------------------------- WR_ZB: MOV A,#34H LCALL SEND_I MOV A,LCD_Y LCALL SEND_I M
40、OV A,LCD_X LCALL SEND_I MOV A,#30H LCALL SEND_I RET ;======================================= FLASH: MOV A,#08H ;关闭显示 LCALL SEND_I LCALL DELAY5 MOV A,#0CH
41、 ;开显示,关光标,不闪烁 LCALL SEND_I LCALL DELAY5 MOV A,#08H ;关闭显示 LCALL SEND_I LCALL DELAY5 MOV A,#0CH ;开显示,关光标,不闪烁 LCALL SEND_I LCALL DELAY5 MOV A,#08H ;关闭显示
42、LCALL SEND_I LCALL DELAY5 RET ;================================== ;清屏 ;============================ CLEAR_P: MOV A,#01H ;清屏 LCALL SEND_I MOV A,#34H LCALL SEND_I
43、 MOV A,#30H LCALL SEND_I RET ;取数据送显示 ;=================================== QUSHU: CLR A MOVC A, ;查表取数据 LCALL SEND_D ;送显示 LCALL DELAY4 ;延时40ms,
44、 DJNZ COUNT,QUSHU RET ;写数据子程序 ;RS=1,RW=0,E=高脉冲,D0-D7=数据 ;===================================== SEND_D: LCALL CHK_BUSY ;写数据子程序 SETB RS CLR RW MOV P2,A SETB E
45、 NOP NOP CLR E RET ===================================== ;写指令子程序 ;RS=0,RW=0,E=高脉冲,D0-D7=指令码 ;==================================== SEND_I: LCALL CHK_BUSY CLR RS
46、 CLR RW MOV P2,A SETB E NOP NOP CLR E RET ===================================== ;读数据子程序 ;RS=1,RW=1,E=H,D0-D7=数据 ;=====================================
47、 READ_D: LCALL CHK_BUSY ;读数据子程序 SETB RS SETB RW SETB E NOP MOV A,P2 CLR E MOV STORE,A RET ===================================== ;测忙碌子程序 ;RS=0,RW=1,E=H,D0-D7=状态字 ==================================== CHK_BUSY: MOV P2,#0FFH ;测忙碌子程序 CLR RS SETB RW SETB E JB P2.7,$ ;直接寻址位为1转移 CLR E RET






