数字温度计(3)

2019-03-22 23:38

4.2 程序流程图

主程序 开始 初始化8255 调用启动DS18B20子程序 Y CF=1 N 延时1s 调用读温度子程序 转换后数据->3、2、1号数码管 4、5、6、7、8号数码管消隐 读18B20子程序 开始 8->CX 8255控制口地址->DX 80H->AL AL->[DX](0->PC0) 89H->AL AL->[DX](PC口输入) NOP NOP NOP 8255PC口地址->DX [DX]->AL ROR AL,1 RCR BL,1 开始 8->CX 调用0->PC0子程序 ROR AL,1 N CF=0 N 调用1->PC0子程序 Y 保存CX,恢复CX 返回 保存CX 12->CX CX-1=0 Y 恢复CX 调用1->PC0子程序 N CX-1=0 Y 返回 N CX-1=0 Y BL->AL 8255控制口地址->DX 80H->AL AL->[DX](0->PC0) 1->AL AL->[DX](1->PC0) 写18B20子程序 10

复位DS18B20子程序 开始 调用0->PC0子程序 (主机发出501us复位低脉冲) 136->CX N 启动DS18B20子程序 开始 调用复位DS18B20子程序 Y CF=1 N 0CCH->AL CX-1=0 Y 调用写DS18B20子程序(跳过ROM匹配) 0BEH->AL 调用写DS18B20子程序(发出温度转换指令) 0->CF 8255控制口地址->DX 89H->AX AL->[DX](PC输入状态) DX-1 15->CX 返回 读温度子程序 [DX]->AL N 136->CX 开始 调用复位DS18B20子程序 0CCH->AL CX-1=1 Y 0->CF N 调用写DS18B20子程序(跳过ROM匹配) 44H->AL 调用写DS18B20子程序(发出温度转换指令) 调用读18B20子程序 AL.0=1 Y N CX-1=0 Y 1->CF(18B20部不存在) 返回 AL->AH 调用读18B20子程序 AL与AH交换 返回 0->8255的PC0口子程序 开始 保存AX 8255的控制口-> DX 80H->AL AL->[DX](0->PC0口) 恢复AX 1->8255的PC0口子程序 开始 保存AX 8255的控制口-> DX 01H->AL AL->[DX](0->PC0口) 恢复AX 返回 返回 11

显示子程序 开始 存放字节子程序 开始 调用存放字节子程序 (AX内容->buffer) LEA DI,buffer CLD 100->CX PUSH CX 0FEH->AH STOSB STOSB STOSB STOSB 3->cx 返回 N [SI]->AL PA_8255->DX Y 换码 AL->DX PB_8255->DX AH->AL AL->DX ROL AH,1 INC SI N Cx= =0 Y POP CX cx= =0 Y 返回 N 12

4.3 程序代码

表 5-1转换表

0 1 3f60h h 2 5Bh

3 4Fh 4 66h

5 6dh

6 7dh

7 07h

8 7fh

9 6fh

A 77h

B 7ch

C 39h

D 5eh

E 79h

F 71h

.MODEL

TINY

PCIBAR3 EQU 1CH

;8位I/O空间基地址(它就是实验仪的基地址,也为DMA & 32 BIT RAM板卡上的8237提供基地址) Vendor_ID EQU 10EBH ;厂商

ID号

Device_ID EQU 8376

;设备ID号

.STACK 300

.DATA

IO_Bit8_BaseAddress DW ? msg0

DB 'BIOS不支持访问

PCI $' msg1

DB '找不到Star

PCI9052板卡 $' msg2

DB '读8位I/O空间基

地址时出错$'

Con_8255 DW 00F3H PA_8255 DW 00F0H PB_8255

DW 00F1H

PC_8255 DW 00F2H

buffer

DB 8 DUP(0)

;温度临时存放区 TAB db

3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h

;七段显示器TAB db

3eh,05h,5ah,4eh,65h,6ch,7ch,06h,7eh,6eh,76h,7bh,38h,5dh,78h,70h

TAB1 db

0bfh,086h,0dbh,0cfh,0e6h,0edh,0fdh,087h,0ffh,0efh,0f7h,0fch,0b9h,0ceh,0f9h,0f1h .CODE START:

MOV AX,@DATA

MOV DS,AX MOV ES,AX

NOP

;DELAY?

CALL

InitPCI

13

CALL ModifyAddress

;根据PCI提供的基地址,将

偏移地址转化为实地址

CALL

Init8255

;初

始化8255 MAIN:

CALL

START_Temperature

;向DS18B20发送读温度指令 JB MAIN CALL

RD_Temperature

;读出温度值

call displayNumber ;调用显示子程序

JMP MAIN

;DS18B20复位初始化子程序 INIT_18B20 PROC NEAR

CALL

W_L

;调

用0->PC0子程序

CALL

Delay501us

;主机发出501us复位低脉冲;;;;;;标示复位信号

MOV DX,Con_8255

;8255控制口地址->DX

MOV AX,89H

;设置

控制字10001001

OUT DX,AL

;PC输

入状态

DEC DX

;DX-1

MOV CX,15 ;15->CX INIT_18B20_1:

IN AL,DX

;[DX]->AL

TEST

AL,01H

;

AL.0=1? JZ INIT_18B20_2 LOOP INIT_18B20_1

STC

;1;置位标

志位,表示DS18B2bu0存在

RET

INIT_18B20_2:

CALL Delay501us

CLC

;0;复位标

志位,表示DS18B存在

RET

INIT_18B20 ENDP

Delay501us PROC NEAR

PUSH AX PUSH CX

PUSH

DX

MOV CX,167

;?????

MOV DX,PA_8255

Delay501us_1:

IN AL,DX

LOOP

Delay501us_1

14


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

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

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

马上注册会员

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