数字温度计(4)

2019-03-22 23:38

POP DX POP CX CALL W_L

;0->PC0

ROR AL,1

;把最

POP AX

RET

Delay501us ENDP

Delay50us PROC NEAR

PUSH AX PUSH CX PUSH

DX

MOV CX,12

MOV DX,PA_8255

Delay50us_1: IN AL,DX

LOOP Delay50us_1

POP DX POP CX POP AX

RET

Delay50us ENDP ;写操作

WRITE_18B20 PROC NEAR

MOV CX,8

;一共8

位数据 WRI:

低位移到cf 和最高位

JNB WRI1

;if(ch==0) jmp

CALL W_H

;1->PC0 WRI2:

CALL Delay50us CALL W_H LOOP WRI

RET

WRI1:

PUSH

CX

存CX,恢复CX POP CX

JMP WRI2

WRITE_18B20 ENDP ;读操作

READ_18B20 PROC NEAR

MOV

CX,8

据一共有8位 Read: CALL

Delay50us

MOV DX,Con_8255

;8255控制口地址->DX

MOV AL,80H

15

;; OUT DX,AL ;0->PC0 MOV AL,89H

OUT DX,AL

;PC口

输入状态

MOV DX,PC_8255

;8255PC口地址->DX IN AL,DX ROR AL,1 RCR BL,1

;cf ror

MOV DX,Con_8255

;8255控制口地址->DX MOV AL,80H

OUT DX,AL

;0->PC0 MOV AL,01H

OUT DX,AL

;1->PC0 LOOP

Read

MOV AL,BL

RET

READ_18B20 ENDP

;******************************

; 判断DS18B20是否存在,启动DS18B20

;CY为判断标志

;******************************

START_Temperature:

CALL INIT_18B20

;先

复位DS18B20

JB GET_T

;判断

DS1820是否存在?若DS18B20不存在则返回

MOV

AL,0CCH

;跳过ROM匹配 CALL WRITE_18B20

MOV

AL,44H

;发出温度转换命令 CALL WRITE_18B20

CLC

GET_T:

RET

;******************************

; 读出转换后的温度值,存在AX ;*****************************

*

RD_Temperature:

CALL INIT_18B20

;准备读温度前先复位

MOV

AL,0CCH

;跳过ROM匹配 CALL WRITE_18B20

MOV

AL,0BEH

;发

出读温度命令 CALL WRITE_18B20

CALL

READ_18B20

;调

用读18B20子程序,读出温度

16

到AX

MOV AH,AL ;存放 RET

ENDP

W_L

CALL

READ_18B20

;调用读18B20子程序

XCHG

AL,AH

读低8位再读高8位 RET

Init8255 PROC NEAR

MOV DX,Con_8255

;8255的控制口-> DX MOV AL,89H OUT DX,AL DEC DX

RET

Init8255 ENDP ;写 0 W_L PROC

NEAR

PUSH AX

存AX

MOV DX,Con_8255

;8255的控制口-> DX

MOV AL,80H

;80H->AL

OUT DX,AL

;AL->[DX](0->PC0口) POP AX

复AX

;先

;保

;恢

17

;写 1 W_H PROC NEAR

PUSH AX

;保

存AX

MOV DX,Con_8255

;8255的控制口-> DX

MOV AL,01H

;01H->AL

OUT

DX,AL

;AL->[DX](1->PC0口) POP AX

;恢复

AX

RET

W_H ENDP

;*************************** ;向8255写入显示的数

;*************************** displayNumber proc

near

;向8255写入显示的数

mov si,ax push ax

push bx

T1: mov ax,si

push cx mov dx,PA_8255 call bl10 and ax,000fh mul bl mov bl,16

div bl;al为显示的数值0-9 call

convert

out dx,al mov dx,PB_8255 mov al,11111110b out dx,al IDIE:

mov al,0FFH

out dx,al mov ax,si mov dx,PA_8255 call YDR call bl10 div bl xchg al,ah call

convert1

out dx,al mov dx,PB_8255 mov al,11111101b out dx,al IDIE1:

mov al,0FFH

out dx,al mov ax,si mov dx,PA_8255 call YDR call bl10 div bl and ah,00h div bl jmp qqq2 qqq1: jmp t1 qqq2: xchg al,ah call

convert

out dx,al mov dx,PB_8255 mov al,11111011b out dx,al IDIE2:

mov al,0FFH

out dx,al mov ax,si mov dx,PA_8255 call YDR call bl10 div bl

18

and ah,00h div bl call

convert

out dx,al mov dx,PB_8255 mov al,11110111b out dx,al IDIE3:

mov al,0FFH out dx,al pop cx loop qqq1 pop bx pop ax ret displayNumber

endp

;============================== ; TAB db

3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h;指令的基本功能:这条指令根据AL寄存器提供的位移量, YDR proc near

push

cx

mov cl,4

shr ax,cl

pop cx

ret ;将BX指使的字节表格中的代码换存在AL中。

;

(AL)<-((DS)*16+(BX)+(AL)) YDR endp

convert proc

near

mov bx,offset TAB xlat

ret

convert endp convert1 proc

near

mov bx,offset TAB1 xlat

ret

convert1 endp

bl10

proc

near

mov bl,10 ret

;将BX指使的字节

表格中的代码换存在AL中。

;

(AL)<-((DS)*16+(BX)+(AL)) bl10

endp

;==============================

InitPCI

PROC

NEAR

MOV AH,00H

19


数字温度计(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:电脑问题解决方法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: