《单片机应用实训教程》课件第2章_第1页
《单片机应用实训教程》课件第2章_第2页
《单片机应用实训教程》课件第2章_第3页
《单片机应用实训教程》课件第2章_第4页
《单片机应用实训教程》课件第2章_第5页
已阅读5页,还剩225页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章MCS-51单片机综合应用实训实训2.1单片机多功能实训电路的设计与测试实训2.2单片机温度控制器的设计与调试实训2.3单片机步进电机控制器的设计与调试

实训2.4接触式IC卡读写器的设计与调试

实训2.1单片机多功能实训电路的设计与测试

1.实训目的

(1)了解单片机应用系统的基本组成,通过分析多功能实训电路的组成,熟练掌握单片机实训电路的工作原理、各部分的连接方式与完成功能。

(2)掌握对硬件电路进行测试的基本方法,掌握测试程序的设计要领。

2.实训设备与器件实训设备:单片机集成开发环境、多功能实训电路板。

3.项目设计要求完成基于MCS-51单片机的多功能实训电路,包括8个发光二极管模拟信号灯的显示、RAM/ROM扩展电路、LED数码显示、键盘电路、模/数转换电路以及与PC机的接口电路。

4.实训内容

1)硬件设计单片机实训电路主要为教学配套使用,因此在电路设计上尽量全面,基本包括了单片机系统的所有部分,以完成各个实训项目。在该电路板中,核心器件是8031单片机芯片,外部扩展了一片EPROM2764、一片RAM6264、一片EEPROM2864A、一片8155、一片ADC0809和MAX232等,这些主要芯片的功能如下所述。

(1)EPROM2764:紫外线可擦除、电可编程的只读存储器,通常用于存放编制好的程序和常数表格。(2)RAM6264:静态随机存储器,通常用于存放采集到的原始数据、处理中的数据及最后的结果。

(3)EEPROM2864A:电可擦除、电可编程的只读存储器。它是近年来被广泛使用的一种只读存储器。其主要优点是能在应用系统中进行在线改写,并能在断电情况下保存数据而不需要保护电源。它兼有程序存储器与数据存储器的特点。

(4)8155A:一种可编程的RAM和I/O接口芯片,本实训系统主要用它来作扩展键盘和数码管显示的接口。(5)ADC0809:一种8路模拟输入的8位逐次逼近式A/D转换器件。

(6)MAX232:标准的串行口电平转换器,用来将单片机和PC机联系起来。为了方便实训,在单片机P1口连接了8个发光二极管,同时将常用的I/O口、外部中断、定时器输入脉冲等引出,具体电路连接参见书末附图。图2.1.1多功能实训电路板2)测试程序

(1)电路制作完成后,要通过程序测试系统各部分是否正常工作。要求本实训电路的测试程序运行后,首先点亮P1口连接的8个二极管,以确定电路能否正常工作;再运行键盘程序以按键查询。每个按键完成相应电路的检测,具体分配如下:

0#~B#键:检测对应按键是否连接正常,P1口的8个发光二极管显示键号。

C#键:检测6264的连接,低4位的4个二极管点亮。

D#键:检测2864的连接,高4位的4个二极管点亮。

E#键:检测8155连接的LED,8个LED全部显示8。

F#键:检测ADC0809的连接,改变电阻R25,LED显示结果连续变化。(2)测试程序流程图如图2.1.2所示。图2.1.2测试程序流程图(3)源程序。根据上述思路,编写源程序如下:

ORG 0000H AJMP MAIN PORT EQU 4400H PORTA EQU 4401H PORTB EQU 4402H PORTC EQU 4403H BUFFO EQU 20H BUFF1 EQU 21H;*************************主程序*******************************

ORG 0100HMAIN:MOV SP,#50H MOV DPTR,#PORT ;8155初始化

MOV A,#03H MOVX @DPTR,A MOV P1,#00H ;点亮8个二极管START:LCALL KEYTEST ;调用键入测试程序

JNZ RETEST SJMP START ;无键按下,返回测试,键入KEYRETEST:LCALL DELAYLCALL KEYTESTJNZ KEDATA ;若无抖动则查键号,否则返回KEYSJMP STARTKEDATA:LCALL SERCH ;调用键号测试程序TEST: CJNE A,#0CH,PR01 AJMP KEY0CPR01: CJNE A,#0DH,PR02 AJMP KEY0DPR02: CJNE A,#0EH,PR03 AJMP KEY0EPR03: CJNE A,#0FH,KEY0toB AJMP KEY0F KEY0toB:MOVP1,A ;0#~B#键,键号直接送P1口显示

