数字温度计

更新时间:2024-06-23 08:08:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

合肥学院

计算机科学与技术系

课程设计报告

2008~2009学年第一学期

程 微型计算机原理与接口技术

数字式温度计 王传强 0604031042 06网络工程(1)班

张向东

课程设计名称 学学专指

业导

班教生

名 号 级 师

2009年2月

数字式温度计

1、题意分析及解决方案

1.1题义需求分析

1.1.1 设计内容:

本设计为从温度传感器DS18B20通道采样温度模拟信号,转化成数字信号,并在LED液晶显示器上显示出来.

由于DS18B20可以直接将模拟量转换为数字量,因此在并送LED显示时,须通过A/D转换器先将信号送入CPU,然后再选用8255A作为微处理器的输入输出接口芯片,最后将8位数字信号量显示到LED显示器上。 可以从四个方面来分析问题,

1)采样模拟信号,转化成数字信号。 2)接口的连接问题。

3)LED显示器如何接入电路。 4) 如何进行显示控制。

1.2 解决问题方法及思路

1.2.1硬件部分

(1) 温度传感器DS18B20

DS18B20温度传感器是一种智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温 (2) 输入输出接口芯片8255A

由于考虑到8086接口不足的问题,比如对LED数码管进行位选需要2位,对LED数码管每一位进行段选需要8位,所以必须要用8255进行I/O的扩展,通过8255A,CPU可以直接同外设相连接,将数字量从CPU输出到LED显示器上.

(3) 硬件比较

表1-1 8255A芯片与8251A芯片比较

8255A芯片 8255A芯片是可编程并行接口芯片,不需要附加外部电路便可和大多数并行传输的外设相连,数据可多为同时传输,使用广泛方便。

8251A芯片

8251A是可编程的串行接口芯片,数据一位一位地顺序传送,电路简单,传输距离远。

表1-2 LED和LCD比较

1

LED LCD

与LCD相比,LED在亮度,功耗可视角度和刷新速率等方面更具有优势,其最显著的特点是使用寿命长,光电转换效能高。 LCD占用空间小,功耗低,低辐射,能降低视觉疲劳,但会出现

闪烁现象。

1.2.2软件部分

该程序主要应分为两大部分, (1)对DS18B20进行设置

如何赋初始温度值,如何保存读出的数字量,如何获取当前温度值,如何将温度值显示出来等问题进行编程. (2)对8255的初始化

对方式选择控制字的赋值问题,也就是解决8255A的A口、B口分别工作在方式几,A口、B口、C口高位、C口低位分别是作为输出口还是输入口的问题。

2、硬件设计

2.1选择芯片8255A

2.1.1 8255A在本设计中的作用

芯片8255A在本设计中起输出、输入作用,C口的高四位输入方式。PC7作为读取EOC信号,低四位作输出方式,PC1、PC0作七段LED显示器的位选码,PA口用作输出方式,作七段LED的段选码,PB口为输入方式,读取ADC0809转换后的数字量即8255A通过PB口读入ADC0809转换后的数字量由PC1、PC0产生位选,PA口产生段选后七段LED显示出数字量。 2.1.2 8255A功能分析

8255A是一种通用的可编程的并行I/O接口芯片,可用与连接PCI卡与外设,实现数据的的输入输出功能,可以对输入/输出的数据进行数据锁存和数据缓冲,有中断请求信号,可以向CPU发出中断请求,能进行单向和双向通信。

8255A的数据总线缓冲器是一个三态8位双向缓冲器,用作8255A同系统数据总线相连时的缓冲部件,CPU通过执行输入/输出指令来实现对缓冲器发送或接收数据。8255A的控制字或状态字也是通过该缓冲器传送的。PA、PB、PC三口均工作在方式0状态。

(1) 方式0的工作特点:

这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。

(2) 方式0的功能为:

a.两个8位通道:通道A、B。两个四位通道:通道C高4位和低四位; b.任何一个通道可以作输入/输出; c.输出是锁存的; d.输入是不锁存的;

e.在方式0时各个通道的输入/输出可有16种不同的组合。

