单片机课程设计实例数据采集系统.docx
《单片机课程设计实例数据采集系统.docx》由会员分享,可在线阅读,更多相关《单片机课程设计实例数据采集系统.docx(11页珍藏版)》请在冰豆网上搜索。
单片机课程设计实例数据采集系统
单片机课程设计报告
题目:
数据采集系统
学院:
工学院
专业:
电气工程及其自动化
班级:
电气072
姓名:
曹利军
学号:
2007154944
指导教师:
李志伟吴锴
2010年9月17
(一)设计任务
1.采用8051和ADC0809构成一个8通道数据采集系统。
能够顺序采集各个通道的信号。
2.先利用A/D转化器对各路电压进行采样,得到相应数字量,再按数字量与模拟量成正比关系运算得到相应的模拟电压值,然后将模拟量通过显示器显示出来。
3.采集信号的动态范围:
0~5V。
每个通道的采样速率:
100SPS。
4.要求四位LED数码管上轮流显示或单路选择显示,测试最小分辨率为0.019V,测量误差为±0.02V。
5.利用单片机仿真器,将采样数据送入单片机70H~77H存储单元。
6.编写相应的单片机采集程序,到达规定的性能。
(二)设计方案
硬件选择:
89C51,ADC0809,电源,单片机仿真器,LED,电位器,RAM,74LS02,开关K1K2。
接口芯片:
74LS244驱动及四个共阳极的LED数码管
软件部分:
1测量电压值最大是5V,显示最大值为5V。
2使用89C51单片机,6MH晶振,P0口读入A/D值,P2口为A/D转换控制口。
3采用T0定时100uS来产生5分钟来进行数据采集,
以下为主要芯片的简要介绍:
AD0809引脚图
1、AD0809的逻辑结构
ADC0809是8位逐次逼近型A/D转换器。
它由一个8路模拟开关、一个地址锁存译码器、一个A/D转换器和一个三态输出锁存器组成(见图1)。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
2、AD0809的工作原理
IN0-IN7:
8条模拟量输入通道
ADC0809对输入模拟量要求:
信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:
4条
ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的 通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如下表所示。
CBA选择的通道000IN0 001IN1010IN2011IN3100IN4 101IN5 110IN6 111IN7 数字量输出及控制线:
11条
ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。
D7-D0为数字量输出线。
CLK为时钟输入信号线。
因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,VREF(+),VREF(-)为参考电压输入。
3、ADC0809应用说明
(1)ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。
(2)初始化时,使ST和OE信号全为低电平。
(3)送要转换的哪一通道的地址到A,B,C端口上。
(4)在ST端给出一个至少有100ns宽的正脉冲信号。
(5)是否转换完毕,我们根据EOC信号来判断。
(6)当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。
4、AD0809的应用
了解完A/D转换芯片,下面我们以图2为例来完成它的程序设计。
电路说明:
CLK:
时钟输入信号,0809的时钟频率范围在10~1200kHz,典型值为640kHz。
图3ADC0809时序图
1.数据采集系统电路图:
图4系统电路图
ADC0809是带有8:
1多路模拟开关的8位A/D转换芯片,所以它可有8个模拟量的输入端,由芯片的A,B,C三个引脚来选择模拟通道中的一个。
A,B,C三端分别与8051的P1.0~P1.2相接。
地址锁存信号(ALE)和启动转换信号(START),由P2.7和/WR或非得到。
输出允许,由P2.7和/RD或非得到。
时钟信号,可有8051的ALE输出得到,不过当采用6M晶振时,应该先进行二分频,以满足ADC0809的时钟信号必须小于640K的要求。
(三)实验程序
ORG0000H
LJMPSTART
START:
CLRA
MOVP2,A
MOVR0,#70H
MOVR2,#0DH
LOOPMEM:
MOV@R0,A
INCR0
DJNZR2,LOOPMEM
MOV20H,#00H;00H位在20H字节中
MOVA,#0FFH
MOVP0,A;数据口
MOVP1,A;段码口
MOVP3,A;字位口
MAIN:
LCALLTEST;调用A/D转换程序
LCALLDISPLAY;调用显示程序
;显示子程序
DISPLAY:
JB00H,DISP11;为1跳DISP11
MOVR3,#08H;00H位=0循环显示
MOVR0,#70H;首地址
MOV7BH,#00H;选中0通道
DISLOOP1:
LCALLTUNBCD
MOVR2,#0FFH
DISLOOP2:
LCALLDISP
LCALLKEYWORK1
DJNZR2,DISLOOP2;延时
INCR0
INC7BH;循环选中8通道
DJNZR3,DISLOOP1
RET
DISP11:
MOVA,7BH;00H位=1跳来,实现单路显示
SUBBA,#01H
MOV7BH,A
ADDA,#70H
MOVR0,A
DISLOOP11:
LCALLTUNBCD
MOVR2,#0FFH
DISLOOP22:
LCALLDISP
LCALLKEYWORK2
DJNZR2,DISLOOP22;延时
INC7BH;通道号加1
RET
;显示数据转换为3位BCD码子程序
TUNBCD:
MOVA,@R0
MOVB,#51
DIVAB;A-商,B-余数
MOV7AH,A
MOVA,B
CLRF0
SUBBA,#1AH
MOVF0,C
MOVA,#10
MULAB
MOVB,#51
DIVAB
JBF0,LOOP2
ADDA,#5
LOOP2:
MOV79H,A
MOVA,B
CLRF0
SUBBA,#1AH
MOVF0,C
MOVA,#10
MULAB
MOVB,#51
DIVAB
JBF0,LOOP3
ADDA,#5
LOOP3:
MOV78H,A
RET
;LED扫描显示子程序
DISP:
MOVR1,#78H
MOVR5,#0FEH
PLAY:
MOVP1,#0FFH
MOVA,R5
ANLP3,A
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP1,A
JBP3.2,PLAY1
CLRP1.7
PLAY1:
LCALLDL5MIN
INCR1
MOVA,P3
JNBACC.3,ENDOUT
RLA
MOVR5,A
MOVP3,#0FFH
ENDOUT:
MOVP3,#0FFH
MOVP1,#0FFH
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,
82H,F8H,80H,90H,0FFH
;延时子程序
DL5MIN:
MOVTMOD,#10H
MOVTH1,#3CH
MOVTL1,#0B0H
CLRTF1
SETBTR1
MOVR4,#100
MOVR6,#30
WAIT0:
JNBTF1,WAIT0
CLRTF1
MOVTH1,#3CH
MOVTL1,#0B0H
DJNZR4,WAIT0
MOVR4,#100
DJNZR6,WAIT0
RET
A/D转换子程序
TEST:
CLRA
MOVP2,A
MOVR0,#70H;通道号地址
MOVR7,#08H;
LCALLTESTART
WAIT:
JBP3.7,MOVD;EOC=P3.7=1跳
AJMPWAIT
TESTART:
SETBP2.3;ALE=1
NOP
NOP
CLRP2.3
SETBP2.4;START=1
NOP
NOP
CLRP2.4
NOP
NOP
NOP
NOP
RET
MOVD:
SETBP2.5;OE=1
MOVA,P0
MOV@R0,A
CLRP2.5
INCR0;指向下一通道
MOVA,P2
INCA;地址加1
MOVP2,A
CJNEA,#08H,TESTEND
TESTEND:
JCTESTCON;C=1跳
CLRA
MOVP2,A
MOVA,#0FFH
MOVP0,A
MOVP1,A
MOVP2,A
RET
TESTCON:
LCALLTESTART
LJMPWAIT;
按键检测子程序
KEYWORK1:
JNBP3.5,KEY1;K1=P3.5=0跳KEY1
KEYOUT:
RET
KEY1:
LCALLDISP;按下K1后调用显示程序
JBP3.5,KEYOUT;K1=1跳(松开)
WAIT11:
JNBP3.5,WAIT12;K1=0跳
CPL00H;K1松开后切换显示方式
MOVR2,#0AH
MOVR3,#01H
RET
WAIT12:
LCALLDISP;按K1后调用显示
AJMPWAIT11
KEYWORK2:
JNBP3.5,KEY1;按K1后跳
JNBP3.6,KEY2;K2=0跳KEY2
RET
KEY2:
LCALLDISP;刷新显示
JBP3.6,KEYOUT;K2=1跳KEYOUT
WAIT22:
JNBP3.6,WAIT21;K2=0跳WAIT21
INC7BH;K2=1,通道号+1
MOVA,7BH
CJNEA,#08H,KEYOUT11
KEYOUT11:
JCKEYOUT1;C=1跳KEYOUT1
MOV7BH,#00H;通道号≥8,7BH清0
KEYOUT1:
RET
WAIT21:
LCALLDISP;刷新显示
AJMPWAIT22
END
(五)设计体会:
通过实验了解了A/D0809的作用以及其的接口作用,C52在整个实验做得作用了解锁存器的型号及作用,还有编程语言相互嵌套的强大魅力,同时也意识到自己知识的匮乏,对以后的学习是种无形的激励,总之这次实验我受益匪浅。
谢谢观赏