AJMP STARTKEY0C: MOV A,#0F0H ;C#键,检测6264 MOV DPTR,#1000H MOVX @DPTR,A MOV A,@DPTR ;对1000H单元传送数据

MOV P1,A ;点亮低4位二极管

AJMP START KEY0D: MOV A,#0FH ;D#键,检测2864 MOV DPTR,#3000H MOVX @DPTR,A LCALL DELAY ;调用延时,等待2864写入数据

MOV A,@DPTR ;对3000H单元传送数据

MOV P1,A ;点亮高4位二极管

AJMP STARTKEY0E:MOV DPTR,#PORTA ;E#键,检测8155连接的LED MOV A,#00H MOVX @DPTR,A ;8个LED全部选中

INC DPTR MOV A,#0FFH MOVX @DPTR,A ;所有段显示

AJMP STARTKEY0F: ;F#键检测A/D转换芯片

MOV BUFF0,#00H ;显示缓冲区清0 MOV BUFF1,#00HSTAR:MOV DPTR,#6000H ;选中0809通道0 MOV A,#00H MOVX @DPTR,A ;启动A/D转换WAIT:JB P3.3,WAIT ;查询转换是否结束

MOVX A,@DPTR ;取转换结果到A累加器

LCALL SEPR ;调用拆字子程序

LCALL DISP ;调用显示子程序

AJMP STAR ;重新启动转换;*************************拆字子程序SEPR****************************;功能:将一个8位二进制数的高、低4位拆开,分别存入两个单元;入口参数:A累加器存放待拆分数据;出口参数:内部RAM的BUFF0单元存放低4位数据;BUFF1单元存放高4位数据SEPR: ;略,详见第1章实训1.5…RET;************************显示子程序DISP**************************;功能:在最后两位数码管显示数字(十六进制);入口参数:内部RAM的BUFF0、BUFF1单元,分别存放待显示的两个数字DISP: ;略,详见第1章实训1.5 RET;************************键入测试子程序KEYTEST******************;功能:扫描键盘,查询有无键按下;出口参数:累加器A,A=0表示无键按下,A≠0表示有键按下KEYTEST:;略,详见第1章实训1.2RET……;************************键号测试程序SEARCH*********************;功能:求按键的键号;出口参数:累加器A中存放键号00H~0FHSEARCH: ;略,详见第1章实训1.2

RET;***********************延时子程序DELAY**********************DELAY:MOV R4,#0FDH ;延时子程序TM0: MOV R5,#0AHTM1: NOP NOP DJNZ R5,TM1 DJNZ R4,TM0 RET END…

5.调试步骤

(1)与仿真器连接好,加电,观察电路板电源指示灯是否正常。

(2)输入源程序,汇编纠错。

(3)全速运行程序,观察8个二极管是否点亮,以确定电路能否工作。

(4)依次按下16个键,观察是否显示正确,有问题时检查对应硬件电路,排除电路故障。

6.实训分析与总结

1)时钟和复位电路时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在惟一的时钟信号控制下严格地按时序进行工作。在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,这就是单片机的时钟电路,如图2.1.3所示。图2.1.3时钟振荡电路

一般电容C1和C2取30pF左右,晶体的振荡频率范围是1.2~12MHz,若晶体振荡频率高,则系统的时钟频率也高,单片机运行速度也就快。MCS-51在通常应用的情况下,使用振荡频率为6MHz、11.0592MHz或12MHz。在本电路中选用11.0592MHz的晶振。单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,sPC=0000H,使单片机从第一个单元取指令。无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。复位信号通过单片机的第9个引脚RESET接入,常见的是上电复位和按键复位电路,如图2.1.4所示。图2.1.4单片机复位电路(a)上电复位电路;(b)按键复位电路2)P1口的应用在实训电路中,P1通过反相器74LS240连接了8个发光二极管,此时P1口作为输出口,可以用8个二极管来模拟各种信号,以完成各种应用程序,例如第1章实训1.2中的交通灯控制器。在测试程序中,首先对这部分进行了试验。3)片外存储器的扩展片外存储器的扩展主要分为数据存储器和程序存储器。当单片机片内RAM容量不够时,需要扩展数据存储器,往往采用RAM或电可擦除的EEPROM芯片来完成;当单片机程序容量较大,片内ROM容量不够或片内无ROM时,需要扩展程序存储器,往往采用EPROM等芯片来完成。二者扩展的最大容量都为64K。无论RAM还是ROM扩展,在与MCS-51单片机连接时都要接好3个总线:

