




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、合肥学院计算机科学与技术系微机原理与接口技术课程设计2012 2013学年第 1 学期课程微型计算机原理与接口技术课程设计名称畜舍通风换气风机自动控制设计学生姓名邵磊学号1004013006专业班级10计本(2指导教师高玲玲、肖连军2013年 1月1、题意分析与解决方案1.1 题意需求分析根据本设计给定的内容和要求,可以得出以下结论:本设计中需要用到的主要是有控制输入和控制输出的芯片,实现DS18B20的温度采集以及用于显示的LED 管。其中最核心的是要DS18B20对当前温度的采集以及从DS18B20中讲温度传给CPU ,然后就是扫描你设置的预设温度,当温度高于设定值时,电机转动,降温。为了
2、观察方便,我们通过LED 数码管显示当前测得温度和预设的温度值,通过小键盘输入预设温度值。1.2 解决问题方法及思路结合题意要求,以下是我对这次试验所需硬件的分析。首先需要解决的是温度测控问题,因此温度传感器DS18B20必不可少,而DS18B20将温度信息传递给芯片8255A ;当温度高于设定值时利用功能放大电路以带动电机转动;由于要从键盘设定温度值和通过LED 显示温度,所以这一部分电路也是必备的(同时需要专用芯片8279 。综上所述列出硬件清单如下:表1-1 硬件清单 软件应该具备以下几个主要部分:(1对控制芯片8255A 的控制及操作(如读出DS18B20的温度,控制电机转动 ;(2对
3、通用控制芯片8279的操作(如8279的初始化,从键盘输入温度设定值,显示温度,清除显示等功能 ;(3对温度传感器DS18B20的操作(初始化/启动,读写温度,温度转换/显示 ;另外还要设置一定的延时程序以满足不同芯片及元器件的工作时序;2、硬件设计2.1选择芯片82551. 可编程并行接口芯片8255A(1 8255A 在本设计中的作用在本设计中8255A 作为对DS18B20进行操作的主要部件肩负着向温度传感器发送操作指令实现诸如:初始化DS18B20,读取温度值,对温度值进行十进制转换以及其他一些必要操作;然后传个8255A 的PC 口,同时8255A 全权控制着电机RT1的工作情况。(
4、2 8255A 功能分析8255A 是可编程并行接口,内部有3个相互独立的8位数据端口,即A 口、口和口。三个端口都可以作为输入端口或输出端口。口三种工作方式:即方式0、方式1和方式2,而口只能工作在方式0或方式1下,口通常作为联络信号使用。8255A 的工作只有当片选CS 效时才能进行。而控制逻辑端口实现对其他端口的控制。端口A :包含一个8位数据输出锁存器/缓冲器和一个8位数据输入锁存器,输入输出数据均受到锁存。端口B 和C: 都包含一个8位数据输入缓冲器和一个8位的数据输出锁存器/缓冲器,输出数据能锁存,输入数据不锁存。端口C:可分成两个4位端口,分别定义为输入或输出端口,还可定义为控制
5、、状态端口,配合端口A 和端口B 工作。8255A 是可编程外围设备接口(Programmable Peripheral Interface, 简写为PPI 图2-1 8255内部结构方式0的工作特点:这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。其功能为:两个8位通道:通道A 、B 。两个四位通道:通道C 高4位和低四位;任何一个通道可以作输入/输出;输出是锁存的;输入是不锁存的;在方式0时各个通道的输入/输出可有16种不同的组合。方式0的使用场合:同步传送是在外设控制过程的各种动作时间为固定,且已知的条件下使用的。因此,传送中不要应答信号。输入时
6、,执行程序只要给出IN 指令;而输出时,也只给出OUT 指令,就能实现数据的输入或输出。优点是程序简单,接口的硬件开销小。查询式传输时,要先查询一个外设的状态,当该状态表示外设已准备好时,方能开始查询传输,否则CPU 将继续查询。但在方式0,没有规定固定的应答信号,所以,这时将通道A 、B 作为数据通道,把通道C 的4个位(高4位或低4位)规定为输出口,用来输出一些控制信号,而把通道C 的另外4个位规定为输入口,用来输入外设的状态。这样,利用通道C 来配合通道A 和B 的输入/输出操作。8255方式选择控制字说明: 控制字格式如下:图2-2 8255A 控制字格式D 7=1工作方式控制标志。D
7、 5D 6组合设定A 口工作方式:00方式0;01方式1;1011方式2。D 4设定A 口的输入输出,D41时A 口输入,D 40时A 口输出。D 3为C 口高4位输入输出选择,D 31时为输入,D 30时为输出。D 2为B 口工作方式选择,D 21时B 口方式1;D 20时B 口方式0。D 1为B 口输入输出选择,D 11时输入;D 10时输出。D 0为C 口低4位输入输出选择,D 01时为输入,D 00时为输出。(4 8255技术参数8255A 工作最大电流为120MA,VCC=-5V+5V,I (DAR )工作电流最大为4MA 。8255的输出电压不高,连接到LED 时,最好加入一个驱动
8、器起到电流放大的作用。下表为8255A 主要参数说明:表2-1 8255A 主要技术参数 2.DS18B20温度传感器(1 DS18B20在本设计中的作用本实验设计中DS18B20作为唯一的温度传感器,其作用是测量出试验中各种所需温度并经由可编程接口芯片8255A 以及专用接口芯片8279将温度显示于LED 上,最终实验温度的比较,制热等功能。 (2 DS18B20的功能特点和内部结构DS18B20可编程温度传感器有三个管脚:GND 为接地线;DQ 为数据输入输出接口,通过一个较弱的上拉电阻与CPU 相连;VDD 为电源接口,既可由数据线提供电源,又可由外部提供电源,范围3.05.5V 。本系
9、统中使用外部电源供电。其主要特点为: 用户可以自行设定报警上下限温度值; 不需要外部组件,能测量-55+125°C范围内的温度; 在-10+85°C范围内的测温准确度为±0.5°C; 通过编程可以实现912位的数字读数方式,可在至多750MS 内将温度转换成12位数字,测温分辨率可达到0.0625°C; 独特的单总线接口方式,与微处理器连接时仅需要一条线既可实现和微处理器的双向通讯。图2-3 DS18B20 内部结构图温度传感器,非挥发的温度报警触发器TH 和TL ,配置寄存器。光刻ROM 中的64位序列号是出厂前被光刻好的,它可以看作是该DS
10、18B20的地址序列码。64位光刻ROM 的排列是:开始8位(28H )是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM 的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。(3 DS18B20测温原理和技术参数 图2-4 DS18B20测温原理DS18B20的测温原理如图所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。图中还隐含
11、着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在 -55 所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补
12、偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S 为符号位。下表显示了DS18B20用12位来存放温度的存储方式,其中最高位为符号位,负温度时 S=1,正温度时 S=0。表2-2 12位存放温度时的格式 这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM 中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,
13、只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。DS18B20的存储器:DS18B20温度传感器的内部存储器包括一个高速暂存RAM 和一个非易失性的可电擦除的E2RAM, 后者存放高温度和低温度触发器TH 、TL 和结构寄存器。 暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH 、TL 的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字
14、节是冗余检验字节。该字节各位的意义如下:表2-3 暂存器格式字 测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)分辨率设置表:表2-4 分辨率表 根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM 指令,最后发送RAM 指令,这样才能对DS18B20进行预定的操作。复位要求主CPU 将数据线下拉500微秒,然后释放,DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU
15、收到此信号表示复位成功。DS18B20的读写时序: 图2-5 DS18B20的读写时序图DS18B20的ROM 指令: DS18B20的RAM 指令: 2.3 七段LED 显示器本实验设计用7段LED 显示器的左四位来显示温度的设定值,剩下四位来显示实时的温度值,其中温度设定值的显示方法是从右到左依次显示设定值的低位到高位;而实时的温度值则采用动态的效果,并有小数位,能准确地反映温度的变化情况。七段LED 显示器可以控制在哪几个数位上,哪几个发光二极管亮,从而显示数字。其工作原理:如果发光二极管共阳极,则输入为0时亮,为1时不亮,反之如果发光共阴极,则输入1时亮,0时不亮。发光二极管时一种外加
16、电压超过额定电压时发生击穿,并因此能产生可发光的器件,数码显示器通常由多个发光二极管来组成七段或八段笔画显示器,当段组合发光时,便会显示某一个数码管或字符,七段代码的各位用作a g 和DP 的输入注:此时的驱动电流为25mA 图2-6 七段LED 显示器内部结构当七段数码管点亮其中几段可显示数字和简单的西文文字, 将七段数码管连接到一起称为公共端, 而放光二级管的正极则分别由引脚引出, 便于控制哪个发光二级管点亮.表2-8 七段共阳LED 显示器的真值表 2.4矩阵键盘实现对温度界限值的输入设定,矩阵键盘在工作时,是按照行线和列线交叉点的电平值来识别按键的,由人手按动键盘。当键释放后,该键就有
17、效。矩阵键盘将0F 这16哥键按行和列排列成矩阵形式。对于m ×n 个键的键盘,只需要m+n位I/O端口,我们的实验采用的是4×4键盘。在矩阵键盘中,通过行列交叉点上的电平值来识别按键,而行列线通过键盘数据格式确定,键盘数据格式如下:表2-9 键盘数据格式 编码,来自扫描计数器的低三位,R2 R1 R0是根据返回信号确定的列编码。通常使用的键盘是矩阵结构的。对于4×4=16个键的键盘,采用矩阵方式只要用8条引线和2个8位端口便完成键盘的连接。如图,这个矩阵分为4行4列,如果键5按下,则第1行和第1列线接通而形成通路。如果第1行线接低电平,则键5的闭合,会使第1列线
18、也输出低电平。矩阵式键盘工作时,就是按行线和列线的电平来识别闭合键的。 第0行第1行第2行第3行图2-7 4×4键盘矩阵图行扫描法识别按键的原理如下:先使第0行接低电平,其余行为高电平,然后看第0行是否有键闭合。这是通过检查列线电位来实现的,即在第0行接低电平时,看是否有哪条列线变成低电平。如果有某列线变为低电平,则表示第0行和此列线相交位置上的键被按下;如果没有任何一条列线为低电平,则说明第0行没有任何键被按下。此后,再将第1行接低电平,检测是否有变为低电平的列线。如此重复地扫描,直到最后一行。在扫描过程中,当发现某一行有键闭合时,也就是列线输入中有一位为0时,便退出扫描,通过组合
19、行线和列线即可识别此刻按下的是哪一键。下表显示了小键盘与逻辑开关在实际应用中的区别:表2-10 键盘和逻辑开关的比较 2.5 专用接口芯片8279在本设计中,8279作为专用接口芯片连接着七段LED 显示器和键盘,实现对输入温度设定值和显示实时温度的控制。 图2-8 8279内部结构8279采用单±5V电源供电,40脚封装。DB0DB7:双向数据总线,用来传送8279与CPU 之间的数据和命令。CLK:时钟输入线,用以产生内部定时的时钟脉冲。RESET:复位输入线,8279复位后被置为字符显示左端输入,二键闭锁的触点回弹型式程序 时钟前置分频器被置为31,RESET 信号为高电平有效
20、。CS:片选输入线,低电平有效,单片机在CS 端为低时可以对8279读/写操作。A0:缓冲器低位地址,当A0为高电平时,表示数据总线上为命令或状态,当为 低 电平时,表示数据总线上为命令或状态,当为低电平时,表示数据总线上为数据。 RD:读信号输入线,低电平有效,将缓冲器读出,数据送往外部总线。WR:写信号输入线,低电平有效,将缓立器读出, 将数据从外部数据总线写入8279的缓冲器。IRQ:中断请求输出线,高电平有效,在键盘工作方式下,当FIFO/传感器RAM 中有数据时,此中断线变为高电平,在FIFO/传感器RAM 每次读出时,中断线就下降为低电平,若在RAM 中还有信息,则此线重又变为高电
21、平。在传感器工作方式中, 每当探测到传感器信号变化时,中断线就变为高电平。SL0SL3:扫描线,用来扫描按键开关,传感器阵列和显示数字, 这些可被编程或被译码。RL0RL7:回送线,经过按键或传感器开关与扫描线联接, 这些回送线内部设置有上拉电路,使之保持为高电平,只有当一个按闭合时,对应的返回线变为低电平;无按键闭合时,均保持高电平。SHIFT:换位功能,当有开关闭合时被拉为低电平,没有按下SHIFT 开关时,SHIFT输入端保持高电平,在键盘扫描方式中,按键一闭合,按键位置和换位输入状态一起被存贮起来。CNTL/STB:当CNTL/STB开关闭合时将其拉到低电平,否则始终保持高电平, 对于
22、键盘输入方式,此线用作控制输入端,当键被按下时,按键位置就和控制输入状态一起被存贮起来,在选通输入方式中,作选通用,把数据存入FIFO RAM 中。OUTA3OUTA0及OUTB3OUTB0:显示输出A 口及B 口,这两个口是16×4切换的数字显示。这两个端口可被独立控制,也可看成一个8位端口。BD:空格显示, 此输出端信号用于在数字转换时将显示空格或者用显示空格命令控制其显示空格字符。VCC:5V 电源输入线。VSS:地线输入线。1)8279可按其功能分为:键盘功能块;显示功能块;控制功能块;与CPU 接口功能块控制功能块包括控制和定时寄存器,定时和控制,扫描计数器三部分,它主要用
23、来控制键盘和显示功能块工作。 控制和定时寄存器:用于存贮来自CPU 的编程命令,CPU 对8279编程以确定键盘与显示器工作方式和其它工作条件时,先把命令控制数据放到数据总线上, 然后使A0=1,WR=0,CS=0,并在WR 上升沿把命令键存在控制和定时寄存器中,经译码,建立适当功能。 控制:它含基本的定时计数器,第一个计数器是一个分频系数为2-31的前置定时器,分频系数可由程序预置,使内部频率为100KHz ,从而能给出5.1ms 键盘扫描时间和10.3ms 反跳时间,其它计数器将此基本频率分频后,提供适当的按键扫描、行扫描、键盘阵列扫描、以及显示器扫描次数。 扫描计数器:扫描计数器有两种工
24、作方式,在编码工作方式时,计数器提供一种二进制计数,通过管脚SL0-SL3输出后经外部译码才能提供给键盘和显示器的扫描作用,在译码工作方式时,扫描计数器对最低二位进行译码,SL0-SL3输出4选1的译码信号,作为显示器和键盘的译码扫描。 键盘功能块包括:返回缓冲器,键盘反跳及控制,8x8 FIFO 传感器RAM ,FIFO/传感器RAM 状态。2)返回缓冲器与键盘反跳及控制8条返回线被返回缓冲器缓冲,在键盘工作方式中,这几条线被逐个检测,以找出该行键中闭合的键。如果反跳电路测知某键闭合,则它等待10.3ms ,然后重核此键是否仍然闭合。如果仍闭合,那么该键在矩阵中的行列地址以及SHIFT 和C
25、NTL 的状态一起被送到FIFORAM 中,其在FIFO RAM中的数据格式如下:FIFORAM 数据格式 数据格式中,最高位CNTL ,次高位为SHIFT 状态,D5-D3来自扫描计数器,D2-D0来自返回计数器,扫描线计数器和回扫线计数器的值分别反映出被按下键的行、列的值,如果在传感器阵列中,返回线上的数据直接进入传感器RAM 中相应于阵列中正被扫中的那行,这样每个开关位置就直接反映为一个传感器RAM 的位置。显示RAM 和显示寄存器8279内部有16X8的显示RAM ,通过显示寄存器和两个四位端口0UTA0-3,OUTB0-3来刷新显示。显示器可以是白炽灯,也可以是8段数码管,显示RAM
26、 可以是16X8的形式,也可以构成两个16x4的RAM 形式。显示RAM 可由CPU 进行读写,被读写的RAM 字节地址由显示地址寄存器指示。显示地址寄存器保存当前CPU 读或写的那个RAM 地址,以及正显示着的那两个4位半字节的地址。读写地址由CPU 命令编程, 也可置为每次读写后地址自动加1的工作方式。在设置了正确的工作方式后,显示RAM 可直接由CPU 读出,半字节A 和半字节B 地址自动由8279更新,以适应由CPU 送入的数据,A 和B 半字节可独立送入,也可作为一个字送入,随CPU 所设置的工作方式而定。3)FIFO/传感器RAM 及其状态寄存器FIFO/传感器RAM 是一个双重功
27、能的8×8位RAM 。在键盘或选通工作方式时,它是FIFO RAM ,其输入/输出遵循先入后出的原则。此时,FIFO 状态寄存器存放FIFO 的工作状态,若FIFO 不空,IRQ 信号为高电平,向CPU 申请中断。在传感器矩阵方式工作时,该存储器用于存放传感器矩阵中每一个传感器的状态。在此方式中,若检出传感器发生变化,则IRQ 信号变为高电平,向CPU 申请中断。4)显示RAM 和显示地址寄存器显示RAM 用于存储显示数据,容量为16×8。在显示过程中,存储的显示数据轮流从显示寄存器输出。显示寄存器分为A 、B 两组,OUTA30、OUTB30。它们即可以单独送数,也可以组
28、成一个8位的字,OUT A 输出高4位,OUTB 输出低4位。显示寄存器的输出与显示扫描配合,轮流驱动被选中的显示器件,实现稳定的动态显示。显示地址寄存器用来寄存CPU 读/写显示RAM 的地址,它可以由命令设定,也可以设置成在每次读出或写入之后自动递增。1)键盘工作方式通过命令字可将键盘工作方式设定为双键互锁与N 键巡回两种工作方式。 双键互锁:若有两个键或多个键同时按下,8279电路只识别最后一个释放的键,并把键值送入FIFO/传感器RAM 中。 N 键巡回:若有多个按键同时按下时,键盘扫描将各键键值依按下顺序依次存入FIFO/传感器RAM 中。2)显示器工作方式通过设置键盘/显示命令字和
29、写显示RAM 命令字,显示数据写入显示缓冲器时可置为左端送入和右端送入两种方式。左端送入为依次填入方式,右端送入为移入方式。3)传感器矩阵方式通过设置读FIFO/传感器命令字,8279可工作于传感器矩阵方式,此时传感器的开关状态直接送到传感器RAM 。CPU 对传感器阵列扫描时,如果检测到某个传感器状态发生变化,则产生中断请求信号IRQ 。4 8279命令字1)键盘/ D7、D6、D5D2、D1、D0位键盘/显示工作方式设定位。2)时钟编程命令 D7、D6、D5CLK 输入端输入的外部时钟信号进行分频的分频系数N 。 3 读FIFO/ D7、D6、D5是读D2、D1、D0为FIFO/传感器RA
30、M 地址。 4 读显示RAM D7、D6、D5D3、D2、D1、D0为显示RAM 的存储单元地址。 5)写显示RAM D7、D6、D5RAM 的存储单元地址。6 )显示禁止写入D7、D6、D5组显示RAM 写入屏蔽位,当D3=1时,A 组的显示RAM 禁止写入,从CPU 写入显示RAM 数据时,这种情况通常用于双4位显示器,当D2=1时,可屏蔽B 组显示器。D1、D0位A 、B 组的消隐设置位。 7)清除命令 D7、D6、D5方式设定位,D1为置空FIFO 存储器设定位,D0为总清楚设定位。 8)结束中断/ D7、D6、D5为D4为1时,N 键轮回工作方式可工作得特殊出错方式,对传感器工作方式
31、,此命令使IRQ 变低,结束中断,并允许对RAM 进一步写入。表2-8 8279主要性能参数 2.6 数/模转换器DAC0832DAC0832是National Semiconductor 生产的一款D/A(数字/模拟)转换器,其采用CMOS 工艺和R 2RT 形电阻解码网络, 转换结果为一对差动电流 I01和 I02输出。在本设计中主要用来将开关打入的数字信号转换为相应的模拟信号。DAC0832芯片采用CMOS 工艺,四象限乘法型DAC ,与微机兼容,数据输入能与双缓冲、单缓冲或直接通过三种方式工作。是一个8位D/A转换器,输入电平与TTL 、CMOS 兼容,单电源+5+15V工作,基准电压
32、的范围为± 10V,电流建立时间为1µs,低功耗200mw ,20引脚,双列直接式封装。2.7 直流电机和逻辑测试灯直流电机本身作为输入器件,输入不同的电流会有不同的转速,而另一方面它又是输出器件,其内的光电开关有脉冲从REV 引脚输出。由于单板机中电流大小的限制,电机的转速最大可达到95r/s,而一转有四个脉冲产生逻辑笔则是利用两种颜色的发光二极管来区别高低电平,通过这种直观的方法能及时的掌握整个系统的工作情况。2.8 硬件总逻辑图及其说明硬件原理图: 图2-8 硬件连接图对于上面的硬件总逻辑图说明如下:首先利用和主机直接相连的可编程接口芯片8255的PC0口接到温度传感
33、器DS18B20的TOUT 端,来控制其工作;8255A 的PC7口通过运算放大器再经由电机RT1接到DS18B20的Tctrl 端,实现对温度传感器的加热(RT1接收到高垫片则发热,反之若接收到低电平则停止加热 。另一方面,通过专用接口芯片8279来控制键盘的输入接收与LED 灯的显示,反映温度的变化情况和实现对其的控制。注:原理图中作了部分简化,省去了接地端与时钟输入以使整张图紧凑,分布合理。温度的变化情况和实现对其的控制。接线说明: 表2-9 主机连线说明三、控制程序设计1. 控制程序设计思路说明本程序采用模块化的程序设计思想,将完成整个作业所需要的全部功能按要求划分为若干子模块。具体到
34、本设计而言,控制程序主要有:主程序块,设定温度初值子模块,初始化18B20子模块,读温度子模块,显示读出的温度值子模块,初始化8279子模块,扫描按键子模块,显示输入的温度设定值子程序,启动加热子程序及其他一些初始化程序和延时子程序。总的程序设计思路是首先通过温度传感器DS18B20测量出环境温度,利用8255来接收并通过芯片8279的控制使其显示到LED 上;同时利用8279控制键盘是用户能够输入一个两位数的温度值(温度设定值 ,也显示到LED 上;利用软件实现将这两个部分温度进行比较,当测得的温度值低于用户所设定的值时则有控制程序发出指令到发热电机上,此时实现温度控制功能;与此同时,控制程
35、序还在对两部分的温度值做着比较,当发现测量的温度值高于或者等于所设定的温度时便停止给电机供电。这样一个完整的温度控制就可以实现了。以下是笔者在设计及调试程序过程中所遇到的一些问题,在此就作为对部分控制程序的说明: 由于DS18B20采用串行数据传送和单总线数据传输方式,其数据输入输出都由同一条线完成。因此,对读写的操作时序要求严格。为了保证DS18B20有严格的读写时序,需要做较精确的延时。在操作中用到的延时有8us ,50us ,501us ,等,可以在程序设计时用延时子程序来读写延时操作。值得注意的是,首先要对8255A 进行初始化,否则可能和笔者遇到的情况一样但DS18B20的温度就已经
36、开始传送到数据端口等待输出了,这务必会造成极大的麻烦。 从DS18B20读出数据时也采用每位传输的方法经过PC0口传输到8255A 中,每次传输一位后暂存在AL 寄存器中,再把AL 寄存器中数据向右循环移位一次,数据被移动到标志位中,此时在用带标志位的循环移位指令把数据移动到另一个寄存器BL 里,这样就完成了一位数据的读出。在移位的时候也需要注意读写时序的问题,所以采用专门的延时程序控制。循环移位8次即表示传输了一个字节的数据,最后把BL 中的数据再传送到AL 寄存器中,完成数据的读出操作。 对8279进行操作时要注意与实际情况相结合修改控制字选择不同的显示方式,同时应注意左入口和右入口的区别
37、。 程序中显示温度值和界限值需要数码管不断显示,同时还需要电机可以正常工作,所以加热部分的延时程序即显示子程序中的延时。这样会在操作中保证在电机转动的同时温度值能动态的显示出来,且界限值也能够实时显示出来。2. 控制程序流程图(1主程序流程图 图3-1 主程序流程图2122(2DS18B20初始化子程序流程图 NO(3启动DS18B20 (4读出DS18B20的温度存放在AX(5初始化8279 (6读温度字操作流程图(7启动加热子程序流程图 23(8扫描按键子函数流程图 (9 显示温度设定值 注:以上为主要程序的流程图;其他部分(如初始化PCI 卡,延时子程序,转化BCD 等)均来在所查阅的文
38、献及参考其他的程序,因此流程图未给出。243. 控制程序.MODEL TINYPCIBAR3 EQU 1CH ;8位I/O空间基地址(它就是实验仪的基地址, 也为DMA & 32 BIT RAM板卡上的8237提供基地址 Vendor_ID EQU 10EBH ; 厂商ID 号Device_ID EQU 8376 ; 设备ID 号.STACK 300.DATAIO_Bit8_BaseAddress DW ?msg0 DB 'BIOS 不支持访问PCI $'msg1 DB ' 找不到Star PCI9052板卡 $'msg2 DB ' 读8位I/O
39、空间基地址时出错$'Con_8255 DW 00F3HPC_8255 DW 00F2HPB_8255 DW 00F1HPA_8255 DW 00F0HDAC0832_ADD DW 00D0H ;D/A转换口地址DATA0832 DB 0CMD_8279 DW 00B1H;8279命令字、状态字地址DATA_8279 DW 00B0H;8279读写数据口的地址TAB DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8 HDB 080H,90H ;七段代码表TAB1 DB 40h,79h,24h,30h,19h,12h,02h,78h,00h ,10hLIMIT_
40、1 DW ?; 用于保存输入的温度值TEMP DW ?; 用于保存18b20的温度值VOLTAGE DW ?;温度插值num dw ?al1 DB ?ah1 DB ?XX DB ?buffer db 8 dup(0 .CODESTART: MOV AX,DATAMOV DS,AXMOV ES,AXNOPCALL InitPCICALL ModifyAddress ;根据PCI 提供的基地址, 将偏移地址转化为实地址CALL Init8255CALL INIT8279 ;初始化子程序call DAC0832START1:KAYA: ;设置临界温度CALL SCAN_KEYJNC KAYA;cf=
41、0CALL KEY_NUMMOV AL1,AL;温度的十位KeyB:CALL SCAN_KEYJNC KeyBCALL KEY_NUMMOV AH1,AL;温度的个位; 转换为完整的十六进制MOV AL,AL1MOV CL ,6MUL CL;al和cl 相乘MOV XX,ALMOV CL,4MOV AL,AL1SHL AL,CL;左移4位ADD AL,AH1SUB AL,XXMOV AH,0CBW ;字节扩展为字MOV LIMIT_1,AXMain:CALL Init8255CALL START_Temperature;向DS18B20发送读温度指令CALL RD_Temperature ;
42、读出温度值, 并转换为BCD 码MOV TEMP, AXCALL DISPLAY_DATA ; 调用显示温度的25函数MOV DX,CMD_8279IN AL,DX ; 读状态AND AL,7 ;000 0111,相等zf=1 JZ y_KEYDOWN ;zf=1按下 JMP START1 y_KEYDOWN:MOV AX,TEMP ;将从DS18B20读取的温度存入AX 中 push axsub ax,limit_1 mov voltage,ax pop axCALL SPEECH mov di,1000yanshi1: ;0.5秒采集一次温度 call Delay501us dec di
43、cmp di,0 jnz yanshi1 JMP MAINSPEECH PROC NEAR MOV Ax,voltagecmp al, 0h;比较温度差和0的大小jl WenDu_0;小于零,cmp al,20h ;大于二 jg WenDu_2 mov al,40hmov DATA0832,al call DAC0832 jmp HITWenDu_2:cmp al,40h jg WenDu_3 mov al,60hmov DATA0832,alcall DAC0832 jmp HITWenDu_3:mov al,0ffh mov DATA0832,alcall DAC0832jmp HITWe
44、nDu_0:mov al,0h mov DATA0832,al call DAC0832jmp HIT HIT:ret SPEECH ENDP;* ;D/A子程序;* DAC0832 PROC NEARMOV DX,DAC0832_ADDMOV AL,DATA0832;给0832赋值 OUT DX,AL RETDAC0832 ENDP;* ; 温度转换/显示;*DISPLAY_DATA PROC NEAR mov si,0 STEP_1:mov ax,TEMP ;将存于TEMP 中的温度读入AX 中 mov bl,10and ax,000fh ;AX前12位整数位清0 mul bl;将ax 中
45、的内容乘以10, 得到将要显示的最低位x mov bl,16div bl ;al为显示的数值0-9 高位8位是余数,低八位是商,把16进制的转换成10进制call lay ;调用显示带小数点的数的子程序mov cl,4;移位的位数为四位 mov ax,TEMPshr ax,cl ;乘以0.0625, 相当于除以16,即算术逻辑右移四位next1: mov dx,0;dx先清零, 用于存放余数mov bx,10div bx ;dx和ax 拼接除以bx mov num,ax ;在ax 中mov al,dl ;余数在dl 中,并送显示 call lay1 mov ax,nummov cx,2;显示完
46、一个小数位和带小数点的整数位后还有两位整数位要显示,故cx 值置为2next2: mov dx,0 mov bx,10 div bxmov num,ax ;商在ax 中mov al,dl ;余数在dl 中,并送显示 call lay mov ax,num loop next2STEP_2: mov cl,4 mov ax,LIMIT_1 shr ax,cl ; 乘以0.0625,相当 于除以16,右移四位 mov cx,4 next3: mov dx,0 mov bx,10 div bxmov num,ax;商在ax 中mov al,dl ;余数在dl 中,并送显示 call lay mov
47、ax,num loop next3mov si,8 show:mov al,buffersi-1 MOV DX,DATA_8279 OUT DX,AL dec si cmp si,0 jnz show DISP: RETDISPLAY_DATA ENDPLAY proc near mov bx,offset Tabxlat ;经代码表转换为七段LED 的段码中,BX+AL->AL mov buffersi,al inc si retlay endpLAY1 proc nearmov bx,offset Tab1;取七段代码表的首地址存入bx 中xlat ;经代码表转换为七段LED 的段码
48、中,BX+AL->AL mov buffersi,al inc si retlay1 endp;* ;8279键盘功能模块;* ;8279初始化INIT8279 PROC NEARMOV DX,CMD_8279 ; CMD_8279为写命令地址、读状地址MOV AL,34H ;可编程时钟设置, 设置分频系数(20分频)OUT DX,ALMOV AL,10H ;8*8字符显示, 右边输入, 外部译码键扫描方式,双键互锁OUT DX,ALCALL INIT8279_1 RET INIT8279 ENDPINIT8279_1 PROC NEAR PUSH AXCALL CLEAR ; 清显示M
49、OV AL,90H ;从第一个数码管开始移位显示10010000OUT DX,AL POP AX RET INIT8279_1 ENDPCLEAR PROC NEARMOV DX,CMD_8279 ;1101 1110MOV AL,0DEH ; 清除命令OUT DX,AL WAIT1: IN AL,DX TEST AL,80H ;1000 0000JNZ WAIT1 ; zf=1,显示RAM 清除完毕吗? RET CLEAR ENDPSCAN_KEY PROC NEAR ;键盘扫描双键互锁MOV DX,CMD_8279;把8279的命令状态字地址赋值给dxIN AL,DX ; 读状态READ_
50、FIFO: AND AL,7 ;000 0111想与判断有几个键按下JZ NO_KEY ;zf=1;是否有键按下READ: MOV AL,40H ;0100 0000OUT DX,AL ; 读FIFO RAMMOV DX,DATA_8279;按键的数据IN AL,DXSTC ; 有键CF=1 SCAN_KEY1: RETNO_KEY: CLC ; 无键按下,清CF=0 JMP SCAN_KEY1 SCAN_KEY ENDPKEY_NUM PROC NEARAND AL,3FH ;0011 1111cntl ,shift 清零 RET KEY_NUM ENDP;* ; 写 0;* W_L PRO
51、C NEAR PUSH AX MOV DX,Con_8255 MOV AL,80H; 将PC0口电平拉低,三个口都为输出口 OUT DX,AL POP AX RET W_L ENDP;* ; 写 1;* W_H PROC NEAR PUSH AX MOV DX,Con_8255 MOV AL,01H;PC0口置1,;连18b20 OUT DX,AL POP AX RET W_H ENDP;* ;DS18B20复位初始化子程序;* INIT_18B20 PROC NEARCALL W_L ;主机发出501us 复位低脉冲CALL Delay501us MOV DX,Con_8255MOV Al,
52、89H;A,B输出,C0到C3输入,C4到C7输出OUT DX,AL ;PC输入状态/ DEC DX;DX-1送DX MOV CX,15;判断15次后仍然未发现ds18b20则表示其不存在INIT_18B20_1:IN AL,DX;读dx 的数据到alTEST AL,01H;查看PC0口是否被置成高电平JZ INIT_18B20_2;是则对其进行复位操作,zf=1pc被拉高LOOP INIT_18B20_1 STC ; 置位标志位,CF=1表示DS18B20不存在 RETINIT_18B20_2:CALL Delay501usCLC ; 复位标志位,CF=0表示DS18B20存在 RET IN
53、IT_18B20 ENDPDelay501us PROC NEAR PUSH AX PUSH CX PUSH DX MOV CX,167 MOV DX,PB_8255 Delay501us_1: IN AL,DXLOOP Delay501us_1 POP DX POP CX POP AX RETDelay501us ENDPDelay50us PROC NEAR PUSH AX PUSH CX PUSH DX MOV CX,12 MOV DX,PB_8255Delay50us_1:IN AL,DX LOOP Delay50us_1 POP DX POP CX POP AX RETDelay50
54、us ENDPDelay8us PROC NEAR PUSH AX PUSH CX PUSH DX MOV CX,2MOV DX,PB_8255Delay8us_1: IN AL,DX LOOP Delay8us_1 POP DX POP CX POP AX RETDelay8us ENDP;* ; 写操作;* WRITE_18B20 PROC NEAR MOV CX,8; 一共8位数据 WRI: CALL W_L;0->PC0 CALL Delay8us ROR AL,1; 将最低位置于cf 中,不带进位的循环右移 JNB WRI1; 如果cf=0,继续维持低电平, 相当于调用写0子程
55、序 CALL W_HWRI1: CALL Delay50us CALL W_H LOOP WRI RETWRITE_18B20 ENDP;*; 读操作:从DS18B20读出温度数据 ;* READ_18B20 PROC NEARMOV CX,8; 数据一共有8位 Read1: CALL Delay50us MOV DX,Con_8255 MOV AL,80H;pc0作为输出 OUT DX,AL;0->PC0,维持低电平 MOV AL,89H;pc0作为输入 OUT DX,AL; 输入状态 CALL Delay8us MOV DX,PC_8255IN AL,DX ROR AL,1 RCR BL,1;al 中内容放进bl 中备份 LOOP Read1 MOV AL,B
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国际商业设计师创意流派考核题及答案
- 快闪项目在广告设计中的应用探讨试题及答案
- 复习一览表的纺织工程师试题及答案
- 检验招聘笔试试题及答案
- 2024年纺织工程师证书考试高效学习试题及答案
- 2024年纺织品检验员证书考试形式试题及答案
- 2024年国际商业美术设计师考试品牌设计思考试题及答案
- 淮北中考英语试题及答案
- 广告设计的市场营销策略 试题及答案
- 洛阳一模语文试题及答案
- 大学生志愿服务西部计划考试复习题库(笔试、面试题)
- 《建筑制图与识图》课程标准
- 客货线铁路隧道锚杆施工作业指导书
- 箱涵工程监理实施细则
- 公路养护的高级工复习题
- 三人合伙经营协议书 doc 三人合伙经营协议书实用版(六篇)
- 葡萄酒品尝学第八章-2013
- JJF 1793-2020海水营养盐测量仪校准规范
- GB/T 20080-2017液压滤芯技术条件
- 超音速流动与燃烧的大涡模拟基础课件
- 归档文件目录
评论
0/150
提交评论