温控及pwm的程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ORG 00H

LJMP START

ORG 100H

START: ;;-----初始化

MOV SP,#60H ;;初始化堆栈指针

Set18B20:;;-----DS18B20初始化

;;DS18B20复位

ACALL Reset

JB RFail,LOOP ;;复位失败则直接跳至显示部分

;;对DS18B20发出Skip ROM命令

MOV A,#0CCH

ACALL Write

;;对DS18B20发出温度转换命令

MOV A,#44H

ACALL Write

SetDisT:MOV DisTime,#3 ;;设置下一个循环体的循环8次

LOOP:

ACALL Display ;;显示

JB RFail,Set18B20 ;;DS18B20复位失败时,在显示完一次后重新复位DJNZ DisTime,LOOP

JNB DS18B20,$ ;;判断DS18B20是否已完成温度转换

ACALL GetTemp ;;从DS18B20读出温度值

ACALL DealTemp ;;温度值处理

ACALL SendDisDT ;;根据当前系统状态设置显示内容

SJMP SetDisT ;;;;;;;

;;根据当前状态给显示模块设置显示参数

SendDisDT:

MOV Dian,#7FH ;;最高位为0代表显示小数点

;;传送温度值

MOV A,TempH ;;送高位数据

MOV VAR,TempL ;;送低位数据

ACALL TransData

RET

;;A中保存高位值,Var中保存低位值

TransData:

;;取个位值

MOV B,#10

DIV AB

MOV DisData2,B

;;取十位值

JZ HavNot1 ;;判断商是否为0

DIV AB

MOV DisData3,B

JZ HavNot2 ;;判断商是否为0

MOV DisData4,A

SJMP XiaoShu ;;跳至百位符号处理部分

HavNot1:MOV DisData3,#10 ;;十位开始没有数字

HavNot2:MOV DisData4,#10 ;;百位开始没有数字

SignJudge:;;符号处理部分

JNB VAR.7,XiaoShu ;;当为负数显示符号

MOV A,#10

CJNE A,DisData3,BWSign

MOV DisData3,#11 ;;负号在十位

SJMP XiaoShu

BWSign:MOV DisData4,#11 ;;负号在百位

XiaoShu:;;小数处理部分,用查表法获取小数值,精确到小数点后1位

MOV A,VAR

ANL A,#0FH

MOV DPTR,#XSTab

MOVC A,@A+DPTR

MOV DisData1,A

RTransTemp:

RET

XSTab: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9

DS18B20通迅模块组

-------复位模块

Reset: ;;3微秒高电平

SETB DS18B20

MOV R7,#250

CLR RFail ;;清0复位失败标记

CLR DS18B20

;;延迟501uS

DJNZ R7,$

SETB DS18B20 ;;释放总线(拉高数据线)

;;等待DS18B20作出复位成功反应,最大等待时间为69uS

MOV R7,#17

Wait:

JNB DS18B20,RReset ;;若DS18B20在作出复位成功反应,不再等待DJNZ R7,Wait

SETB RFail ;;70uS内DS18B20作出复位成功反应,置1复位失败标记RReset:

;;延迟350Us

DJNZ R7,$

SETB DS18B20

RET

/

;;-------向DS18B20写一个字的模块,要写的内容提前装入ACC中Write:

MOV R6,#8 ;写8位

WriteBit:

;;2微秒高电平

SETB DS18B20

MOV R7,#3

;;7微秒低电平

CLR DS18B20

DJNZ R7,$

;;ACC低位送至DS18B20

RRC A

MOV DS18B20,C

;;延迟60Us

MOV R7,#28

DJNZ R7,$

;;是否已写完8位

DJNZ R6,WriteBit

RWrite:

SETB DS18B20

RET

; /

;;-------从DS18B20读回一个字节的内容,读回的内容装入ACC中Read:

MOV R6,#8 ;;读回8位

MOV A,#0 ;;读回的内容装入ACC中

ReadBit:

;;2微秒高电平

SETB DS18B20

MOV R7,#7

;;2微秒低电平

CLR DS18B20

NOP

;;16微秒高电平

SETB DS18B20

DJNZ R7,$

;;读回一位数据放入ACC中

相关文档
最新文档