(1)地址总线AB:由单片机的P0口和P2口提供,P0口通过锁存器(一般采用74LS373)连接到存储器芯片的低8位地址,P2口直接一一对应地连接高8位地址。(2)数据总线DB:MCS-51系列单片机是8位机,所以数据线只有8根,片外存储器也只能使用8位存储器。单片机P0口的8根口线作为扩展时的数据总线,直接连接到所扩展芯片的数据线上。

(3)控制总线CB:对于RAM和ROM,控制线是不同的。对于ROM扩展,将单片机的PSEN信号接到ROM的读选通信号OE上;对于片外RAM扩展,需分别将单片机的和WR信号分别连接到RAM的读、写控制信号上。除此以外,存储器芯片片选信号的连接也至关重要,它决定了扩展芯片的地址范围,片选信号一般都由P2口剩余的口线通过译码器输出而得。根据上述几个关键点,在实训板中,我们这样设计了数据存储器和程序存储器的扩展,如图2.1.5所示。图2.1.5RAM和ROM扩展

在扩展电路中,作为数据存储器的是RAM6264和EEPROM2864,扩展容量一共是16K。作为程序存储器的是EPROM2764,扩展容量是8K。3个芯片的片选线CE由译码器74LS138的输出决定,74LS138在整个实训电路中的作用都是选通地址,在8155、ADC0809中也用到了74LS138的输出,请读者注意分析。根据图2.1.5的连接关系,可确定各芯片的地址范围如下:因此,数据存储器的地址范围为6264:0000H~1FFFH2864:2000H~3FFFH程序存储器的地址范围为

2764:0000H~1FFFH

在测试程序中,通过对6264的1000H单元以及2864的3000H单元传送数据并显示,以确定这部分电路是否正常。4)可编程接口芯片8155的扩展

51系列单片机内部有4个双向的并行I/O端口P0~P3,在无片外存储器扩展的系统中,这4个端口都可以作为准双向通用I/O口使用。在具有片外扩展存储器的系统中,通过上述分析我们知道,P0口分时地作为低8位地址线和数据线,P2口作为高8位地址线,这时,P0口和部分或全部的P2口无法再作通用I/O口了。P3口具有第二功能,在应用系统中也常被使用。因此在大多数的应用系统中,真正能够提供给用户使用的只有P1口和部分P2、P3口。所以,MCS-51单片机的I/O端口通常需要扩充,以便和更多的外设(如显示器、键盘)进行联系。表2.1.1地址分配图2.1.68155接口电路根据图2.1.6中的的连接关系,可以确定地址如下:

此时,8155内部RAM的地址范围为4000H~40FFH,8155各端口的地址为(设无关位为0,这些地址都不是惟一的):命令/状态口 4400HA口 4401HB口 4402HC口 4403H定时器低字节 4404H定时器高字节 4405H5)显示和键盘电路在单片机应用系统中,常见的显示器有LED和LCD,关于LCD的应用在实训1.3中已有介绍。这里只介绍LED和单片机的接口方法,LED在单片机应用中有两种显示方式:静态显示和动态显示。由于动态显示占用的资源少,所以被广泛使用。键盘常见的有独立键盘和行列式键盘,当按键数量少时,通常采用独立键盘;当按键数较多时,独立键盘占用的I/O口线多,因此采用行列式键盘电路。在实际应用中,常常把键盘和显示电路做在一起,构成实用的显示键盘电路,图2.1.7即为通过8155连接实现的一种显示和键盘接口电路。图2.1.7显示和键盘电路

图2.1.7接有8个共阴极数码管、16个按键。8个数码管的各相同段分别连接在一起,点亮各段的段选码由8155的PB口输出提供,每个数码管的位选码由8155的PA口输出提供。同时,PA口的输出又作为行列式键盘的列线,供键盘逐列扫描时使用,键盘的行线由8155的PC口输入电平。因此,可以看出,可编程I/O口芯片81553个端口的功能应为:A、B口输出,C口输入,在对8155进行初始化时一定要注意。实训中的初始化语句为:MOV DPTR,#4400H ;选中8155命令寄存器MOV A,#03HMOVX@DPTR,A ;写入命令字6)A/D转换接口电路

A/D转换器用于实现模拟量→数字量的转换,在本实训电路中连接了A/D转换芯片ADC0809,该芯片可实现8路模拟信号的分时采集。电路板中ADC0809与8051单片机的连接关系以及分析使用在第1章的实训1.5中已介绍,此处不再赘述。

7)串行通信接口在实际应用领域,通常需要PC机和单片机之间进行通信,关于二者之间的通信原理、电路设计和应用编程,在第1章的实训1.6中作者已进行了详细的分析,读者可参考使用。该多功能实训电路板直接引用其连接方法。

7.思考题

(1)单片机时钟电路和复位电路的作用是什么?

(2)74LS138的作用是什么?

