数字温度传感器18b20编程_第1页
数字温度传感器18b20编程_第2页
数字温度传感器18b20编程_第3页
数字温度传感器18b20编程_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ds18b20 汇编程序:本汇编程序仅适合单个 DS18B20 和 51 单片机的连接,晶振为 12MHZ 左右DQ:DS18B20 的数据总线接脚FLAG1:标志位,为“1“时表示检测到 DS18B20TEMPER_NUM:保存读出的温度数据TEMPER_LEQU36HTEMPER_HEQU35H DQBITP1.7; DS18B20 初始化汇编程序;/*/INIT_1820:SETBDQNOPCLRDQMOVR0,#06BHTSR1:DJNZR0,TSR1; 延时SETBDQMOVR0,#25HTSR2:JNBDQ,TSR3DJNZR0,TSR2LJMPTSR4; 延时TSR3:SETBFLAG1; 置标志位,表示 DS1820 存在LJMPTSR5TSR4:CLRFLAG1; 清标志位,表示 DS1820 不存在LJMPTSR7TSR5:MOVR0,#06BHTSR6:DJNZR0,TSR6; 延时TSR7:SETBDQRET;/*/; 重新写 DS18B20 暂存存储器设定值;/*/RE_CONFIG:JBFLAG1,RE_CONFIG1; 若 DS18B20 存在,转 RE_CONFIG1RETRE_CONFIG1:MOVA,#0CCH; 发 SKIP ROM 命令LCALLWRITE_1820MOVA,#4EH; 发写暂存存储器命令LCALLWRITE_1820MOVA,#00H; TH(报警上限) 中写入 00HLCALLWRITE_1820MOVA,#00H; TL(报警下限)中写入 00HLCALLWRITE_1820MOVA,#1FH; 选择 9 位温度分辨率LCALLWRITE_1820RET;/*/; 读出转换后的温度值;/*/GET_TEMPER:SETBDQ; 定时入口LCALLINIT_1820JBFLAG1,TSS2RET; 若 DS18B20 不存在则返回TSS2:MOVA,#0CCH; 跳过 ROM 匹配LCALLWRITE_1820MOVA,#44H; 发出温度转换命令LCALLWRITE_1820LCALLINIT_1820MOVA,#0CCH; 跳过 ROM 匹配LCALLWRITE_1820MOVA,#0BEH; 发出读温度命令LCALLWRITE_1820LCALLREAD_1820MOVTEMPER_NUM,A; 将读出的温度数据保存RET;/*/; 读 DS18B20 的程序 ,从 DS18B20 中读出一个字节的数据;/*/READ_1820:MOVR2,#8RE1:CLRCSETBDQNOPNOPCLRDQNOPNOPNOPSETBDQMOVR3,#7DJNZR3,$MOVC,DQMOVR3,#23DJNZR3,$RRCADJNZR2,RE1RET;/*/; 写 DS18B20 的程序;/*/WRITE_1820:MOVR2,#8CLRCWR1:CLRDQMOVR3,#6DJNZR3,$RRCAMOVDQ,CMOVR3,#23DJNZR3,$SETBDQNOPDJNZR2,WR1SETBDQRET;/*/; 读 DS18B20 的程序 ,从 DS18B20 中读出两个字节的温度数据;/*/READ_18200:MOVR4,#2; 将温度高位和低位从 DS18B20 中读出MOVR1,#36H; 低位存入 36H(TEMPER_L),高位存入 35H(TEMPER_H)RE00:MOVR2,#8RE01:CLRCSETBDQNOPNOPCLRDQNOPNOPNOPSETBDQMOVR3,#7DJNZR3,$MOVC,DQMOVR3,#23DJNZR3,$RRCADJNZR2,RE01MOVR1,ADECR1DJNZR4,RE00RET;/*/; 将从 DS18B20 中读出的温度数据进行转换;/*/TEMPER_COV:MOVA,#0F0HANLA,TEMPER_L; 舍去温度低位中小数点后的四位温度数值SWAPAMOVTEMPER_NUM,AMOVA,TEMPER_LJNBACC.3,TEMPER_COV1; 四舍五入去温度值INCTEMPER_NUMTEMPER_COV1:MOVA,TEMPER_HANLA,#07HSWAPAORLA,TEMPER_NUMMOVTEMPER_NUM,A; 保存变换后的温度数据LCALLBIN_BCDRET;/*/; 将 16 进制的温度数据转换成压缩 BCD 码;/*/BIN_BCD:MOVDPTR,#TEMP_TABMOVA,TEMPER_NUMMOVCA,A+DPTRMOVTEMPER_NUM,ARETTEMP_TAB:DB00H,01H,02H,03H,04H,05H,06H,07HDB08H,09H,10H,11H,12H,13H,14H,15HDB16H,17H,18H,19H,20H,21H,22H,23HDB24H,25H,26H,27H,28H,29H,30H,31HDB32H,33H,34H,35H,36H,37H,38H,39HDB40H,41H,42H,43H,44H,45H,46H,47HDB48H,49H,50H,51H,52H,53H,54H,55HDB56H,57H,58H,59H,60H,61H,62H,63HDB64H,65H,66H,67H,68H,69H,70H;/*/下面还介绍一个 ds18b20 汇编程序;*FLAG1 BIT F0 ;DS18B20 存在标志位DQ BIT P1.7TEMPER_L EQU 29HTEMPER_H EQU 28HA_BIT EQU 35HB_BIT EQU 36H;*ds18b20 汇编程序起始 *ORG 0000HAJMP MAINORG 0100H;*主程序开始*MAIN:LCALL INIT_18B20;LCALL RE_CONFIGLCALL GET_TEMPERAJMP CHANGE;*DS18B20 复位程序*INIT_18B20: SETB DQNOPCLR DQMOV R0,#0FBHTSR1: DJNZ R0,TSR1 ;延时SETB DQMOV R0,#25HTSR2: JNB DQ ,TSR3DJNZ R0,TSR2TSR3: SETB FLAG1 ;置标志位,表明 DS18B20 存在CLR P2.0 ;二极管指示AJMP TSR5TSR4: CLR FLAG1LJMP TSR7TSR5: MOV R0,#06BHTSR6: DJNZ R0,TSR6TSR7:SETB DQ ;表明不存在RET;*设定 DS18B20 暂存器设定值*;RE_CONFIG:;JB FLAG1,RE_CONFIG1;RET;RE_CONFIG1: MOV A,#0CCH ;放跳过 ROM 命令;LCALL WRITE_18B20;MOV A,#4EH;LCALL WRITE_18B20 ;写暂存器命令;MOV A,#00H ;报警上限中写入 00H;LCALL WRITE_18B20;MOV A,#00H ;报警下限中写入 00H; LCALL WRITE_18B20;MOV A,#1FH ;选择九位温度分辨率; LCALL WRITE_18B20; RET;*读转换后的温度值*GET_TEMPER:SETB DQLCALL INIT_18B20JB FLAG1,TSS2RET ;若不存在则返回TSS2: MOV A,#0CCH ;跳过 ROMLCALL WRITE_18B20MOV A,#44H ;发出温度转换命令LCALL WRITE_18B20LCALL DISPLAY ;延时LCALL INIT_18B20MOV A,#0CCH ;跳过 ROMLCALL WRITE_18B20MOV A,#0BEH ;发出读温度换命令LCALL WRITE_18B20LCALL READ2_18B20 ;读两个字节的温度RET;*写 ds18b20 汇编程序*WRITE_18B20:MOV R2,#8CLR CWR1:CLR DQMOV R3,#6DJNZ R3,$RRC AMOV DQ,CMOV R3,#23DJNZ R3,$SETB DQNOPDJNZ R2,WR1SETB DQRET;*读 18B20 程序,读出两个字节的温度 *READ2_18B20:MOV R4,#2 ;低位存在 29 H,高位存在 28HMOV R1,#29HRE00: MOV R2,#8RE01: CLR CSETB CNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE01MOV R1,ADEC R1DJNZ R4,RE00RET;*读出的温度进行数据转换*CHANGE: MOV A,29HMOV C,28H.0 ;将 28H 中的最低位移入 CRRC AMOV C,28H.1RRC AMOV C,28H.2RRC AMOV C,28H.3RRC AMOV 29H,A;setb p2.0LCALL DISPLAY ;调用数码管显示子程序; setb P2.0LJMP MAIN;*DISPLAY*DISPLAY: mov a,29H;将 29H 中的十六进制数转换成 10 进制mov b,#10 ;10 进制/10=10 进制div abmov b_bit,a ;十位在 amov a_bit,b ;个位在 bmov dptr,#TAB ;指定查表启始地址mov r0,#4dpl1: mov r1,#250 ;显示 1000 次dplop: mov a,a_bit ;取个位数MOVC A,A+DPTR ;查个位数的 7 段代码mov p0,a ;送出个位的 7 段代码clr p2.5;开个位显示acall d1ms ;显示 1mssetb p2.5mov a,b_bit ;取十位数MOVC A,A+DPTR ;查十位数的 7 段代码

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论