DS18b20 51汇编源程序.doc_第1页
DS18b20 51汇编源程序.doc_第2页
DS18b20 51汇编源程序.doc_第3页
DS18b20 51汇编源程序.doc_第4页
DS18b20 51汇编源程序.doc_第5页
全文预览已结束

下载本文档

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

文档简介

DS18b20 51汇编源程序 ;DS18b20 51汇编源程序 (古桥下单片机调试中);* FLAG1 BIT F0 ;DS18B20存在标志位 DQ BIT P3.4 ;DS18B20占用的总线 TEMPER_L EQU 29H TEMPER_H EQU 28H ROM1 EQU 2AH ROM2 EQU 2BH ROM3 EQU 2CH ROM4 EQU 2DH ROM5 EQU 2EH ROM6 EQU 2FH ROM7 EQU 30H ROM8 EQU 31H A_BIT EQU 35H B_BIT EQU 36H ;*程序起始* ORG 0000H;*;串口定义 调试用;* ;串行通信common: mov tmod,#20h ;定时器1,形式2 mov th1,#098h ;定时器1计数初值 300bate/s 12MHZ mov tl1,#0F2h ;定时器1计数初值 mov scon,#50h ;串口方式1,允许接收 mov 87h,#00h ;PCON设置(将SMOD置0,使波特率不加倍) setb tr1 ;启动计时;* AJMP MAIN ORG 0100H;*主程序开始*MAIN: LCALL INIT_18B20 ;复位程序 ;LCALL RE_CONFIG ;设定DS18B20暂存器设定 LCALL GET_TEMPER ;读转换后的温度 AJMP CHANGE;*DS18B20复位程序*INIT_18B20: ;SETB DQ ;DS18B20占用的总线 yf ;NOP CLR P1.0 ;二极管指示用于观察调试yf yf CLR DQ ;DS18B20占用的总线 MOV R0,#0FBH TSR1: DJNZ R0,TSR1 ;延时 SETB DQ MOV R0,#25H TSR2: ;JNB DQ ,TSR3 ;延时 yf DJNZ R0,TSR2 TSR3: SETB FLAG1 ;置标志位,表明DS18B20存在 ;AJMP TSR5 yf ;TSR4: CLR FLAG1 yf ;LJMP TSR7 yf TSR5: MOV R0,#06BH ;yf延时 TSR6: DJNZ R0,TSR6 ;TSR7: SETB DQ ;表明不存在 yf SETB P1.0 ;二极管指示用于观察调试yf 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 DQ LCALL INIT_18B20 ;yf复位 JB FLAG1,TSS2 ;yf若FLAG1位为1则跳转 RET ;若不存在则返回TSS2: MOV A,#033H ;读ROM LCALL WRITE_18B20 MOV A,#44H ;发出温度转换命令 LCALL WRITE_18B20 LCALL DISPLAY ;延时 LCALL INIT_18B20 MOV A,#0CCH ;跳过ROM LCALL WRITE_18B20 MOV A,#0BEH ;发出读温度换命令 LCALL WRITE_18B20 LCALL READ2_18B20 ;读两个字节的温度 RET ;*写DS18B20命令程序* WRITE_18B20: MOV R2,#8 CLR C WR1: CLR DQ MOV R3,#6 ;yf延时 DJNZ R3,$ RRC A ;yf带进位右移 MOV DQ,C ;yf象总线写一位数 MOV R3,#23 ;yf延时 DJNZ R3,$ SETB DQ NOP DJNZ R2,WR1 ;yf判断8位是否发完 SETB DQ RET ;*读18B20程序,读出两个字节的温度* READ2_18B20:CLR P1.1 ;二极管指示用于观察调试yf MOV R4,#2 ;给2字节数,低位存在29 H,高位存在28H MOV R1,#29H ;yf给地址初值 RE00: MOV R2,#8 ;yf给R2给一字节循环数 RE01: CLR C SETB C NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#7 ;yf延时 DJNZ R3,$ MOV C,DQ ;yf将读得的数传给C MOV R3,#23 ;yf延时 DJNZ R3,$ RRC A ;yf右移一位,移位8次后A中的值即为所采得的数值 DJNZ R2,RE01 ;yf一字节数采集够 MOV R1,A ;yf将累加器值存入间接地址 ;* ;mov sbuf,a ;将29H单元采集的数据传到串口用于调试yf ;jnb ti,$ ;clr ti ;* DEC R1 ;yf地址减1 DJNZ R4,RE00 ;yf第一字节采集完后采集第二字节 SETB P1.1 ;二极管指示用于观察调试yf RET ;*读出的温度进行数据转换*CHANGE: MOV A,29H MOV C,28H.0 ;将28H中的最低位移入C RRC A MOV C,28H.1 RRC A MOV C,28H.2 RRC A MOV C,28H.3 RRC A MOV 29H,A LCALL DISPLAY ;调用数码管显示子程序 LJMP MAIN ;*DISPLAY* DISPLAY: mov a,29H ;将29H中的十六进制数转换成10进制 mov b,#10 ;待转换的数/10=10进制 div ab mov b_bit,a ;十位在a mov a_bit,b ;个位在b mov dptr,#TAB ;指定查表启始地址 mov r0,#4 dpl1: mov r1,#250 ;显示1000次 dplop: mov a,a_bit ;取个位数 MOVC A,A+DPTR ;查个位数的7段代码 mov p0,a ;送出个位的7段代码 clr p2.5 ;开个位显示 acall d1ms ;显示1ms setb p2.5 mov a,b_bit ;取十位数 MOVC A,A+DPTR ;查十位数的7段代码 mov p0,a ;送出十位的7段代码 clr p2.4 ;开十位显示 acall d1ms ;显示1ms setb p2.4 djnz r1,dplo

温馨提示

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

评论

0/150

提交评论