《单片机数据采集课程设计(24页).doc》由会员分享,可在线阅读,更多相关《单片机数据采集课程设计(24页).doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-目录0.前言11课程设计的目的和要求21.1课程设计的目的21.2课程设计要求22.总体设计32.1系统框图32.2设计原理43.硬件设计53.1芯片介绍53.2相应的命令控制字格式93.3硬件连接图104.软件设计104.1程序框图104.2程序清单145.实验数据145.10通道数据分析表145.2程序运行图146结束语147.参考文献15附录一:硬件图连接16附录二:程序清单17附录三:程序运行图22单片机数据采集控制系统0.前言单片机的应用简介单片机是一种集成在芯片,是采用技术把具有数据处理能力的中央处理器CPURAM、多种I/O口和中断系统、定时器/等功能(可能还包括显示驱动电路、
2、电路、模拟多路转换器、等电路)集成到一块硅片上构成的一个小而完善的。目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能,民用豪华轿车的安全保障系统,、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域
3、,大致可分如下几个范畴: (1).在仪表上的应用 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的,可实现诸如电压、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或更加强大。例如精密的测量设备(,各种分析仪)。 (2).在工业控制中的应用 用单片机可以构成形式多样的控制系统、。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。 (3).在家用电器中的应用 可以这样说,现在的家用电器基本上都采用了
4、单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他视频器材、再到量设备,五花八门,无所不在。 (4).在计算机网络和通信领域中的应用 现代的单片机普遍具备,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,对讲机等。 (5).单片机在医用设备领域中的应用 单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。 (6).在各种大型电器中的模块化应用 某些专
5、用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复杂的类似于计算机的原理。如:音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。 在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。 (7).单片机在汽车设备领域中的应用 单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能,GPS导航系统,制动系统等等。 此外,单片机在工商,金融,科研、教
6、育,国防航空航天等领域都有着十分广泛的用途。1课程设计的目的和要求1.1课程设计的目的运用单片机原理及其应用等课程知识,根据题目要求进行软硬件系统的设计和调试,从而加深对本课程知识的理解, 把学过的比较零碎的知识系统化,比较系统的学习开发单片机应用系统的基本步骤和基本方法,使学生应用知识能力、设计能力、调试能力以及报告撰写能力等有一定的提高。1.2课程设计要求用8051单片机设计数据采集控制系统,基本要求如下:1、 可实现8路数据的采集,假设路信号均为0-5V的电压信号;2、 采集数据可通过数码管显示,显示格式为:通道号 电压值,如 .53、 可通过键盘设置采集方式;(单点采集、多路巡测、采集
7、时间间隔*)4、 具有异常数据声音报警功能:对第一路数据可设置正常数据的上限值和下限值,当采集的数据出现异常,发出报警信号。5、 可输出8路顺序控制信号,设每路顺序控制信号为一位,顺序控制的流程为:6、 可输出频率为1kHZ的方波,三角波,正弦波*。选做功能:1、 异常数据音乐报警2、 输出方波,三角波,正弦波频率可调2.总体设计2.1系统框图2.2设计原理数据采集系统,从严格的意义上来说,应该是用计算机控制的多路数据自动检测或巡回检测,并且能够对数据实行存储、处理、分析计算以及从检测的数据中提取可用的信息,供显示、记录、打印或描绘的系统。数据采集形同一般有数据输入通道,数据存储与管理,数据处
8、理,数据输出及显示这五个部分组成。输入通道要实现对被测对象的检测,采样和信号转换工作。数据存储与管理要用数据存储器把采集到的数据存储起来,建立相应的数据库,并进行管理和调用。数据处理就是从采集到原始数据中,删除有关干扰噪声,无关信息和必要的信息,提取出反应被测对象特征的重要信息。另外,就是对数据进行统计分析,以便于检索;或者吧数据恢复成原来物理量的形式,以可输出的形态在输出设备上输出,例如打印,显示,绘图等。数据输出及显示就是把数据以适当的形式进行输出和显示。 本课程设计以单片机AT89C51芯片为控制核心和数据采集电路、LED数码管显示电路以及供电系统四大部分构成数据采集和功能显示。当有模拟
9、信号输入时,单片机控制A/D转换器,把要输入的模拟信号转换成相应的数字信号存入到单片机的内存中,再控制LCD显示驱动器把内存中的数字信号显示出来。通过键盘来改变LCD中显示的数据,把改变的数据通过控制D/A转换器输出成相应的模拟信号。3.硬件设计3.1芯片介绍(1)ADC0809芯片介绍ADC0809是为8位的、以逐次逼近原理进行模数转换的器件。其内部有一个8通道多路开关,它可以根据锁存后的信号,只选通8路信号中的一个进行A/D转换。主要特性:1)8路8位AD转换器,即分辨率8位。 2)具有转换起停控制端。 3)转换时间为100s4)单个5V电源供电 5)模拟输入电压范围05V,不需零点和满刻
10、度校准。 6)工作温度范围为-4085摄氏度 7)低功耗,约15mW。 内部结构 : ADC0809是CMOS单片型逐次逼近式AD转换器,内部结构如图1322所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换、外部特性(引脚功能) :ADC0809芯片有28条引脚,采用双列直插式封装,如图1323所示。下面说明各引脚功能。 IN0IN7:8路模拟量输入端。2-12-8:8位数字量输出端。ADDA ADDB ADDC:3位地址输入线,用于选通8路模拟输入的一路ALE:地址锁存允许信号,输入,高电平有效。 START: AD转换启动信号,输入,高电平有效。 EOC: AD转换
11、结束信号,输出,当AD转换结束时,此端输出一个高电平(转换期间一直为低电平)。 OE:数据输出允许信号,输入,高电平有效。当AD转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。 REF(+)、REF(-):基准电压。 Vcc:电源,单一5V。 GND:地。 ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 AD转换,之后EOC输出信号变低,指示转换正在进行。直到AD转换完成,EOC变为高电平,指示
12、AD转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平是,输出三态门打开,转换结果的数字量输出到数据总线上(2)MCS-51MCS-51系列单片机是美国Intel公司开发的8位单片机,又可以分为多个子系列。MCS-51系列单片机共有40条引脚,包括32条I/O接口引脚、4条控制引脚、2条电源引脚、2条时钟引脚。 引脚说明: P0.0P0.7:P0口8位口线,第一功能作为通用I/O接口,第二功能作为存储器扩展时的地址/数据复用口。 P1.0P1.7:P1口8位口线,通用I/O接口无第二功能。 P2.0P2.7:P2口8位口线,第一功能作为通用I/O接口,第二功能作为存储器扩
13、展时传送高8位地址。 P3.0P3.7:P3口8位口线,第一功能作为通用I/O接口,第二功能作为为单片机的控制信号。ALE/ PROG:地址锁存允许/编程脉冲输入信号线(输出信号)PSEN:片外程序存储器开发信号引脚(输出信号)EA/Vpp:片外程序存储器使用信号引脚/编程电源输入引脚RST/VPD:复位/备用电源引脚(3)DAC0832芯片介绍:DAC0832是美国数据公司的8位D/A转化器,片内带数据锁存器,电流输出,输出电流稳定时间为1m,功耗为20mW,其引脚说明如下: D0D7:数据输入线,TTL电平 ILE:数据锁存允许控制信号线 CS:片选信号线,低电平有效 WR1:数据锁存器写
14、选通输入线,负脉冲有效 XFER:数据传输控制信号输入线,低电平有效 WR2:DAC寄存器写选通输入线,低电平有效 IOUT1:电流输出线,当DAC寄存器为全1时电流最大 IOUT2:电流输出线,其值与IOUT1之和为一常数Rfb:反馈信号输入线,调整Rfb端外接电阻值可以调整转换满量程精度Vcc:电源电压线,为5V15范围VREF:基准电压输入线,范围为:10V10VAGND:模拟地DGND:数字地(4)74LS13874LS138是一个3-8译码器,共16个引脚,其引脚说明如下: A、B、C:选择端即信号输入端 E1、E2、E3:使能端,其中E1、E2低电平有效,E3高电平有效 Y0Y7:
15、译码输出信号,始终只有一个为低电平 Vcc:电源端,5V GND:线路地(5)74LS273管脚功能:74LS73中文资料:是带有清除端的8D触发器,只有在清除端保持高电平时,才具有锁存功能,锁存控制端为11脚CLK,采用上升沿锁存。 CPU 的ALE信号必须经过反相器反相之后才能与74LS273的控制端CLK 端相连。1).1脚是复位CLR,低电平有效,当1脚是低电平时,输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部输出0,即全部复位;(2).当1脚为高电平时,11(CLK)脚是锁存控制端,并且是上升沿触发锁存,当11脚有一个
16、上升沿,立即锁存输入脚3、4、7、8、13、14、17、18的电平状态,并且立即呈现在在输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)上.第一脚WR:主清除端,低电平触发,即当为低电平时,芯片被清除,输出全为0(低电平);CP(CLK):触发端,上升沿触发,即当CP从低到高电平时,D0D7的数据通过芯片,为0时将数据锁存,D0D7的数据不变(6)74LS24574LS245是我们常用的芯片,用来驱动led或者其他的设备,用法很简单如上图,这里简单的给出一些资料,他是8路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向
17、三态功能,既可以输出,也可以输入数据。当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)DIR=“1”,信号由 A 向 B 传输;(发送)当/CE为高电平时,A、B均为高阻态。(7)8255芯片说明:8255A是Intel公司生产的可编程输入输出接口芯片,它具有3个8位的并行I/O口,具有三种工作方式,可通过程序改变其功能,因而使用灵活,通用性强,可作为单片机与多种外围设备连接时的中间接口电路。8255有三种基本工作方式,三种工作方式由工作方式控制字决定,方式控制字由C
18、PU通过输入/输出指令来提供.三个端口中PC口被分为两个部分,上半部分随PA口称为A组,下半部分随PB口称为B组.其中PA口可工作与方式0、1和2,而PB口只能工作在方式0和1。8255共有40个引脚,采用双列直插式封装,各引脚功能如下:D0-D7:三态双向数据线,与单片机数据总线连接,用来传送数据信息。CS:片选信号线,低电平有效,表示芯片被选中。RD:读出信号线,低电平有效,控制数据的读出。WR:写入信号线,低电平有效,控制数据的写入。Vcc:+5V电源。PA0-PA7:A口输入/输出线。PB0-PB7:B口输入/输出线。PC0-PC7:C口输入/输出线。RESET:复位信号线。A1、A0
19、:地址线,用来选择8255内部端口。GND:地线。 3.2相应的命令控制字格式其中定时/计数器工作方式控制字TMOD格式如下:TMOD 字节地址:89HD7 D6 D5 D4 D3 D2 D1 D0GATEC/TM1M0GATEC/TM1M0 T1方式字 T0方式字其中,M1、M0为方式选择,C/T为定时/计数选择,GATE为定时器/计数器工作方式选择中断允许寄存器IE格式如下:IE 字节地址:A8HD7 D6 D5 D4 D3 D2 D1 D0EAESET1EX1ET0EX01FH ACHABH AAH A9H A8HEA为开中断标志 ES串口中断允许标志ET0/ET1:定时器/计数器T0/
20、T1中断允许标志位EX0/EX1:INT0/INT1中断允许位3.3硬件连接图 (详见附录一)4.软件设计 4.1程序框图图1.主程序流程图 图2.十六进制转化十进制 图3.报警子程序流程图子程序流程图 图4 显示子程序流程图 .图5.中断子程序流程图 图6.键盘扫描子程序流程图4.2程序清单(详见附录二)5.实验数据5.10通道数据分析表显示值测量值绝对误差相对误差0.50 0.50 0.00 0.00%1.00 0.92 0.08 8.00%1.50 1.42 0.08 5.33%2.00 1.88 0.12 6.00%2.50 2.35 0.15 6.00%3.00 2.80 0.20
21、6.67%3.50 3.28 0.22 6.29%4.00 3.72 0.28 7.00%4.50 4.21 0.29 6.44%5.00 4.68 0.32 6.40% 表 1 十进制转换误差分析表由表中数据可以得出,显示值与实际值的误差还比较大,通过采用查表法来转换十进制数将可以减小此次转换的误差。5.2程序运行图(详见附件三)6结束语 通过本次实验,基本上等于对我们做了一次系统的集中式培训,加深了我们对单片机知识的了解。在这次实验的软件编程上,我们运用到了ADC0809的A/D转换程序、DAC0832的D/A转换程序、键盘扫描的程序、十六进制与十进制转换的程序、中断程序及报警的相应程序设
22、计,在原有的基础上巩固了我们编写类似程序的能力。在硬件上运用到了MCS-51单片机、ADCA0809 A/D转换器、DAC0832 D/A转换器,8255定时器,LED数码管,LS138译码器等芯片,加深了我们对硬件电路的了解。虽然此次编写完成的程序精度不够高,误差偏大,但是我们已经掌握了改进的方法,比如用查表法来十进制转换就能大大提高精度,这里由于时间关系没能来的及改正,相信在以后的实习过程中,我们将能更好的运用各类方法来完成任务。7.参考文献1 徐爱卿,孙涵芳,盛焕鸣 单片机微型计算机应用和开发系统 背景航空航天大学出版社 1992年2 张毅刚,彭喜元,孟升卫,刘兆庆 MCS-51 单片机
23、使用子程序设计(第二版) 哈尔滨工业大学出版社 2003年3 陈建铎 单片机应用技术(第一版) 陕西科学技术出版社 1991年4 陈建铎 0809单片机原理及应用技术(第一版)电子工业出版社 1995年5 胡汉才 单片机原理及接口技术(第二版)清华大学出版社 2004年附录一:硬件图连接附录二:程序清单 ORG 0000H JMP START ORG 000BH LJMP INTO ORG 05A0HSTART: SETB EA SETB TR0 SETB ET0 MOV TMOD,#01H MOV TL0,#0F0HMOV TH0,#0D8H ;中断初始化SE11: MOV SP,#53H
24、;定义指针地址 MOV 7EH,#0CH MOV 7DH,#00H MOV 7CH,#00H MOV 7BH,#15H MOV 7AH,#10H MOV 79H,#10H ;显示缓冲区初值(放六个数码管的数据缓冲区) MOV 7FH,#00H MOV R5,#00H SETB P3.0 OUTBIT equ 0ffddh ;位控制口/键扫口 OUTSEG equ 0ffdch ;段控制口 IN equ 0ffdeh ;键盘读入口 LedBuf equ 60h ;显示缓冲LO18: CALL DIS ;显示 CALL SCANKEY ;键盘扫描 MOV DPTR,#0FFE0H ;0809地址为
25、0FFE0H,选择输入控制口为Y0 CJNE A,#20H,LO20 ;判断键盘是否有按键按下,没有则保存数据显示,有则跳至LO20LO19: MOV R5,7CH ;将通道号保存到R5 CALL DIS ;显示 MOV 7CH,R5 ;将通道号得值返回给缓存区7CH MOV A,R5 ;通道号得值给A MOVX DPTR,A ;0809的通道采样 MOVX A,DPTR ;取出采样值 CALL ALERM ;判断是否超出特定范围进行报警 MOV R0,#7AH ;定义R0的地址为#7AH,存放电压值 CALL PTDS ;采样值送显示缓冲区 SJMP LO18 ;循环 ;-键盘有按键按下时的
26、显示LO20: MOV 71H,A SUBB A,#07H ;判断按键值是否大于07,是则选择多路巡测,不是则单点采集 JC LO21 JMP LO22LO21: MOV A,71H ;进行单点采集 MOV 7CH,A ;将通道号的值存到7CH缓存区 MOVX DPTR,A ;0809的通道采样 CALL DIS ;显示 MOVX A,DPTR ;取出采样值 MOV R0,#7AH ;定义R0的地址为#7AH,存放电压值 CALL PTDS ;采样值送显示缓冲区 SJMP LO18 ;循环LO22: CALL DIS ;显示 MOV A,7FH ;R7内存放通道号 MOV DPTR,#0FFE
27、0H ;选择Y0输入控制 MOVX DPTR,A ;0809的0通道采样LO23:CALL DIS ;显示 MOVX A,DPTR ;取出采样值 CALL ALERM MOV R0,#7AH MOV 7CH,7FH ;通道号值存入7CH缓存区 MOV R6,7FH CALL PTDS ;采样值送显示缓冲区 CJNE R6,#07H,LO22 MOV 7FH,#00H MOV 7CH,7FH SJMP LO18 ;循环;-中断程序INTO: PUSH PSW PUSH ACC MOV TL0,#0F0H MOV TH0,#0D8H INC R6 CJNE R6,#64H,L01 ;延时1s MO
28、V R7,7FH INC R7 ;R7+1,即通道号自动加1 CJNE R7,#08H,L0 ;判断8路通道是否循环完成,完成则从0通道重新开始 MOV 7FH,#00H MOV R7,7FHL0: MOV 7FH,R7L01: POP ACC POP PSW RETI;-PTDS: MOV B,#51 ;A/255=x/5 DIV AB MOV R0,A ;将原十六进制数除以51,得到的商即为转换后十进制电压的整数位的值 DEC R0 ;地址减1,即到存放电压小数位地址 CLR A MOV R6,B MOV A,R6 MOV B,#5 DIV AB MOV R0,A ;将余数除以5得到电压小
29、数位的值 SUBB A,#0AH JNZ L1 ;判断小数位是否溢出,没有则子程序结束 INC R0 MOV R5,7AH MOV A,R5 INC A MOV R0,A ;溢出后返回整数位给整数值加1 DEC R0 MOV 79H,#00H ;小数位清零 MOV A,79HL1: RETDIS: PUSH DPH PUSH DPL ;压栈 SETB RS1 ;Rs0,Rs1表示R0R7分为四个区,默认为0007H的0区(00),2区为080F,3区为1017H,4区为181F(这里表示用10的三区) MOV R0,#7EH ;显示缓冲区 MOV R2,#20H ;从左边开始显示 MOV R3
30、,#00H MOV DPTR,#LS0 ;八段管显示码首地址LS2: CJNE R2,#02H,LS4 ; 判断是否到了第五个数码管显示位 MOV DPTR,#LS3 ;是则送点亮了小数点的八段管显示码首地址 SJMP LS5LS4: CJNE R2,#01H,LS5 ;不是则继续判断是否到了最后一个数码管显示位 MOV DPTR,#LS0 ;是则将八段管显示码首地址改为LS0LS5: MOV A,R0 ;R0内数据表示在所查表中的第几位 MOVC A,A+DPTR ;读取表中对应的数值 MOV R1,#0DCH ;段选,字形口地址 MOVX R1,A ;将A/D转换结果存于R1寄存器内 MO
31、V A,R2 ;位选(哪个数码管点亮) INC R1 ;字形口地址+1 MOVX R1,A ;位选值送到字形口LS1: DJNZ R3,LS1 ;延时 CLR C RRC A ;A右移一位,到下一位数码管显示 MOV R2,A ;位选地址存于R2 DEC R0 ;显示缓冲区地址减1 JNZ LS2 ;判断6位数据是否显示完,没有则跳到LS2继续循环 MOVX R0,A ;将位选地址存在R0内 DEC R0 ;R0-1 CPL A ;A按位取反 MOVX R0,A ;A的值存到R0内 CLR RS1 ;清空RS1 POP DPL POP DPH ;出栈 RETALERM: MOV 70H,A S
32、UBB A,#80H ;判断电压值是否大于2.5V JC ALERM1 ;大于报警,A08H时跳到ALERM1 CLR P3.0 ;亮灯报警ALERM1: JC ALERM2 ;再次判断电压值是否大于2.5V,大于则继续报警,小于则关闭报警灯 JMP ALARM3ALERM2: SETB P3.0ALARM3: MOV A,70H ;还原A内的值 RET;-扫描键盘SCANKEY: SETB RS1 MOV R2,#0FEH ;从最低列开始把列扫描初值存放在R2 MOV R3,#08H MOV R0,#00HLOOPS: MOV R1, #Low(OUTBIT) ;位控制口首地址送到R1 MO
33、V A,R2 ;扫描第一列 MOVX R1,A ;将其值送到R1 RL A ;A左移一位 MOV R2,A ;存放下一列的初始位 INC R1 ;位控制口地址+1 MOVX A,R1 ;列信息读出 CPL A ;A按位取反 ANL A,#0FH JNZ SACN ;屏蔽高四位,按位与,判断是否有键按下,按下则跳到SCAN输出按键值 INC R0 ;R0+1,列数加1 DJNZ R3,LOOPS ;R3-1后,判断8列数据是否扫描完成RETKEY3: MOV A,#20H ;如果没有按键按下则将A的内容赋值为20H TKEY3: MOV R2,A ;将A的值即按键值给R2 CLR A ;A清零 MOV R1,# Low(OUTBIT) ;位控制口首地址送到r1 MOVX R1,A ;位控制口内的内容清零 MOV A,R2 ;将按键值给A CLR RS1 RETSCAN: CPL A ;A按位取反,还原按键值 JB ACC.0,TKEY0