(3)请仔细查看电路原理图分析单片机、的连接,总结哪些外部器件需连接这些信号。

(4)在电路中,信号和ALE的作用是什么?

(5)若在电路中连接液晶LCD,需怎样实现?请画出示意图。

(6)如果在电路中增加D/A转换器件,如何实现?请选择器件并画出与单片机的连接原理图。实训2.2单片机温度控制器的设计与调试

1.实训目的

(1)掌握单线数字温度传感器DS18B20的测量原理、特性以及在温度测量中的硬件和软件设计。

(2)掌握运用开发系统调试温控系统应用程序的基本方法。

2.实训设备与器件实训设备:单片机集成开发环境、综合实训板、温控接口板。

3.项目设计要求用MCS-51单片机设计一个温控系统。要求具有对环境温度进行实时测量,当外界温度高于设定最高温度时,启动风扇降温;当外界温度低于指定最低温度时,将发出报警声。

4.实训内容设计要求:设计一个温控系统,用二位LED数码管显示测量的实时温度,可以设定最高限报警温度值和最低限报警温度值。1)硬件设计温度测量采用最新的单线数字温度传感器DS18B20,DS18B20是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75ms和750ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而,使用DS18B20可使系统结构更趋简单,可靠性更高。降温控制系统采用低压直流电风扇。当温度高于设定最高限温度时,启动风扇降温,当温度降到指定最高限温度以下后,风扇自动停止运转。

温控系统的温度显示和温度的设定直接采用综合实训板上的显示和键盘。当环境温度低于设定的最低限温度值时,也采用综合实训板上的蜂鸣器进行报警。用0#、1#键作为温度最高限、最低限的设定功能键;2#、3#键作为温度值设定的增加和减小功能键。

0#键:作为最高限温度的设定功能键。按一次进入最高限温度设定状态,选择最高限温度值后,再按一次确认设定完成。

1#键:作为最低限温度的设定功能键。按一次进入最低限温度设定状态,选择最低限温度值后,再按一次确认设定完成。

2#键:+1功能键,每按一次将温度值加1,范围为1~99℃。

3#键:-1功能键,每按一次将温度值减1,范围为99~1℃。图2.2.1温控系统硬件接线原理图2)软件设计

(1)温控系统采用模块化程序结构,可以分成以下程序模块:①系统初始化程序:首先完成变量的设定、中断入口的设定、堆栈、输入输出口及外部部件的初始化工作。②主程序MAIN:完成键盘扫描、温度值采集及转换、温度值的显示。当温度值高于设定最高限时,驱动风扇工作;当温度值低于设定最低限时,驱动蜂鸣器报警。③键盘扫描程序KEYSCAN:完成键盘的扫描并根据确定的键值执行相应的功能,主要完成最高温度、最低温度的设定。④温度采集程序GET_TEMPER:完成DS18B20的初始化并发出温度转换命令,经过指定时间后读取转换的温度值。根据DS18B20的通信协议,主机控制DS18B20完成温度转换必须经过3个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求CPU将数据线下拉500μs,然后释放。DS18B20收到信号后等待16~60μs左右,后发出60~240μs的存在低脉冲,CPU收到此信号表示复位成功。⑤温度转换程序TEMPER_COV:根据精度要求对采集到的温度值进行处理并转换成便于显示的BCD码值。⑥显示子程序DISPLAY:显示实时温度及设定温度值。⑦DS18B20初始化子程序INIT_1820:DS18B20在工作之前必须按照指定的要求完成初始化工作,否则无法正常工作。⑧DS18B20读写子程序WRITE_1820、READ_1820、READ_1820T完成对18B20的读写功能,其中,READ_1820从DS18B20中读出一个字节的数据,READ_1820T从DS18B20中读出两个字节的温度数据。⑨延时程序DELAY、DELAY1满足18B20要求的延时间隔及程序中的延时功能。(2)软件流程框图分别如图2.2.2、2.2.3、2.2.4、2.2.5和2.2.6所示。图2.2.2主程序流程图图2.2.3DS18B20初始化程序流程图图2.2.4键盘扫描子程序图2.2.5DS18B20写入子程序图2.2.6DS18B20读取子程序(3)下面给出参考程序。;晶振:12MHz;HIG_TMP EQU 32H ;设定的最高温度值LOW_TMP EQU 33H ;设定的最低温度值NUB_VAL EQU 34H ;加1、减1的暂存值TEMPER_H EQU 36H ;采集到温度值的低位TEMPER_L EQU 35H ;采集到温度值的高位TEMPER_NUM EQU 30H;PORT EQU 4400H ;8155口地址PORTA EQU 4401H ;8155A口地址PORTB EQU 4402H ;8155B口地址PORTC EQU 4403H ;8155C口地址;FLAG1 BIT 00H ;18B20初始化完成标志KEY_MK BIT 08H ;键盘按下标志KEY_HMK BIT 09H ;S1键按下标志KEY_LMK BIT 0AH ;S2键按下标志DISP_MK BIT 0BH;温度设定状态标志DQ BIT P1.1;

