利用汇编语言实现基于DS18B20的单片机温度测控范文Word文档格式.docx

上传人:聆听****声音 文档编号:956911 上传时间:2023-04-29 格式:DOCX 页数:7 大小:15.60KB
下载 相关 举报
利用汇编语言实现基于DS18B20的单片机温度测控范文Word文档格式.docx_第1页
第1页 / 共7页
利用汇编语言实现基于DS18B20的单片机温度测控范文Word文档格式.docx_第2页
第2页 / 共7页
利用汇编语言实现基于DS18B20的单片机温度测控范文Word文档格式.docx_第3页
第3页 / 共7页
利用汇编语言实现基于DS18B20的单片机温度测控范文Word文档格式.docx_第4页
第4页 / 共7页
利用汇编语言实现基于DS18B20的单片机温度测控范文Word文档格式.docx_第5页
第5页 / 共7页
利用汇编语言实现基于DS18B20的单片机温度测控范文Word文档格式.docx_第6页
第6页 / 共7页
利用汇编语言实现基于DS18B20的单片机温度测控范文Word文档格式.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

利用汇编语言实现基于DS18B20的单片机温度测控范文Word文档格式.docx

《利用汇编语言实现基于DS18B20的单片机温度测控范文Word文档格式.docx》由会员分享,可在线阅读,更多相关《利用汇编语言实现基于DS18B20的单片机温度测控范文Word文档格式.docx(7页珍藏版)》请在冰点文库上搜索。

利用汇编语言实现基于DS18B20的单片机温度测控范文Word文档格式.docx

PS0 BITP2.4;

数码管小数点后第1位PS1 BITP2.5;

数码管个位

PS2 BITP2.6;

数码管十位

PS3 BITP2.7;

数码管百位

进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度

显示范围00到99度,显示精度为1度

因为12位转化时每一位的精度为0.0625度,我们不要求显示小数,所以可以抛弃

第7页

TEMPER_L的

个字节就是



低4位,将TEMPER_H中的低4位移入TEMPER_L中的高4位,这样获得一个新字节,这

实际测量获得的温度这个转化温度的方法非常简洁无需乘于0.0625系数ORG0000H

SJMPMAINORG0030H

MAIN:

MOVSP,#60H

MOVSCON,#50H;

设置成串口1方式

MOVTMOD,#20H;

波特率发生器T1工作在模式2上

MOVTH1,#0FDH;

预置初值(按照波特率9600BPS预置初值)MOVTL1,#0FDH;

预置初值(按照波特率9600BPS预置初值)

ORL PCON,#80H;

波特率加倍

SETBTR1;

启动定时器T1

LOOP:

ACALLGET_TEMPER;

调用读温度子程序MOVR3,TEMPER_H

MOVR4,TEMPER_L

MOVR7,#5 ;

乘以5再除以8等与乘以0.625ACALLNMUL21

MOVR7,#8ACALLNDIV31MOVTEMP_L,R4MOVTEMP_H,R3MOVA,R3

MOVR2,AMOVA,R4MOVR3,A

ACALLHTD;

转换成十进制

MOVA,R6ANLA,#0FH

MOVA_BYTE,AMOVA,R6SWAPA

ANLA,#0FHMOVB_BYTE,AMOVA,R5

ANLA,#0FHMOVC_BYTE,A

ACALLSEND;

调用串口显示子程序

ACALLDISPLAY;

调用数码管显示子程序

SETB

C;

判断温度>

500(>

50度)

MOV

A,R6

SUBB

A,#0

A,R5

A,#05H

JC

C0014

CLR

JDQ1

JDQ2

SJMP

LOOP

C0014:

C

A,#3H

JNC

C0025

C0025:

INIT_1820:

SETBDQ

这是DS18B20复位初始化子程序

NOP

CLRDQ

MOVR1,#3;

主机发出延时537微秒的复位低脉冲TSR1:

MOVR0,#107

DJNZR0,$DJNZR1,TSR1

SETBDQ;

然后拉高数据线

NOPNOPNOP

MOVR0,#25H

TSR2:

JNBDQ,TSR3;

等待DS18B20回应

DJNZR0,TSR2AJMPTSR4;

延时

TSR3:

SETBFLAG1;

置标志位,表示DS1820存在

AJMPTSR5

TSR4:

CLRFLAG1;

清标志位,表示DS1820不存在

AJMPTSR7

TSR5:

MOVR0,#117

TSR6:

DJNZR0,TSR6;

时序要求延时一段时间

TSR7:

SETBDQRET

GET_TEMPER:

SETBDQ;

读出转换后的温度值