2

图 1-1 8255A原理图

表2-1 8255A的操作功能表

8255A的操作功能表

CS RD WR A1 A0

操 作 读 A 口 读 B 口 读 C 口 写 A 口 写 B 口 写 C 口 写控制口

数 据 传 送 方 式 A口数据 → 数据总线 B口数据 → 数据总线 C口数据 → 数据总线 数据总线数据 → A口 数据总线数据 → B口 数据总线数据 → C口 数据总线数据 → 控制口

0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 0 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 1

2.1.3 8255A主要技术参数

表2-2 8255A主要技术参数

参数名称 输入低电平电压

符号 VIL

3

测试条件

规范值 最大 0.8V

最小 -0.5V

输入高电平电压 输入低电平电压(数据总线) 输入低电平电压(外部端口) 输入高电平电压(数据总线) 输入高电平电压(外部端口)

达林顿驱动电流 电源电流 输入负载电流 输出浮动电流

VIH VOL VOL VOH VOH IDAR ICC IIL IOFL

IOL=2.5MA IOL=1.7MA IOH= -400UA IOH= -200UA REXT=750 VEXT=1.5

I=VCC~0MA VOUT=VCC~0MA

VCC 0.45V 0.45V

2.0V 2.4V 2.4V

-0.4MA 1.0MA 120MA +10MA +MA

-MA -MA

2.2 选择芯片LED

2.2.1 LED在本设计中的作用

LED发光二极管(Light-Emitting Diode),在本设计中采用7段数字发光二级管,做为终端显示。 2.2.2 LED的功能分析

笔画型LED显示器是由8个二极管电路a~dp按字型‘8’的方式排列,当不同的二极管被选通后根据发光效果会显示不同的自型。本设计中采用共阴极连接方式,当某段接入正电压时,对应的发光二极管会发光,当需要显示字型码“0”时,对应下图中的a,b,c,d,e,f发光二极管应发光,输入位选码应为00111111,即为:3FH;类似可以显示其他。a~dp分别与74LS273的1Q~8Q相连,接收段选码信号(高电平);4位LED显示器的4根共阴极引线与8255A的PC0~PC3相连,接收位选码信号(低电平)。段选码和位选码共同作用以显示不同的字型。

表2-3共阴极七段LED显示段码

数字 DP g 0 0 0 1 0 0 2 0 1 3 0 1 4 0 1 5 0 1 6 0 1 7 0 0 8 0 1 9 0 1 A 0 1 f 1 0 0 0 1 1 1 0 1 1 1 e 1 0 1 0 0 0 1 0 1 0 1 d 1 0 1 1 0 1 1 0 1 1 0 c 1 0 0 1 1 1 1 1 1 1 1 4 b 1 1 1 1 1 0 0 1 1 1 1 a 1 1 1 1 0 1 1 1 1 1 1 二进制编码(字形) 3FH 03H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 77H

B C D E F

0 0 0 0 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 0 1 0 0 0 1 0 1 1 7CH 69H 5EH 79H 71H 2.2.3 芯片LED的技术参数

表2-4 LED的技术参数

BT235-2 BT1441529 BT1341529

Pcw 70 100 100

If 25 40 40

Vr 5 5 5

Ir ≥1.5 ≥0.5 ≥0.5

If ≤2.5 ≤2.5 ≤2.5

^p 200 565 585

对应型号 SEL-10

散射颜色 红色 绿色 蓝色

消耗功率 PM=150mW 最大工作电流 IFM=100mA 正常工作电流 IF=40mA 正向压降 VF ≤ 1.8V 燃亮电压为5v

共阴极LED的PM=300mW,IFM=200 mA,IF=60mA,VF ≤ 1.8V,VR≥5V,发红光。

2.3 选择芯片DS18B20

2.3.1 DS18B20在本设计中的作用

DS18B20在本设计中主要是测量手部的温度并将接收的模拟信号转化为数字信号输出至8255中。 2.3.2 DS18B20的功能分析

DS18B20测温原理如图2-2所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

图2-2 DS18B20测温原理图

5