ORG 0000H AJMP START

ORG 0030HSTART:

MOV SP,#60H ;设置堆栈值

MOV IE,#00H MOV TCON,#00H MOV TMOD,#10H MOV DPTR,#PORT ;初始化8155口,A、B输出C输入

MOV A,#43H MOVX @DPTR,A SETB DQ SETB P1.2 MOV R0,#20H MOV R1,#20H MOV A,#00HSTART_1:

MOV @R0,A INC R0 DJNZ R1,START_1START_2:

CLR P1.0 CLR P1.2 MOV HIG_TMP,#30H ;初始高温限值设为30℃ MOV LOW_TMP,#20H ;初始低温限值设为20℃

ACALL RE_CONFIG NOP ACALL INIT_1820 JNB FLAG1,START_2MAIN:

ACALL KEY_SCAN JB KEY_LMK,MAIN1 JB KEY_HMK,MAIN1 ACALL GET_TEMPER ;采集温度值

ACALL TEMPER_COV ;温度值转换MAIN1:

ACALL DISPLAY MOV A,TEMPER_NUM CJNE A,HIG_TMP,MAIN2 CLR CMAIN2:

JC MAIN3 SETB P1.2 ;启动风扇

AJMP MAINMAIN3:

CJNE A,LOW_TMP,MAIN4 CLR CMAIN4:

JNC MAIN5 SETB P1.0 ;启动报警器

AJMP MAINMAIN5:

CLR P1.0 CLR P1.2 AJMP MAIN NOP;读出转换后的温度值GET_TEMPER:

SETB DQ ;定时入口GET_TMP1:

LCALLINIT_1820 ;第一步,完成对18B20初始化

JB FLAG1,GET_TMP2 LJMP GET_TMP1 ;若DS18B20不存在,则继续初始化GET_TMP2:

LCALLDELAY1 ;延时80μs MOV A,#0CCH ;第二步,ROM命令,跳过ROM匹配——0CC LCALLWRITE_1820

MOV A,#44H ;第三步,功能命令,发出温度转换命令

LCALLWRITE_1820GET_TMP5:

NOP LCALLDISP3 CLR DQ NOP NOP SETB DQ ;释放数据线

MOV R3,#4 ;延时14μs DJNZ R3,$ CLR C MOV C,DQ JNC GET_TMP5GET_TMP3:

LCALL INIT_1820 ;第一步,对18B20初始化

JB FLAG1,GET_TMP4 LJMP GET_TMP3GET_TMP4:

LCALLDELAY1 MOV A,#0CCH ;第二步,ROM命令,跳过ROM匹配

LCALLWRITE_1820 MOV A,#0BEH ;第三步,功能命令,发出读温度命令

LCALLWRITE_1820

LCALLREAD_1820;READ_1820 RET;写DS18B20的程序WRITE_1820:

MOV R2,#8 CLR CWRITE1: CLR DQ MOV R3,#7 ;延时14μs DJNZ R3,$ RRC A MOV DQ,C MOV R3,#21 ;延时45μs DJNZ R3,$ SETB DQ NOP DJNZ R2,WRITE1 SETB DQ RET;读DS18B20的程序,从DS18B20中读出两个字节的温度数据READ_1820:

MOV R4,#2 ;将温度高位和低位从DS18B20中读出

MOV R1,#35H ;低位存入35H,高位存入36HREAD0:

MOV R2,#8 MOV A,#00HREAD1:

CLR C ;读取一位数需要70μs SETB DQ NOP NOP CLR DQ ;保持1μs以上的低电平

NOP NOP SETB DQ ;释放数据线

MOV R3,#3 ;延时7μs,必须在15μs内读取数据DJNZ R3,$ MOV C,DQ RRC A MOV R3,#26 ;延时53μs DJNZ R3,$ DJNZ R2,READ1 MOV @R1,A INC R1 DJNZ R4,READ0 SETB DQ ;用RESET来终止数据读取

NOP NOP CLR DQ ACALL DELAY1 ;延时80μs SETB DQ RET;将从DS18B20中读出的温度数据进行转换TEMPER_COV:

MOV A,TEMPER_H CJNE A,#0F8H,TEMPER_COV1 CLR CTEMPER_COV1:

JC TEMPER_COV2 CPL A MOV TEMPER_H,A MOV A,TEMPER_L CPL A ADD A,#01H MOV TEMPER_L,ATEMPER_COV2:

MOV A,TEMPER_L;舍去温度低位中小数点后的四位温度数值

ANL A,#0F0H SWAP A MOV TEMPER_NUM,ATEMPER_COV3:

MOV A,TEMPER_H ANL A,#07H SWAP A ORL A,TEMPER_NUM MOV TEMPER_NUM,A;保存变换后的温度数据

LCALL BIN_BCD RET;将十六进制的温度数据转换成压缩BCD码BIN_BCD:

MOV DPTR,#TEMP_TAB MOV A,TEMPER_NUM MOVC A,@A+DPTR MOV TEMPER_NUM,A RETTEMP_TAB:

DB 00H,01H,02H,03H,04H,05H,06H,07H DB 08H,09H,10H,11H,12H,13H,14H,15H DB 16H,17H,18H,19H,20H,21H,22H,23H DB 24H,25H,26H,27H,28H,29H,30H,31H DB 32H,33H,34H,35H,36H,37H,38H,39H DB 40H,41H,42H,43H,44H,45H,46H,47H DB 48H,49H,50H,51H,52H,53H,54H,55H DB 56H,57H,58H,59H,60H,61H,62H,63H DB 64H,65H,66H,67H,68H,69H,70H,71H DB 72H,73H,74H,75H,76H,77H,78H,79H DB 80H,81H,82H,83H,84H,85H,86H,87H DB 88H,89H,90H,91H,92H,93H,94H,95H DB 96H,97H,98H,99H;键盘扫描程序KEY_SCAN:

MOV DPTR,#PORTB MOV A,#00H MOVX @DPTR,A

; MOV DPTR,#PORTA ;第一列为低电平

MOV A,#0FEH MOVX @DPTR,A NOP MOV DPTR,#PORTC MOVX A,@DPTR CPL A ANL A,#0FH ;屏蔽高4位

CJNE A,#00H,KEY_0 CLR KEY_MKKEY_E:

RETKEY_0:

JB KEY_MK,KEY_E SETB KEY_MK MOV R6,#4FH ACALL DEL1

JNB ACC.0,KEY_1 ;S1是否被按下

JB KEY_LMK,KEY_E ;

JB KEY_HMK,KEY_0_1 ;S1是否已经执行过

SETB KEY_HMK ;没有,则设置已经执行过标志

SETB DISP_MK MOV NUB_VAL,HIG_TMP ACALLDISPLAY AJMP KEY_4KEY_0_1:

CLR KEY_HMK CLR DISP_MK MOV HIG_TMP,NUB_VAL AJMP KEY_1_2KEY_1:

JNB ACC.1,KEY_2 ;S2是否被按下

JB KEY_HMK,KEY_E JB KEY_LMK,KEY_1_1 ;S2是否已经执行过

SETB KEY_LMK ;没有,则设置已经执行过标志

SETB DISP_MK MOV NUB_VAL,LOW_TMP ACALLDISPLAY AJMP KEY_4KEY_1_1:

CLR KEY_LMK CLR DISP_MK MOV LOW_TMP,NUB_VALKEY_1_2:

;ACALLINIT_1820 ;JNB FLAG1,KEY_1_2 ACALL RE_CONFIG AJMP KEY_4KEY_2:

JNB ACC.2,KEY_3 JB KEY_LMK,KEY_2_1 JB KEY_HMK,KEY_2_1 AJMP KEY_4KEY_2_1:

CLR DISP_MK MOV A,NUB_VAL CJNE A,#63H,KEY_2_2 AJMP KEY_4KEY_2_2:

INC A MOV NUB_VAL,A ACALL DISPLAY AJMP KEY_4KEY_3:

JNB ACC.3,KEY_4 JB KEY_LMK,KEY_3_1 JB KEY_HMK,KEY_3_1 AJMP KEY_4KEY_3_1:

CLR DISP_MK MOV A,NUB_VAL JZ KEY_4 DEC A MOV NUB_VAL,A ACALL DISPLAYKEY_4:

RET;显示子程序DISPLAY:

JB KEY_HMK,DISP0 JB KEY_LMK,DISP1 AJMP DISP3DISP0:

JNB DISP_MK,DISP2 MOV R0,#0BFH ;高位地址

MOV A,#0AH ;高位显示“H” ACALL SCAN_TAB MOV R0,#7FH ;低位地址

MOV A,#0BH ;低位显示“-” ACALL SCAN_TAB RETDISP1:

JNB DISP_MK,DISP2 MOV R0,#0BFH MOV A,#0CH ;高位显示“L” ACALL SCAN_TAB MOV R0,#7FH MOV A,#0DH ;低位显示“-” ACALL SCAN_TAB RETDISP2:

MOV TEMPER_NUM,NUB_VALACALL BIN_BCD

;MOVR1,ADISP3:

JB KEY_HMK,DISP3_1 ;个位显示的地址送R0 JB KEY_LMK,DISP3_1 MOV R0,#0BFH AJMP DISP3_2DISP3_1:

MOV R0,#7FHDISP3_2:

MOV A,TEMPER_NUM ;取显示单元内容

ANL A,#0FH ACALL SCAN_TAB

JB KEY_HMK,DISP3_3 ;十位显示地址送R0 JB KEY_LMK,DISP3_3 MOV R0,#0DFH AJMP DISP3_4DISP3_3:

MOV R0,#0BFHDISP3_4:

MOV A,TEMPER_NUM ;取显示单元内容

SWAP A ;高4位与低4位互换

ANL A,#0FH ;取显示内容十位

ACALLSCAN_TAB

JB KEY_HMK,DISP6 ;取小数点显示

JB KEY_LMK,DISP6 MOV R0,#7FH MOV A,TEMPER_L JB ACC.3,DISP4 MOV A,#00H AJMP DISP5DISP4:

MOV A,#05HDISP5:

ACALL SCAN_TABDISP6:

RETSCAN_TAB:

MOV DPTR,#TAB MOVC A,@A+DPTR ;查表,取显示字符

MOV DPTR,#PORTB JB KEY_HMK,SCAN_1 JB KEY_LMK,SCAN_1 CJNE R0,#0BFH,SCAN_1 ORL A,#80HSCAN_1:

MOVX @DPTR,A;显示字符送B口

MOV DPTR,#PORTA MOV A,R0 MOVX@DPTR,A ;显示位送A口,显示数据个位

MOV R6,#0FH ACALL DEL1 RETTAB:

DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;共阴极字型码表

DB 7FH,6FH,36H,40H,38H,40H;DS18B20初始化程序INIT_1820:

SETB DQ NOP NOP CLR DQ ;将数据线下拉500μs

ACALLYS500 ;500μs延时子程序 ;

SETB DQ ;释放数据线 ;ORL P1,#02H ;P1.1转为输入 ;

ACALL DELAY1 ;80μs延时子程序 ;

JNB DQ,TSR3 ;判断DS18B20是否存在

AJMP TSR4 ;不存在,转TSR4TSR3:

SETB FLAG1 ;置标志位,表示DS1820存在

AJMP TSR5TSR4:

CLR FLAG1 ;清标志位,表示DS1820不存在

AJMP TSR7TSR5:

MOV R0,#6BH ;200μsTSR6:

DJNZ R0,TSR6 ;延时TSR7:

SETB DQ RET;重新写DS18B20暂存存储器设定值RE_CONFIG:

MOV A,#0CCH ;发SKIPROM命令

LCALL WRITE_1820 MOV A,#4EH ;发写暂存存储器命令

LCALL WRITE_1820 MOV A,HIG_TMP ;TH(报警上限)中写入指定值

LCALL WRITE_1820 MOV A,LOW_TMP ;TL(报警下限)中写入指定值

LCALL WRITE_1820 MOV A,#1FH ;选择9位温度分辨率

LCALL WRITE_1820 RET;延时子程序DELAY:

MOV R6,#0FFH ;延时130msDEL1:

MOV R7,#0FFHDEL2:

DJNZ R7,DEL2 DJNZ R6,DEL1 RETDELAY1:

MOV R7,#27H ;延时80μs DJNZ R7,$ RETYS500:

MOV R7,#0F9H ;延时500μsYS500_1:

DJNZ R7,YS500_1 RET

END

5.实训分析与总结

(1)该实训项目主要是以DS18B20为例,训练单片机应用系统与外围应用系统或部件组合的综合设计、分析与调试方法。学会分析和掌握专用芯片或器件的功能、控制方法和编程技巧,能根据专用芯片或部件的技术资料、读写时序要求设计硬件接口及软件编程,完成单片机应用系统的整个开发过程。

(2)实训项目中的难点是理解和掌握DS18B20的专用特性和功能,能根据厂商提供的技术资料,编制出相应的初始化程序、读写程序。

(3)程序仍采用模块化结构,键盘、显示、延时子程序可以采用原有子程序,本程序是在原有的子程序基础上进行简化而成的。(4)运行状态采用标志化管理可使程序结构更加简化。在上述程序中,对各按键的操作过程和状态都采用标识位来描述,对于不应具有连动功能的按键采用标志位限制,只有在键盘扫描程序确定没有任何按键按下时才清除按键标志。这样既可以起到按键防抖动的作用,同时还可防止由于误操作或按键习惯问题导致的按键被多次执行的情况。