LCALLINIT_1820;

先复位DS18B20JBFLAG1,TSS2

RET;

判断DS1820是否存在?

若DS18B20不存在则返回

TSS2:

MOVA,#0CCH;

跳过ROM匹配

ACALLWRITE_1820

MOVA,#44H;

发出温度转换命令

ACALLDISPLAY ;

这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12

位的话750微秒

ACALLINIT_1820;

准备读温度前先复位

MOVA,#0CCH;

MOVA,#0BEH;

发出读温度命令

ACALLREAD_18200;

将读出的温度数据保存到TEMPER_L/TEMPER_HRET

WRITE_1820:

MOVR2,#8;

写DS18B20的子程序(有具体的时序要求),一共8位数据CLRC

WR1:

CLRDQMOVR3,#5DJNZR3,$RRCAMOVDQ,C

MOVR3,#21DJNZR3,$SETBDQNOP

DJNZR2,WR1SETBDQRET

READ_18200:

MOVR4,#2;

读DS18B20的程序,从DS18B20中读出两个字节的温度数据,将温度高位

和低位从DS18B20中读出

MOVR1,#TEMPER_L;

低位存入TEMPER_L,高位存入TEMPER_HRE00:

MOVR2,#8;

数据一共有8位

RE01:

CLRCSETBDQNOPNOPCLRDQNOPNOPNOPSETBDQ

MOVR3,#8

RE10:

DJNZR3,RE10MOVC,DQMOVR3,#21

RE20:

DJNZR3,RE20RRCA

DJNZR2,RE01MOV@R1,ADECR1

DJNZR4,RE00RET

----------------------

串口发送数据子程序

----------------------SEND:

CLRTI

MOVA,TEMP_HMOVSBUF,AJNBTI,$

CLRTI

MOVA,TEMP_LMOVSBUF,AJNBTI,$

RET

DISPLAY:

MOVDPTR,#NUMTAB;

指定查表启始地址MOVR0,#4

DPL1:

MOVR1,#250;

显示1000次

DPLOP:

mova,A_BYTE;

取小数点后第1位数MOVCA,@A+DPTR;

查个位数的7段代码movp0,a;

送出个位的7段代码

CLRPS0SETBPS1SETBPS2SETBPS3

acalld1ms;

显示1ms

mova,B_BYTE;

取个位数

MOVCA,@A+DPTR;

查十位数的7段代码ORLA,#01H

movp0,a;

送出十位的7段代码SETBPS0

CLRPS1

mova,C_BYTE;

取十位数

查十位数的7段代码movp0,a;

送出十位的7段代码

SETBPS1CLRPS2

SETBPS2

djnzr1,dplop;

100次没完循环djnzr0,dpl1;

4个100次没完循环ret

单字节无符号数乘法程序(R3R4*R7)=(R2R3R4)

入口:

R3,R4,R7

占用资源:

ACC,B

堆栈需求:

2字节

出口:

R2,R3,R4

NMUL21:

MOVA,R4

MOVB,R7MULABMOVR4,AMOVA,BXCHA,R3MOVB,R7MULABADDA,R3MOVR3,ACLRAADDCA,BMOVR2,ACLROVRET

单字节无符号除法程序(R2R3R4/R7)=(R2)R3R4余数R7

R2,R3,R4,R7

ACC,B,F0

3字节

(R2),R3,R4,R7,OV

NDIV31:

MOVA,R2

MOVB,R7

DIVAB

PUSHACC

MOVR2,B

MOVB,#10H

NDV311:

CLRC

MOVA,R4

RLCA

MOVR4,A

MOVA,R3

MOVR3,A

MOVR2,A

MOVF0,C

SUBBA,R7

JBF0,NDV312

JCNDV313

NDV312:

INCR4

NDV313:

DJNZB,NDV311

POPACC

CLROV

JZNDV314

SETBOV

NDV314:

XCHA,R2

MOVR7,A

HTD:

CLR A

R2和R3是程序数据入口

MOV R4,A

转换后的数放在R4,R5,R6

MOV R5,A

转换完后在分别屏蔽高位和低位取出数据

MOV R6,A

MOV R7,#10H

ZH:

CLR C

MOV A,R3

RLC A

MOV R3,A

MOV A,R2

MOV R2,A

MOV A,R6

ADDC A,R6

DA A

MOV A,R5

ADDC A,R5

MOV A,R4

ADDC A,R4

DJNZ R7,ZHRET

D1MS:

MOVR7,#80;

1MS延时

DJNZR7,$RET

实验板上的7段数码管0~9数字的共阴显示代码

numtab:

DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H;

END

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2