1) DS18B20主要数据部件

(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

(2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。如图2-3:

图2-3 DS18B20温度值格式

这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的

数值需要取反加1再乘于0.0625即可得到实际温度。 例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。

图2-4 DS18B20温度转换

6

(3)DS18B20温度传感器的存储器

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

(4)配置寄存器

低五位一直都是\,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)

表2-5 配置寄存器分辨率

表2-5 ROM指令

7

表2-5 RAM指令

3、硬件总逻辑图及其说明

3.1硬件总逻辑图

图3-1 硬件总逻辑图

8

3.2说明

实验硬件原理图由PCI、8255A、DS18B20、LED数码显示器构成,8255A芯片CS片选信号线接PCI卡上CS, 8255A芯片A0、A1接PCI卡的A0、A1。 8255A的C口的PC7作为DS18B20的输入口,A口作为LED数码管的段选,B口作为LED数码管的位选。

4、控制程序设计

4.1 控制程序设计思路说明

本程序主要功能分为初始化、读温度量、写操作及LED的显示输出。 初始化主要实现写8255方式控制字,设置控制字为89h,,即10001001,8255芯片工作于方式0,PA口作输出段选, PB口作输出位选,PC口作为输入。

然后向DS18B20发送读温度指令,准备读温度前先复位,跳过ROM匹配,发出读温度命令,调用读18B20子程序, 先读低8位再读高8位,读出转换后的温度值存在AX中。再调用显示子程序,将温度值显示出来。

实现二进制到十六进制数字型码的转化主要通过二进制数从段选码中查表找出相应的字型码并从8255中送出在LED显示器中显示。从高位到低位、输出结果并控制显示器显示通过循环完成。

9

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

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

MOV AL,03H INT 10H

MOV AH,0B1H MOV AL,01H INT 1AH CMP AH,0 JZ InitPCI2 LEA DX,msg0

;清屏

MOV AH,0B1H MOV AL,09H INT 1AH

;读取该卡PCI9052基地址

JNC InitPCI4 LEA DX,msg2 JMP InitPCI1

InitPCI4: AND CX,0FFFCH

MOV IO_Bit8_BaseAddress,CX

RET

ENDP

InitPCI1:

MOV AH,09H INT 21H JMP Exit

InitPCI

InitPCI2:

MOV AH,0B1H MOV AL,02H MOV CX,Device_ID MOV DX,Vendor_ID MOV SI,0 INT 1AH JNC InitPCI3

ModifyAddress

PROC NEAR

ADD Con_8255,CX ADD PB_8255,CX ADD PC_8255,CX ADD PA_8255,CX RET

ENDP

ModifyAddress Exit:

;是否存在Star PCI9052板卡

LEA DX,msg1 JMP InitPCI1

MOV AH,4CH

INT 21H END START

InitPCI3: MOV DI,PCIBAR3

5、上机调试过程

5.1 硬件调试

20

按照硬件原理图连线后,通过手去触摸DS18B20测量温度,得到串行数字量,从C口采集数据,经8255A进行串并转换,转换后的数据到达8255A的A口,经LED的A口进行段选,B口进行位选。从而使数据在LED上显示。连线时要注意不要带电插拔,因为在带电插拔时的电流有可能将部件烧坏。

5.2 软件调试

设计的程序是使用汇编语言编写的。程序完成后就可以对它进行编译和链接,如果发现有错误,则返回程序中修改,完成后再次编译和链接,就这样周而复始的重复进行,直到没有出现编译错误之后就可以运行了。

运行的时候也有问题出现。例如程序的结构有问题,对于寄存器的使用不合理,或对于寄存器的重复使用导致数据混乱,循环不能正常的结束等问题。要解决这些问题就要对汇编用深入的理解,画清楚流程图,使用结构简单的循环,分布编写程序,同时注意对程序的注释可以减少问题。对于寄存器的使用问题可以才用入栈出栈来保存部分寄存器的值来安排寄存器的使用。

对于循环,注意结束循环的条件,避免在程序中产生无限循环的情况,无限循环显示的除外。对于一些寄存器的隐含用法要引起注意,对于控制端口地址的写入,数据的输出,都有特定的寄存器提供使用。

5.3 联机调试

联机运行时,用手触摸DS18B20数字温度计并不能得到预期效果,LED只是显示了一个数字,不能根据温度的变化转换成不同的数字,经检查,问题出在编写的程序上。需要重新转到程序开始处运行,重新读取模拟量才能进行转换。

另外,在调试时发现出现的温度与寄存中的数据不同,显然在程序中受到了改变,需要在程序中保存寄存中的温度值,不使其受到循环移位的影响。

5.4调试结果

用手指握住DS18B20,测量手指的温度,随温度的变化,七段LED显示管显示的数字随之改变。在开始时,会看到数字不断变大,经过一段时间后,温度会一个较为稳定的数字左右变换。

5.5实验过程遇到的问题及解决办法

(1)联机调试,无任何现象?

解决办法:首先检查了8255A端口连线是否出错,C口接逻辑开关,B口作段选,A口作位选。判断无误后再做相关测试,在老师的帮助下发现为PCI卡的位置插错,属于接线人马虎造成,后解决了此问题。

21

(2)全速运行时LED显示器显示全为暗红色8字型?

解决办法:由于指令运行的速度很快,导致新旧数据有重影(前一次显示数据时为亮的二极管没有显示结束,导致新显示的数据看不清楚)。后来修改程序,在每次输出段选和位选之前加禁止显示的指令mov dx,PA_ADD mov al,0ffh out dx ,al 使LED显示器显示为全灭,再显示数据时会比较清楚。 (3)当手触摸ds18b20时,反应速度慢?

解决办法:减小了延时时间,设置 push cx ;mov cx,100h ,后改为10h,现象很明显。

6、实验分析及问题讨论

6.1结果分析及改进设想

本课程设计(温度转换器)实现的是温度转换转换,利用到了DS18B20,8255A和LED等芯片,主要的转换通过汇编程序实现,如在本程序中一条强大的指令(换码—XLAT),可以说其实现的功能是“一言难尽”。

在完成相应的任务后,我试着将十六进制中的大写字母A~Z转换为小写字母a~z,:修改程序的代码段中的定义十六进制数字符的7段代码表。例如:将A修改为a,只需要将7段代码表中的db 77h改写为db 0dch即可。同理,将db 39h改写为db 58h,就实现了C改为c;将db 79h改写为db 7bh,就实现了E改为e。 在老师的提议下,又将十六进制改为十进制,是将测量的温度值除以10,取余数。有关小数是将最低四位除以16再乘10,结果是小数位。

6.2 体会及建议

在设计的过程中,我学会了微机原理的一些应用思想,设计思路,加深的对芯片功能与技术参数等的理解。编码器的实现,既用到了硬件方面的知识,又与软件方面紧密的结合,是计算机科学与技术专业基础且典型的综合应用型的设计。本课题其原理和设计思想可以作为许多功能强大的课题中的基本素材。

同时我明白,要做好一个课题,细心,耐心,好奇心和同学之间的有效合作都是不可缺少的,要将书本知识与实际操作紧密联系起来,在实践中发现和解决问题是非常重要的。同样预习报告和实验报告对课程设计是非常重要也是必不可少的,特别是画原理图等方面要花一定工夫;在实验的过程中也出现了一些问题,大部分来自自身的疏忽与对知识掌握的不牢固,这些方面是要加强的!

通过老师提出问题,再解决问题的过程,可以使我们对问题的认知更加深刻,这将有益于学到更多更为有用的东西。同时也知道了团队合作的重要性,在实验中,同组成员在一起发现问题、讨论问题,大大提高了解决问题的速度,同时也学到他们解决问题的思想。

由于实验仪器的更新换代,简化了硬件的连线,利于实验者的操作,希望以后可以体验到更先进的实验设备;同时,通过课程设计大家得到了很好的锻炼,也期待我们应该有更多实际操作的机会,加强合作与创新方面的能力。

22

本文来源:https://www.bwwdw.com/article/s123.html

Top