云南大学单片机实验84doc_第1页
云南大学单片机实验84doc_第2页
云南大学单片机实验84doc_第3页
云南大学单片机实验84doc_第4页
云南大学单片机实验84doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

实验8.4 简易数字显示温度计实验一 实验目的于要求 用PIC16F877A单片机和两只七段式LED数码管制作一个能够测量和显示室温的简易数显温度计。要求测量范围为0至40摄氏度,误差控制在正负1摄氏度以内。当用手触摸温度传感器时,能够观测到显示温度随之变化。二 实验内容1. 硬件电路设计为了完成本实验的要求,除了单片机及其附属电路之外,还要设计两部分的硬件电路:温度测量部分和数字显示部分,其中数字显示部分已经在本书第五章的相关实验中做过详细描述,这里不再重复,下面主要就温度测量电路进行阐述。一般而言,任何物理量的测量电路分为两个功能块:传感器和传感器调理电路,其中传感器主要将各种被测物理量转换为单片机系统能够认知的电信号,而调理电路则对传感器输出的电信号进行适当调整,以适应单片机系统的ADC模块的要求。这种调整包括电流/电压转换,阻抗/电压转换,信号线性矫正,信号放大以及阻抗匹配等,调理电路多由运算放大器构成。温度传感器是一种将温度转换为电量的转换装置,根据输出电量的种类,属性和灵敏度的不同,温度传感器的种类也非常庞杂。常用的温度传感器有热电偶,金属热电阻,半导体温度传感器等几类。2.软件设计思路本实验的软件设计部分分为三个部分:ADC模块的初始化、AD转换结果到显示数据的转换以及AD转换的控制。1. ADC模块初始化实验要求测量温度范围是040度,这个范围内LM35的输出电压在00.4V,其最高电压0.4V小于参考电压的1/4,也就是说,10位的转换结果的高两位一定是0,采用右对齐的存放方式使得转换结果寄存器的高字节ADRESH总是0,而转换结果可以完全存放在转换结果低字节寄存器ADRESL中。2. A/D转换结果到显示数据的转换A/D转换结果到显示数据的变化是本实验的难点,但理解这部分内容对于正确使用A/D转换结果具有重要意义。3. A/D转换结果的控制本实验软件设计的第三个部分是A/D转换的控制,即如何处理A/D转换、结果变化以及数码管显示之间的关系。由于ADC模块能够独立于PIC16F877A的CPU内核进行采样和转换工作,处理A/D转换及其他CPU内核之间关系的基本原则是令他们同时进行,以节约耗费的总体时间。三 实验步骤及结果1. 从实验套件提供的元器件中找出TO-92封装,标有LM35的集成电路,将其焊接在标有TEMP的位置上。2. 找出一只标有104,容量为0.1uF的电容,将其焊接在电路板上标有C6的位置。3. 选择跳线器JP_RA的第二个跳线器用于选择引脚RA1/AN1的硬件连接方式。4. 选择跳线器JP_RD用于选择单片机RD口的连接方法。5. 两只七段数码管及其配套电路的识别和焊接方法已经在本书第四章进行过描述。6. 从PC的缺省路径上安装MPLAB及ICD3的驱动程序。7. 从开始菜单运行MPLAB,打开MPLAB后,在Project菜单中选择Project Wizard。单击弹出的工程向导窗口中的“下一步”按钮;在工程向导第一步(Stop One)的窗口中选择本工程要使用的单片机型号PIC16F877A;在工程向导第二部(Step Two)的窗口中选择合适的编译工具包Microchip MPASM Toolsuite,窗口中部显示了这个编译工具包内的工具,单击任何一个工具就会在窗口下部显示这个工具所在的路径,如果MPLAB安装在缺省路径则无需修改这些工具的路径;在工程向导第三步(Step Three)的窗口中给新创建工程命名并选择新创建的工程所在的路径;在工程向导第四步(Stop Three)的窗口中,可以将能重复使用的程序文件拷贝到本工程中。完成以上四步后就输入了创建新工程所需的所有参数,工程向导将在最后的总结窗口中显示这些参数,核实无误后单击 “完成”即可完成新工程的创建工作。8. 配置单片机的基本工作方式。单击MPLAB开发环境中单击Configure菜单下Configuration Bits,在弹出的配置位窗口中首先去掉Configuration Bits set code复选框前面的小钩。接着逐一设置窗口中提供的单片机配置位:将振荡器(Oscillator)类型设置为“XT”;“看门狗(Watchdog Timer)”应该关闭,将其设置为“OFF”;将上电复位定时器(Power Up Timer)关闭;将电压检测电路(Brown Out Detect)关闭;低电压编程(Low Voltage Program)设置为“Disabled”;将数据EEPROM读保护(Data EE Read Protect)关闭;将用户程序Flash写保护(Flash Program Write)设置为“Write Protection Off”;将代码保护(Code Protect)关闭。完成以上设置后关闭配置位窗口。9. 将仿真器ICD3和实验套件电路板相连,连接时注意仿真器连接电缆的第一脚应该和本实验套件电路板上仿真器连接端子的第一脚相连。10. 将仿真器和PC端用USB电缆连接起来。11. 将外接电源适配器的一端连接在220V的市电插座上,另一端连接在实验套件电路板上供电。12. 单击MPLAB中出现的Reset and Connect to ICD按钮,如果以上所有连接和设置正确,MPLAB信息窗口中会显示连接正确,如果无法正确连接,请逐一检查以上每一步是否正确。13. 选择File菜单下的New命令新建一个汇编语言文件,输入按本实验要求所写的代码,保存时注意选择文件的类型为汇编语言源文件。14. 用右键单击MPLAB的工程管理窗口(可以用View菜单下Project打开或关闭),从弹出的快捷菜单中选择Add Files.,将上一步编写好的汇编文件加入工程中。15. 编译工程。在Project菜单中选择Build All。如果有错误,则根据输出窗口的提示改正之,直到完全正确。16. 单击Program Target Device快捷方式,分别将刚才编译成功的主机和从机的程序下载到目标单片机中。17. 运行程序,从数码管观察程序测得的室温。18. 用手触摸LM35,可以观察到数码管上显示的温度值有所增加。手离开LM35后可以观察到数码管上显示的温度值逐渐恢复原先的室温。#include p16f877a.incCOUNT1 EQU 20H ;定义外部循环变量COUNT1COUNT2 EQU 21H ;定义内部循环变量COUNT2COUNT3 EQU 22H ;定义循环变量COUNT3TEMP1_H EQU 23H ;定义TEMP1_H寄存器TEMP1_L EQU 24H ;定义TEMP1_L寄存器TEMP2_H EQU 25H ;定义TEMP2_H寄存器TEMP2_L EQU 26H ;定义TEMP2_L寄存器TEN_BIT EQU 27H ;定义十位ONE_BIT EQU 28H ;定义个位 ORG 00H NOP ;空指令 GOTO MAIN;* 函数名称:main;* 函数功能:初始化各引脚,测量温度;* 使用说明:MAIN CALL INITIAL ;调初始化子程序 LOOP CALL ADC ;调A/D转换子程序 CALL CHANGE ;调用转换结果变换程序 CALL DISPLAY ;调用显示程序 GOTO LOOP;* 函数名称:INITIAL;* 函数功能:初始化各引脚;* 使用说明:INITIAL BCF STATUS,RP1 ;转到体1 BSF STATUS,RP0 ; MOVLW 0x85 ;设定A/D转换的输入端为RA1,转换 MOVWF ADCON1 ;结果右对齐,参考电压为外接电源 BSF TRISA,1 ;设RA1为输入 BCF TRISE,0 ;设RE0为输出 BCF TRISE,1 ;设RE1为输出 CLRF TRISD ;定义RD端口全为输出 BCF STATUS,RP1 ;转到体0 BCF STATUS,RP0 MOVLW 0xC9 ;选择模拟通道AN1,设定工时 MOVWF ADCON0 ;钟为fRC,启动A/D转换 RETURN;* 函数名称:ADC;* 函数功能:A/D转换;* 使用说明:ADC CALL DELAY_11us ;调11us延时子程序 BCF STATUS,RP1 ;转到体0 BCF STATUS,RP0 BSF ADCON0,0 ;启动ADC BSF ADCON0,2 NEXT BTFSC ADCON0,2 ;检查转换是否结束 GOTO NEXT RETURN ;* 函数名称:CHANGE;* 函数功能:将A/D转换结果转化成十进制温度值CHANGE BANKSEL ADRESL ;选择体1 MOVF ADRESL ,0 ;将ADRESL的值存到W寄存器 BANKSEL TEMP1_L ;选择体0 CLRF TEMP1_H ;寄存器清零 CLRF TEMP1_L CLRF TEMP2_H CLRF TEMP2_L CLRF TEN_BIT CLRF ONE_BIT MOVWF TEMP1_L ;将A/D转换结果存到TEMP1_L MOVWF TEMP2_L ;将A/D转换结果存到TEMP2_L MOVF TEMP1_L,0 ;TEMP1左移8位 MOVWF TEMP1_H CLRF TEMP1_L MOVLW B11100000 ;TEMP2结果左移3位 ANDLW TEMP2_L MOVWF TEMP2_H RRF TEMP2_H,1 RRF TEMP2_H,1 RRF TEMP2_H,1 RRF TEMP2_H,1 RRF TEMP2_H,1 MOVLW B00011111 ANDWF TEMP2_L,1 RLF TEMP2_L,1 RLF TEMP2_L,1 RLF TEMP2_L,1 MOVF TEMP2_L,0 ;TEMP1=TEMP1-TEMP2 SUBWF TEMP1_L,1 BTFSS STATUS,C ;减法后,若无借位跳过下一条指令 DECF TEMP1_H MOVF TEMP2_H,0 SUBWF TEMP1_H,1 CLRF TEMP2_L ;TEMP2_L清零 BANKSEL ADRESL ;选择体1 MOVF ADRESL,0 BANKSEL TEMP2_L ;选择体0 MOVWF TEMP2_L ;将A/D转换结果存到TEMP2_L CLRF TEMP2_H ;TEMP2_H清零 MOVF TEMP2_L,0 ;TEMP2结果左移1位 ANDLW B10000000 MOVWF TEMP2_H RRF TEMP2_H,1 RRF TEMP2_H,1 RRF TEMP2_H,1 RRF TEMP2_H,1 RRF TEMP2_H,1 RRF TEMP2_H,1 RRF TEMP2_H,1 MOVLW B01111111 ANDWF TEMP2_L,1 RLF TEMP2_L,1 MOVF TEMP2_L,0 ;TEMP1=TEMP1+TEMP2 ADDWF TEMP1_L,1 BTFSC STATUS,C ;加法后,若无进位则跳过下一条指令 INCF TEMP1_H MOVF TEMP2_H,0 ADDWF TEMP1_H,1 CLRF TEMP1_L MOVF TEMP1_H,0 ;TEMP1结果右移10位 ANDLW B11111100; MOVWF TEMP1_L RRF TEMP1_L,1 RRF TEMP1_L,1 LOOP1 MOVLW D10 SUBWF TEMP1_L,0 BTFSS STATUS,C ;减法后,若无借位则跳过下一条指令 GOTO LOOP2 MOVWF TEMP1_L INCF TEN_BIT GOTO LOOP1 LOOP2 MOVF TEMP1_L ,0 ;将个位存到个位寄存器 MOVWF ONE_BIT RETURN;* 函数名称:DISPLAY ;* 函数功能:将十进制温度值通过数码管显示DISPLAY CLRF PORTD MOVF TEN_BIT,0 ANDLW 0FH CALL TABLE ;调用查表指令 MOVWF PORTD ;显示十位段码 BCF PORTE,0 ;关闭个位显示位码 BSF PORTE,1 ;选通十位显示位码 CALL DELAY_10ms MOVF ONE_BIT,0 ANDLW 0FH CALL TABLE ;调用查表指令 MOVWF PORTD ;显示个位段码 BCF PORTE,1 ;关闭十位显示位码 BSF PORTE,0 ;选通个位显示位码 CALL DELAY_10ms RETURN;查表子程序,用于显示段码数字;数码管为共阴数码管TABLE ADDWF PCL,1 RETLW 3FH ;0 RETLW 06H ;1 RETLW 5BH ;2 RETLW 4FH ;3 RETLW 66H ;4 RETLW 6DH ;5 RETLW 7DH ;6 RETLW 07H ;7 RETLW 7FH ;8 RETLW 6FH ;9;* 函数名称:DELAY_11us ;* 函数功能:延时11us;* 使用说明:DELAY_11us MOVLW D2 ;设置循环次数 MOVWF COUNT3 ;LOOP3 DECFSZ COUNT3 ,1 ;循环变量自减1,为0则跳转 GOTO LOOP3 ; RETURN ;返回主程序;* 函数名称:DELAY_10ms ;* 函数功能:延时10ms;* 使用说明:DELAY_10ms MOVLW D14 ;设置外部循环次数 MOVWF COUN

温馨提示

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

评论

0/150

提交评论