(5)调试程序时,重点分析和调试DS18B20的初始化及读写程序,严格按照技术资料提供的时序要求,检查时序的前后次序和延时时间,要结合能反映故障存在与否的参数变化、运行路径变化、显示内容变化等选择合适的观测点和观测对象,再运用适当的调试方法,快速地检验调试结果,由此分析和判断出故障点。(6)为了能在实训室对温度测量进行测试,可分别设定温度的最高位和最低位分别为36℃和32℃(当时的室温)。由于人体的体温一般高于36℃,用手指接触测温点,会导致高温报警,从而启动风扇降温,拿开手之后,测温点的温度会逐步下降。如果此时的室温低于设定的最低温度,系统会启动蜂鸣器报警。调试程序时,如果显示的温度值与实际不符或没有显示,可以首先检查DS18B20的初始化过程是否成功,然后在读取温度值的操作完成后检查所读到的值是否正常,确信没有问题的情况下,检查数据转换和显示程序是否存在问题。6.参考资料

1)DS18B20简介

(1)独特的单线接口方式:当DS18B20与微处理器连接时,仅需要一条数据线即可实现微处理器与DS18B20的双向通信。

(2)使用中不需要任何外围元件。

(3)可用数据线供电,电压范围为+3.0~+5.5V。

(4)测温范围为-55~+125℃。固有测温分辨率为0.5℃。

(5)通过编程可实现9~12位的数字读数方式。(6)用户可自设定非易失性的报警上下限值。

(7)支持多点组网功能,多个DS18B20可以并联在惟一的数据线上,实现多点测温。

(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。2)DS18B20的内部结构图2.2.7DS18B20内部结构图(1)64位光刻ROM的结构如下:MSB LSB MSB LSB MSB LSB

开始8位是产品类型的编号,接着是每个器件的惟一序号,共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一线进行通信的原因。(2)非易失性温度报警触发器TH和TL,可通过软件写入用户报警上下限。

(3)高速暂存存储器。DS18B20温度传感器的内部存储器包括一个高速暂存SRAM和一个非易失性的可电擦除的E2PROM。后者用于存储TH,TL值。数据先写入SRAM,经校验后再传给E2PROM。而配置寄存器为高速暂存器中的第5个字节,其内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如下:

低5位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,即设置分辨率,如表2.2.1所示(DS18B20出厂时被设置为12位)。表2.2.1R1和R0模式表

由表2.2.1可见,设定的分辨率越高,所需要的温度数据转换时间就越长。因此,在实际应用中要在分辨率和转换时间之间权衡考虑。高速暂存存储器除了配置寄存器外,还有其他8个寄存器,其分配如下所示。其中,第1、2个寄存器存储温度信息,第3、4个寄存器存储TH和TL值,第6~8个寄存器未用,表现为全逻辑1;第9个寄存器存储的是前面所有8个寄存器内容的CRC码,可用来保证通信正确。

当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2个寄存器。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625℃/LSB形式表示。温度值格式如下:

对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。表2.2.2所示为对应的一部分温度值。表2.22部分温度值

(4)CRC的产生。在64bROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。3)DS18B20的测温原理

DS18B20的测温原理如图2.2.8所示。图中低温度系数振荡器晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数振荡器晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,在每次测量前,首先将-55℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值。图2.2.8DS18B20的内部测温电路框图4)DS18B20与单片机的典型接口设计以MCS51单片机为例,图2.2.9为典型接口设计,P1.1口接单线总线。当DS18B20处于写存储器操作和温度A/D变换操作时,为保证在有效的DS18B20时钟周期内提供足够的电流,需要在数据线上加一个4.7kΩ的上拉电阻,另外两个脚分别接电源和地。主机控制DS18B20完成温度转换必须经过3个步骤:初始化、ROM操作指令、存储器操作指令。假设单片机系统所用的晶振频率为12MHz,根据DS18B20的初始化时序、写时序和读时序,分别编写3个子程序:INIT为初始化子程序,WRITE为写(命令或数据)子程序,READ为读数据子程序,所有的数据读写均由最低位开始。图2.2.9DS18B20与微处理器的典型连接

7.思考题

(1)DS18B20单线通信功能是按照什么方式完成的?它的操作协议是什么?

(2)DS18B20与MCU连接时为什么在数据线上要加一个4.7kΩ的上拉电阻?

(3)如果显示器件采用LCM162液晶显示模块,请编写一段程序将测得的温

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论