1、单片机类课程设计 题 目:智能温度控制器目录 论文总页数 23页一、引言.2二、关键字.3三、设计的题目. 3四、课程设计的基本要求4五、方案设计. 4六、系统设计方案及框图. 56.1智能温度控制器总体方案. 56.2设计原理框图.6七、数字信号采集和处理.67.1、DS18B20产品的特点.77.2、DS18B20的引脚介绍.77.3、DS18B20的使用方法8八、系统硬件电路.118.1 控制器内部结构.128.2 控制器具体电路.13九、系统扩展电路139. 1 数字温度感应模块接口电路139. 2 液晶显示电路149. 3 系统输入电路15十、系统总电路1510.1 Altium D
2、esigner电路设计软件绘制的总电路原理图 1610. 2电路仿真软件PROTEUS下系统实时仿真1610. 3 系统总电路PCB图的设计17十一、 系统软件.18十二、总结与体会.20十三、参考文献 . 21一、引言 随着科技的不断发展,二十一世纪已经进入电子信息时代的轨道。为了能够更好的适应社会的发展和需要,学好电子方面的知识对于我们这些二十一世纪的大学生是尤为重要的,单片机更是如此。与此同时,设计一些新的电子产品对我们在学校所学知识的一种掌握和巩固。 许多情况下需要测量温度参数。通常测温系统的主要器件是热敏电阻,由于它体积小、重复性好、测量方法简单,所以在测温系统中广泛应用。但采用热敏
3、电阻的测温系统需要AD转换,而且测量精度不高。本设计中采用Dallas公司生产的一种新型温度传感器DS18B20,它集温度测量、AD转换于一体,其测量范围宽(-55+125),精度高(0.0625),DS18B20是一款具有单总线结构的器件。另外再搭配Dallas公司生产的另一种实时时钟芯片DS1302用以产生精确的时、分、秒信号来实现实时温度测量,显示电路采用1602液晶。由DS18B20组建的温度测量单元体积小,便于携带、安装。同时,DS18B20的输出为数字量,可以直接与单片机连接,无需后级AD转换,控制简单。由于DS18B20具有单总线特性,便于扩展,可在一根总线上挂接多个DS18B2
4、0来组建温度测量网络。 作为学习电子技术的我们,可以利用学习过的知识设计一个智能温度控制器二、关键字三、设计题目四、课程设计的基本要求任务与要求五、设计方法集温度测量、AD转换于一体,其测量范围宽(-55+125),精度高(0.0625),故选用方案二。六、系统设计方案及框图6.1智能温度控制器总体方案6.2设计原理框图如图61所示外设总线外部扩展电路LCD温度传感器微型控制器(STC89C52)键盘系统电源整个系统中前端的数字温度传感器负责测量温度的变化并将温度的变化转化为数字型号,数字温度传感器芯片负责把温度变化转换成微控制器可以识别的数字量,然后通过芯片内部的SPI总线上传给微控制器。微
5、控制器将表征当前温度值的数字量处理后通过直观的LCD进行方位显示,同时可以通过键盘控制微控制器进行相应的操作,如设定温度的上下限值等。七、温度信号采集和处理数字温度传感器(DS18B20)介绍DS18B20数字温度计是DALLAS公司生产的1Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。 7.1、DS18B20产品的特点 (1)、只要求一个端口即可实现通信。 (2)、在DS18B20中的每个器件上都有独一无二的序列号。(3)、实际应用中不需要外部任何元器件即可实现测温。(4)、测量温度范围在55
6、。C到125。C之间。 (5)、数字温度计的分辨率用户可以从9位到12位选择。 (6)、内部有温度上、下限告警设置。 7.2、DS18B20的引脚介绍 DS18B20的引脚为TO92封装,其引脚功能描述见表1。 表1DS18B20详细引脚功能描述 序号名称引脚功能描述1GND地信号2DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。3VDD可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。图7.1 DS18B20引脚说明7.3 DS18B20的使用方法 由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输,而对STC89
7、C52单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。 由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。 DS18B20的复位时序 图7.2 DS18B20
8、复位时序图DS18B20的读时序 对于DS18B20的读时序分为读0时序和读1时序两个过程。 对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。 图7.3 DS18B20的读时序DS18B20的写时序 对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。 对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉
9、低之后,在15us之内就得释放单总线。 图7.4 DS18B20的写时序由DS18B20组建的温度测量单元体积小,便于携带、安装。同时,DS18B20的输出为数字量,可以直接与单片机连接,无需后级AD转换,控制简单。由于DS18B20具有单总线特性,便于扩展,可在一根总线上挂接多个DS18B20来组建温度测量网络。图7.5 DS18B20方框图八、系统硬件电路8.1 控制器内部结构图8.1 STC89C52内部结构图本次设计中采用了51内核MCU,具体型号为STC89C52,图8.2 DIP40单片机引脚图兼容8051架构,为8位微处理器CPU。拥有数据存储器RAM和特殊功能寄存器SFR和内部
10、程序存储器ROM、两个定时/计数器,用以对外部事件进行计数,也可用作定时器;四个8位可编程的I/O(输入/输出)并行端口,每个端口既可做输入,也可做输出。一个串行端口,用于数据的串行通信。8.2 控制器具体电路整个系统的控制部分主要完成对温度感应模块数据的读取和处理并将数据的处理结果通过控制人机界面显示出来,同时监控键盘的输入以便完成系统功能设定等操作。图8.3 复位及时钟振荡电路控制部分电路如图所示,其中包含了微控制器、LCD接口电路、端口上拉电阻、温度传感器模块接口电路。整个微控制系统中采用了无源晶振的形式发生MCU所需要的时钟信号。具体电路如所示。时钟电路中的两个电容用作补偿,使得晶振更
11、容易起振,频率更加稳定。系统的复位采用了上电复的形式,上电过程中微控制器复位引脚保证10ms以上的高电平就能可靠的将微控制器复位。九、系统扩展电路9. 1 数字温度感应模块接口电路本次设计中采用了DS18B20数字温度感应模块。DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输。9. 2 液晶显示电路本次设计采用了162字符单色液晶显示屏(LCD)作为系统的显示界面,该LCM采用了HD44780控制芯片作为显示控制核心。微控制器只需要对HD44780芯片进行操作便可以完成对LCD屏的相关操作,使用非常方便。相关的技术参数及引脚说明如下:整个LCM中HD44780负责
12、对LCD行列驱动芯片的控制。微控制器只需要按照HD44780给定的指令格式进行相应的操作即可,其数据和指令的读写时序如图所示。图9.2 1602的读操作时序图9.3 1602的写操作时序9. 3 系统输入电路系统采用了4键输入以实现系统功能的设定,如系统温度上下限的调整和菜单的选择。由于系统中的其他模块对微控制器的端口占用较少还有很多没有使用的端口,键盘连接上直接采用了每个按键占用一个端口的形式,如图所示:图9.4 键盘输入电路键盘的读取采用扫描的形式,当检测到有按键按下时,消抖动后进行键值判断。十、系统总电路图10.1 系统总电路 10.1使用Altium Designer电路设计软件绘制出
13、的系统总电路原理图: 10. 2 在经典的电路仿真软件PROTEUS下加载编译成功的HEX文件之后的系统实时仿真图:图10.2 系统在PROTEUS下的仿真效果经过在Proteus下的仿真,与KEIL等编译系统进行联调并经过多次的修改之后最终将此智能温度控制器的软件程序确定。10. 3 系统总电路PCB图的设计系统总电路中包含了系统主控制电路、温度感应模块及其逻辑控制电路,扩展接口和相关辅助电路。在进行系统PCB的器件方位布置和走线时,特别注意了通信电路和信号采集电路的隔离。LCM内部的干扰比较大在进行器件放置时,将容易受到干扰的器件排布到其他区域,并采取一定的隔离措施。使用Altium De
14、signer电路设计软件绘制出的系统总电路PCB图: 图10.3 使用Altium Designer电路设计软件设计的系统PCB图十一、 系统软件开始 整监控系统中各个模块间存在一定的先后顺序且程序模块数量较少,为了减少系统的程序量,设计过程中系统的监控程序采用了传统的前后台方式。整个监控程序主要由液晶显示驱动、温度采集和键盘扫描模块组成。程序流程如图所示。系统初始化读取18B20数据液晶显示当前温度系统主程序部分:;*主程序*START:CALL RESETJNB 70h,MAIN1MOV P0,#0C0H ;写入显示起始地址(第二行第一个位置)ACALL ENABLE ;调用写入命令子程序
15、DS18B20_NOT_READY: CALL DISPLAY_18B20_ERRORLOOP1: CALL RESETJNB 70h,MAIN1JMP LOOP1 ;如果栓测不到18b20程序下面不执行MAIN1: MOV P0,#00000001B ;清屏并光标复位ACALL ENABLE;调用写入命令子程序 CALL DISPLAY_WATING ;等待第一次结果.CALL SKIP_ROM CALL TEMP_CONVCALL DELAY_600MS MOV P0,#00000001B ;清屏并光标复位ACALL ENABLE;调用写入命令子程序 MAIN :CALL RESETCAL
16、L SKIP_ROM CALL RECALL_EPROM ;调入温度限值.MAIN_MAIN:CALL READ_TEMP ;读18b20的内部温度JB 70h,DS18B20_NOT_READY ;中途失败!CALL DATA_CONV ; 数据转换CALL DISPLAY_18B20_TEMPCALL DISPLAY_18B20_TEMP_XZ;显示限值.CALL CONTROLJNB KEY_SET,S1JMP MAIN_MAINCONTROL:JNB 03H,CONTROL1LCALL DISPLAY_OFFAJMP CONTROL_ENDCONTROL1:LCALL DISPLAY_
17、ONCONTROL_END:RET S1:LCALL DELAY_2MS ;延时消抖JB KEY_SET,MAINJNB KEY_SET,$LCALL KEY ;有键输入AJMP MAIN当系统上电后,最先执行的就是对系统各个部件进行初始化的代码,其中主要包括对系统内部定时器、LCM驱动、温度感应模块的初始化。系统初始化完成时对温度感应模块进行读取,此时温度感应模块将得到的数据上传至微控制器,微控制器根据得到的数据驱动LCM进行相应的显示,随后微控制器将对系统键盘端口进行扫描,并根据扫描得到的键值进行相应的处理。 统中将按键电路中按键、分别与单片机进行连接,此按键是低电平有效,当有键按下时,与
18、按键相连接的单片机引脚检测到这个信号,然后进行相应的处理后再输出。结 论 设计的系统中包含了温度传感器、微控制器、显示部件、输入部件等部分,微控制器通过对温度传感器进行读取获得当前温度,通过一定的运算后由直观的人机界面显示出来,并可通过键盘对温度进行高温和低温的限值设定。 整个设计系统中充分掌握各模块电路的工作原理,对硬件电路进行设计。本系统用于温度指示实测精度可以达到0.5、功耗小、显示直观。 由于个人在知识面和能力方面还有限,再加上条件的限制,温度采样精度和抗干扰能力等各项技术指标的提高、诸多功能的完善还需要进一步的研究和开发,此外在完成基本功能的基础上,还需要努力提高软件的效率、硬件系统
19、的稳定性、进一步降低系统功耗等。十二、总结与体会通过这次的课程设计,让我对单片机有了进一步的了解、巩固和加深并且对所学知识的得以实际的应用。与我们所学芯片再一次的零距离的接触,也使我们对各个芯片的功能和特性的认识进一步的了解。在此次课程设计中我们同有一组人共同学习、共同设计、共同讨论,共同研究设计的出来的方案,一起动手去对我们设计出来的方案在Altium Desiger和PROTEUS等电路设计软件上进行仿真,遇到困难大家都齐心协力的去解决它,有不懂的地方及时的去请教老师,以至能够更好、更快的去完成我们这次的课程设计。在课程设计的同时也培养了每个人的独立思考问题的能力,也体现出了同学之间的团结
20、精神。在这次的课程设计中我们并不是一帆风顺的,其中也遇到了许多的困难和挫折,也受到了不少的打击,但是我们并没有放弃,我们坚信我们一定会成功的。“失败乃是成功之母”在这次的课程设计让我对这句话有了更深刻的体会。这句话说的很道理,每一次的成功的背后都会有失败在做铺垫。虽然失败了但是我们不能放弃,我们事变了就说明我们有做的不够完善的地方。就要对它进行分析,分析所存在的问题,这样才能够不断的接近的成功的宝塔。在此次智能温度控制器的设计过程中,让我们了解到了现代电子产品的设计和工作原理。以前在实际生活中看到的电子产品,例如:彩灯、交通灯、电磁炉、电饭煲等等,就只是会用它们,并不知道它们的工作原理。通过这
21、次的课程设计就对它们的原理得以了解。同时这次课程设计,让我们的动手能力有了大大的提高,为我们以后的工作和学习奠定的基础。在以后的生活中我们自己也可以利用我们学过的知识和所了解的芯片功能来设计一些日常生活中所需要的电子产品。 这次我们能够顺利的完成设计,是由于同组人的齐心协力和老师的认真教导,但关键的是我们对这次课程设计有一个正确的认识、端正的态度和坚定的信心。以一种设计者的身份投入到其中去设计它完成它。十三、参考文献1 江晓安等编著模拟电子技术西安电子科技大学出版社2 雷思孝 冯育长编著单片机系统设计及工程应用 西安电子科技大学出版社 3 求是科技编著单片机典型模块设计实例导航人民邮电出版社
22、20084 冯育长等编著单片机系统设计与实例分析西安电子科技大学出版社 20075精通PROTEL DXP 2004 SP2电路设计 电子工业出版社 20076 Jean JLabrosse, 邵贝贝等译. 嵌入式实时操作系统uC/OS-II(第二版)M. 北京:北京航空航天大学出版社, 2003.7 周航慈, 吴光文. 基于嵌入式实时操作系统的程序设计技术M. 北京: 北京航空航天大学出版社, 2006. 8 任哲. 嵌入式实时操作系统uC/OS-II原理及应用M. 北京: 北京航空航天大学出版社, 2006. 9 黄志伟编著. 全国大学生电子设计竞赛系统设计M. 北京: 北京航空航天大学出
23、版社, 2006.10 常玉燕, 吕光译. 日本电子电路精选M. 北京: 电子工业出版社, 1990.11 http/12 http/作者简介姓 名:白航飞 性别:男出生年月:1986-08 民族:汉E-mail:jasionben;*;00H:18B20存在标志位,0表示存在,1表示不存在 * ;01H:温度设置标记位,1表示设定高温限值,0表示设定低温限值.*;02H:暂未用,03H:控制器开关标记,0:表示温度低,1表示温度高;注:;每次读写应先reset,然后跳过rom检测,再之后才能向18b20发命令.;注;MOV A,#4EH;应该是先送此条命令然后马上传两个字节的温度数据,中间不
24、能用reset!.不然就出问题;*注:程序编制中遇到2个主要错误:子程序中少写了ret而出现未知错误,;标记位地址与字节地址重叠.;*ORG 00HJMP INPORTORG 0BHORG 30HINPORT:TMP_H EQU 29H ;温度高字节TMP_L EQU 28HRS EQU P2.5;确定具体硬件的连接方式 RW EQU P2.6 ;确定具体硬件的连接方式E EQU P2.7 ;确定具体硬件的连接方式 KEY_SET EQU P2.0 KEY_UP EQU P2.1 KEY_DOWN EQU P2.2DS18B20_FLAG EQU 70hSET_FLAG EQU 01HFLAS
25、H_FLAG EQU 02HK_ON EQU 03HMOV 25H,#0FFH ;位00h-07h全部置1MOV R4,#14MOV TMOD,#01HMOV TL0,#0B0HMOV TH0,#3CHMOV IE,#10000010B ;(8:总控,2:定时0溢出中断控制位)LCD_INIT:MOV R6,#30CALL DELAY_BY_R6 ;15msMOV P0,#38H ;写38hACALL WRITE_NOT_CHECK_BUSY MOV R6,#10CALL DELAY_BY_R6 ;5msMOV P0,#38HACALL WRITE_NOT_CHECK_BUSYMOV R6,#
26、10CALL DELAY_BY_R6 ;5ms;-设转初始值SETB EMOV P0,#00000001B ;清屏并光标复位ACALL ENABLE;调用写入命令子程序 MOV P0,#00111000B ;8位2行5x7点阵 ACALL ENABLE ;调用写入命令子程序 MOV P0,#00001110B ;显示器开、光标开、光标允许闪烁ACALL ENABLE ;调用写入命令子程序MOV P0,#00000110B;文字不动,光标自动右移 ACALL ENABLE ;调用写入命令子程序STORE_DEFINE_DATA: ;把自定义字符存入CGRAMMOV P0,#40H ;CGRAM起
27、始地址ACALL ENABLEMOV R2,#8MOV DPTR,#DEFINE_DATAMOV R3,#0NEXTP:MOV A,R3MOVC A,A+DPTRMOV P0,ACALL WRITE_DATA_TO_LCDINC R3DJNZ R2,NEXTP;*主程序*START:CALL RESETJNB 70h,MAIN1MOV P0,#0C0H ;写入显示起始地址(第二行第一个位置)ACALL ENABLE ;调用写入命令子程序DS18B20_NOT_READY: CALL DISPLAY_18B20_ERRORLOOP1: CALL RESETJNB 70h,MAIN1JMP LOO
28、P1 ;如果栓测不到18b20程序下面不执行MAIN1: MOV P0,#00000001B ;清屏并光标复位ACALL ENABLE;调用写入命令子程序 CALL DISPLAY_WATING ;等待第一次结果.CALL SKIP_ROM CALL TEMP_CONVCALL DELAY_600MS MOV P0,#00000001B ;清屏并光标复位ACALL ENABLE;调用写入命令子程序 MAIN :CALL RESETCALL SKIP_ROM CALL RECALL_EPROM ;调入温度限值.MAIN_MAIN:CALL READ_TEMP ;读18b20的内部温度JB 70h
29、,DS18B20_NOT_READY ;中途失败!CALL DATA_CONV ; 数据转换CALL DISPLAY_18B20_TEMPCALL DISPLAY_18B20_TEMP_XZ;显示限值.CALL CONTROLJNB KEY_SET,S1JMP MAIN_MAINCONTROL:JNB 03H,CONTROL1LCALL DISPLAY_OFFAJMP CONTROL_ENDCONTROL1:LCALL DISPLAY_ONCONTROL_END:RET S1:LCALL DELAY_2MS ;延时消抖JB KEY_SET,MAINJNB KEY_SET,$LCALL KEY
30、;有键输入AJMP MAIN;*键处理程序*KEY: SETB 01HKEY_IN:;有键输入的程序MOV P0,#00000001B ;清屏并光标复位ACALL ENABLE;调用写入命令子程序JNB 01H,DSP_SET_L ;01如果是0,则显示L:DSP_SET_H: ;显示高温的限值MOV P0,#10000000BACALL DISPLAY_SETING_TEMP_H ;显示SETING_TEMP:H .MOV DPTR,#LED_DATAMOV R1,42H ;码表初值MOV R0,#1;字数CALL DISPLAY;-显示温度限值低位MOV DPTR,#LED_DATAMOV
31、 R1,41H ;码表初值MOV R0,#1;字数CALL DISPLAY;-显示温度限值低位MOV DPTR,#LED_DATAMOV R1,40H ;码表初值MOV R0,#1;字数CALL DISPLAYAJMP KEY_SELECTDSP_SET_L:;显示低温的限值MOV P0,#10000000BACALL DISPLAY_SETING_TEMP_L ;显示SETING_TEMP:L .MOV DPTR,#LED_DATAMOV R1,45H ;码表初值MOV R0,#1;字数CALL DISPLAY;-显示温度限值低位MOV DPTR,#LED_DATAMOV R1,44H ;码
32、表初值MOV R0,#1;字数CALL DISPLAY;-显示温度限值低位MOV DPTR,#LED_DATAMOV R1,43H ;码表初值MOV R0,#1;字数CALL DISPLAYAJMP KEY_SELECT KEY_SELECT:JNB KEY_SET,K_SETJNB KEY_UP,K_UPJNB KEY_DOWN,K_DOWNAJMP KEY_SELECT K_SET:LCALL DELAY_2MSlcall delay_2mslcall delay_2msJB KEY_SET,KEY_SELECT MOV R5,#250KSET_LOOP:JB KEY_SET,KEY_CP
33、LLCALL DELAY_2MSLCALL DELAY_2MSDJNZ R5,KSET_LOOPAJMP EXT_KEYK_UP:LCALL DELAY_2MSlcall delay_2msJB KEY_UP,KEY_SELECTJNB 01H,K_UP_LOWK_UP_HIGH:JNB KEY_UP,$MOV A,2AHINC A MOV 2AH,AJMP K_UP_DOWN_ENDK_UP_LOW:JNB KEY_UP,$MOV A,2BHINC A MOV 2BH,AJMP K_UP_DOWN_END;*K_DOWN:LCALL DELAY_2MSJB KEY_DOWN,KEY_SELE
34、CTJNB 01H,K_DOWN_LOWK_DOWN_HIGH:JNB KEY_DOWN,$MOV A,2AHDEC A MOV 2AH,AJMP K_UP_DOWN_ENDK_DOWN_LOW:JNB KEY_DOWN,$MOV A,2BHDEC A MOV 2BH,AK_UP_DOWN_END:MOV A,2AHMOV B,#10DIV ABMOV 40H,B ;高温限值个位 MOV B,#10DIV ABMOV 41H,B;十位MOV 42H,A;百位;-MOV A,2BHMOV B,#10DIV ABMOV 43H,B ;低温限值位个位 MOV B,#10DIV ABMOV 44H,B
35、 ;十位MOV 45H,A ;百位AJMP KEY_IN KEY_CPL:CPL 01HAJMP KEY_INEXT_KEY:MOV P0,#00000001B ;清屏并光标复位CALL ENABLE;调用写入命令子程序CALL DISPLAY_SAVECALL SKIP_ROMMOV A,#4EHCALL WRITEMOV A,2AH ;2A数据送高温限值寄存器.CALLWRITEMOV A,2BH ;2B数据送低温限什寄存器.CALL WRITECALL RESET CALL SKIP_ROMMOV A,#48H ;将高低温限值寄存器数据送18B20-EPROM保存.CALL WRITEA
36、_END:RET;*18b20指令子程序*READ_TEMP: ;读1820内部温度子程序. CALL RESET JB 70h,EXT1 CALL SKIP_ROM CALL TEMP_CONV ;温度AD变换 CALL DELAY_600MS ;时. CALL RESET CALL SKIP_ROM CALL TEMP_GET ;发取温度的命令 CALL READ ;接收.EXT1: RET SKIP_ROM:;跳过ROM检测 MOV A,#0CCH ;#0CCH为跳过rom命令 CALL WRITE RET RECALL_EPROM:;重调Eprom MOV A,#0B8H CALL W
37、RITE RET TEMP_CONV: MOV A,#44H ;AD变换CALL WRITERETTEMP_GET: MOV A ,#0BEH;读18b20命令 CALL WRITE RET ;*18B20基本时序子程序*RESET: ;初始化子程序 SETB P1.0 NOP CLR P1.0 ;拉低 MOV R3,#150 ; *4=600US CALL DELAY_BY_R3 SETB P1.0 ;拉高 MOV R3,#15 ; 60US CALL DELAY_BY_R3 MOV R3,#60 ;4个周期*60=240US内检测 A1: JNB P1.0,A2 ;检测到低平信号 DJNZ
38、 R3,A1 ;如果没有应答的低电平信号,返回A1重新检测,超时后下一行, SETB 70h ;DS1820不存在. JMP A3A2:CLR 70h MOV R3,120;240US;等恢复时间2*120=240us DJNZ R3, $A3: RET;-WRITE: MOV R2,#8;一个字节为8位 CLR C ;C位清0 C位用来放A的一位数据,用移位的方法放入CB1: SETB P1.0NOP CLR P1.0MOV R3,#4 ;16USCALL DELAY_BY_R3RRC A ;把A中的数送入CMOV P1.0,C ;把C送入总线 MOV R3,#12 ;48US(一位数据的发送:60ustx120us)CALL DELAY_BY_R3SETB P1.0 ;拉高1us结束一位NOP DJNZ R2,B1 RETREAD:MOV R1,#4 ;接收4个字节数据依次是1.低位 2.高位. 3.高限 4.低限MOV R0,#28H;低位放28H;高位放29h (1. 28H,2. 29H 3. 2AH 4. 2BH )C0: MOV R2,#8;一字节数据8位C1:CLR C ;清除CSETB P1.0NOP NOP CLR P1.0 ;拉低.NOP ;1us秒后拉高?SETB P1.0MOV R3,#4 ;16us后采数据CALLDELAY_BY_R3