8路模拟电压信号进行采集并循环显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前言
一直以来,科学都是人类文明不断进步的源泉,从最开始的原始人折树枝弄火,磨石头做各种器件,到现在的飞机大炮因特网,无一不彰示着我们的进步,无一不说明了科技在生活中的重要性。
而自从1840年,洋枪坚船利炮惊醒还在梦中的国人,经历了近100年的屈辱和血泪,终于看到了科技的重要性,明白了什么是落后就要挨打,只有科技进步了,国家才能强大!
本次专业课程设计就是锻炼理论和实际结合的能力,提高科技能力和科学思想。
随着计算机技术的飞速发展和普及,数据采集系统也迅速地得到应用。
在生产过程中,应用这一系统可对生产现场的工艺参数进行采集,监视和记录,为提高产品质量,降低成本提供信息和手段。
在科学研究中,应用数据采集系统可获得大量的动态信息,是研究瞬间物理过程的有力工具,也是获取科学奥秘的重要手段之一。
总之,不论在哪个应用领域中,数据采集与处理越及时,工作效率就越高,取得的经济效益也越高。
科学发展的今天,选择基于单片机八路数据采集系统设计是很有意义也是很有必要的。
第一章 设计要求
1.1 设计要求
(1) 对8路模拟电压信号进行采集并循环显示 (2) 模拟电压变换范围为:0 –5V (3) 测量精度小于±2%
(4) 测量温度用3位LED 显示器显示,1位显示循环通道
1.2 系统设计思路
图1.1 八路数据采集系统方框图
1.3 方案选择
1.3.1模拟输入方案
在试验中使用滑动变阻器改变输入电压,模拟数据采集。
此方案简单易懂,可操作性强,价格也比较便宜。
1.3.2 数据显示方案
利用试验使所提供的7279最小功能版来实现数据的显示和按键等试验要求。
在试验中如果使用四个数码管来实现,要使用动态显示,且实现按键功能等比较复杂。
要在P 口接多个按键,这样使程序很复杂。
使用7279最小功能板在试验中使用命令字87H~80H,收到此指令后,按以下规则进行译码0000~1001显示数字0~9,1010显示—,1111显示空白。
只需利用两个P 口就能够实现所有功能。
数据采集
数据变换
单片机
7279显示
信号转换
第二章 系统组成及工作原理
2.1 数据采集系统的组成
八路数据采集器:数据采集系统第0~7路输入自制0V ~5V 直流电压,各路输入可由滑动电阻器的电阻的改变而产生,不要求精度。
将各路模拟信号分别转换成8位二进制数字信号,在经并/串变换电路,用串行码送入传输线路。
图3.1 系统方框图
2.2 系统的组成及工作原理
此八路循环采样系统由电桥测温度模块,AD 转换模块,7279显示模块组成。
首
先由TP100将温度转换成电信号,经过放大后输入到ADC0809中,ADC0809将此信号转变成数字量,输入到AT89C2中,再通过7279将数字量显示出来。
模数转换器 7279最小系统
74LS273
锁存器
80C52
地址
地址
第三章硬件电路方案设计
3.1 单片机89C51说明
80C51是INTEL公司MCS-51系列单片机中最基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。
它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它继承和扩展了MCS-48单片机的体系结构和指令系统。
80C51内置中央处理单元、128字节内部数据存储器RAM、32个双向输入/输出(I/O)口、2个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
此外,80C51还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。
在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。
掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。
8051是典型的单片机,由CPU系统,外围功能单元和一体化的I/O端口3部分组成。
CPU系统:包括CPU,时钟系统和总线控制逻辑3部分。
CPU包含运算器和控制器,专门为面向控制对象,嵌入式特点而设计,有突出控制功能的指令系统。
时钟系统:包含振荡器,外接谐振元件,可关闭振荡器或CPU时钟。
总线控制逻辑:主要用于管理外部并行总线时序及系统的复位控制,外部引脚有RET、ALE、EA和PSEN。
外围功能单元包括ROM程序存储器,RAM数据存储器,I/O端口和SFR特殊功能寄存器4部分。
80C51基本功能单元包括定时/计数器、中断系统和串行接口3个基本功能单元。
3.2 A/D转换模块设计
多路数据采集系统,通过多路模拟开关控制多路之间的切换,实现单片A/D芯片对多路数据信号的逐个采集。
模数转换的核心是模数转换器(ADC),即A/D芯片。
它将输入的模拟信号进行量化,即把连续的模拟信号转换为计算机能处理的离散数字信号。
因此,数据采集系统的性能在很大程度上取决于A/D芯片的性能。
A/D芯片的主要参考指标是:量化误差、零位偏置误差、增益误差和非线性误差等。
3.3 显示电路模块设计
此显示模块是试验室所提供的,这块功能版能够扩展很多的功能,能够使用八个数码管和16个按键,且使用一定的命令,在数字显示时可以不用查表,且自带了动态显示功能,只需将数放到缓存区中,再使用指定的命令就能够将数字动态显示出来。
第四章 软件设计
4.1. 软件总体结构设计
开始
清40H~47H 单元的内容
给标志赋初值
开中断 7279初始化
判断MY 标志是否为#01H
0809采样
调用数据转换子程序
调用7279显示程序
单路数据采样标志=1?
从此时通道开始进行循环采样标志=1?
DPTR+1,DATAGA TE+1
调用延时子程序
DA TAGA TE=8?
DA TAGA TE 赋0,DPTR 赋0F900H
Y
N
N
N
Y
图4.1.1 程序主流程图
ST: MOV SP,#6AH
MOV R0,#40H
MOV R7,#8
EIGHT: MOV R0,#0 ;清40h-47h单元的内容INC R0
DJNZ R7,EIGHT
CLR MY
CLR YOU
CLR CIR
MOV GATEDATA,#00H
MOV DPTR,#0F900H
MOV IE,#10001011B
SETB IT0
ACALL CSH ;7279初始化
MOV R1,#01H
GO: JNB MY,HOME;复位键
AJMP ST
HOME: ACALL ADC0809
ACALL TRANS
ACALL DIS ;显示数据
JB CIR,GONE;判断单路采样
AJMP GO1
GONE: JNB YOU,GO;单路采样的值后进行循环采样ACALL DELY
GO1: INC GATEDATA
INC DPTR
ACALL DEL
MOV A,#07H
CLR C
CJNE A,GATEDATA,GET
GET:JNC GO
MOV GATEDATA,#00H
MOV DPTR,#0F900H
LJMP GO
4.1.1 中断服务子程序流程图
开始
调用读键值子程序
键值=0E?
键值=0F?
DPTR 赋0F900H ,R3赋08H
循环八次,根据所给的键值表将键值变成键号,
返回
置CIR 标志为1
置YOU 标志为1
置MY 标志为1
Y
N
Y
N
图4.1.2 中断服务程序流程图
中断服务程序如下所示:
INTR: PUSH ACC ;中断程序
ACALL REKEY
MOV R2,#0FFH
DJNZ R2,$
CLR C
CJNE A,#0EH,NOTJMP
SETB YOU
LJMP KEND
NOTJMP: JC KEND
CJNE A,#0FH,NOTJM
SETB MY
LJMP KEND
NOTJM: MOV B,A ;将键号转变成键值 MOV R2,#00H
MOV DPTR,#0F900H
MOV R3,#08H
KP1: PUSH DPH
PUSH DPL
MOV A,R2
MOV DPTR,#TAB
MOVC A,@A+DPTR
POP DPL
POP DPH
CJNE A,B,KP2
AJMP KP3
KP2: INC R2
INC DPTR
DJNZ R3,KP1
AJMP KEND
KP3: SETB CIR
MOV GATEDATA,R2
KEND: POP ACC
RETI
4.2 各模块软件程序流程
4.2.1 ADC 模数转换流程
试验中采用延时等待的方式来读取输入的电压值,转化结束后就返回到主程序中。
程序流程图如下图所示
图4.2.1 ADC0809程序流程图
单片机8052、ADC0809及或非门74LS02等共同组成数据采集系统的A /D 转换电路。
设有一路信号(0V~5V)从ADC0809的IN0通道输入,地址输人端A 、B 、C 均接地,这时IN0的通道地址为OOH 。
0809是8位ADC ,对0V-5V 的信号,其转换精度为20mV /级。
74LS138的Y 1和R W 、RD 共同组成ADC0809的口地址和启动转换控制信号。
当Y 1=0时,指定ADC0809的口地址为0F900H ;当8052的R W 来到时,0809的ALE 在脉冲的上升沿锁存地址信号,START 在脉冲的高电平启动A/D 转换。
在转换结束后的数字量锁存在0809内部的三态输出锁存器中。
当输出允许信号OE 为高电平时,转换
开始
启动ADC0809 延时,等转换结束。
将采样值送给A 将A 中的值送给
GETDA TA
返回
结果经数据线D7`~D0输出,8052采用了延时等待方式读取转换结果,也可以采用时等待的方式读取转换结果, A/D转换的程序如下:
ADC0809: MOV A,GATEDATA ;0809采样采样值送48h单元
MOVX @DPTR,A
MOV R4,#100
L0: DJNZ R4,L0
MOVX A,@DPTR
MOV GETDATA,A
RET
4.2.2 十六进制转换为三位BCD 码流程图及算法
开始
A 中的值除#51,赋给45单元
调用CHANGE 子程序
A 中的值加五
调用CHANGE 子程序
NI 标志=1?
NI 标志=1?
A 中的值加五
将A 中的值赋47单元
将A 中的值送46单元
返回
N
Y
N
Y
开始
置NI 标志为0
清C 标志,A 乘4跟102比
置NI 标志
C=0? A 乘10除51
返回
N
Y
CHANGE 子程序程序流程图
采样值转换成三位BCD 码程序主流程图
算法:先将ADC0809采样值送到A中,将A除以51,并将所的值送到45H单元,这样就获得了整数部分的值,将余数送到A中,比较A与#26H的大小,大于就置NI 标志为1.之后将A乘以10再除以51,判断NI标志是否为1,为1加5,再将A中的值送到46H单元。
同上一步,再将A中的值送到47H单元。
这样,就将一位十六进制数转换成三位BCD码数。
程序如下所示:
TRANS: MOV A,GETDATA;显示数据转为三位BCD码存入45H,46H,47H
MOV B,#51
DIV AB
MOV 45H,A ;个位数放入45H
ACALL CHANGE
JNB NI,LOOP2
ADD A,#5
LOOP2:MOV 46H,A ;小数后第1为放入46H
ACALL CHANGE
JNB NI,LOOP3
ADD A,#5
LOOP3:MOV 47H,A ;小数后第2位放入47H
RET
CHANGE: MOV A,B ;余数大于19H,乘法溢出,结果加5
CLR NI
PUSH B
MOV B,#2H
MUL AB
CLR C
CJNE A,#51,BEST
BEST:JC NEXT
SETB NI
NEXT:POP B
MOV A,#10
MUL AB
MOV B,#51
DIV AB
RET
第五章实验调试和测试结果与分析
5.1 硬件调试说明:
硬件调试可分为静态调试与动态调试两步进行。
静态调试是在用户系统未工作时的一种硬件检测。
先采用目测的方法检查外部的各种元件或者是电路是否有断点。
之后使用万用表测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
再给板加电,检测所有插座或是器件的电源端是否符合要求的值。
最后将程序拷入到89C52芯片中,再用万用表进行检测。
动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内
部故障、器件连接逻辑错误的一种硬件检查。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
在试验过程中,拷入程序后,有一个通道的采样值转换成三位BCD码后,改变电位器的值,但7279显示的值并没有发生改变。
用万用表检测后发现ADC0809并没有采到值,之后发现是电位器的一个管脚存在虚焊,重新焊接后,作品工作正常。
5.2程序调试
八路数据循环采集系统的主要分为以下几个模块:数据采集模块、AD转换模块、数据转换模块、7279数码管显示模块、键盘控制模块。
程序有点复杂,在程序设计时采取了大量调用子程序方法,在试验时,首先应根据程序运行的实际现象分析判断哪些因素可引起相关故障,再通过调试方法逐一认证和排除。
通过将没进行运行的程序隔离,逐步缩小产生问题的范围,就可以将程序中存在的问题解决。
在试验中,耗时最多的是终端服务程序,程序中不但要考虑寄存器的复用问题,还要考虑在运行中断服务程序时将改变一些值。
所以在中断程序开始就将一些需要保存的值推入堆栈,在中断程序结束时弹出堆栈。
但在调试中,在判断按了某个键后,跳到RETI时忘了将压入堆栈的值弹出堆栈,程序没有报错,但键值
读不出来,一直检查,最后才发现了问题所在。
改变位置后,程序就能够出来,按下指定键后能够实现试验所要求的功能。
5.3 调试结果
按下键值为#0FH的键后,能够实现复位功能,程序开始从0通道开始循环采样。
按下键值为1FH~14H的键后,能够实现单通道采样并显示,。
此显示数据根据输入信号的改变随时变化。
在此基础上按下键值为#0EH的键后,从特定的通道开始进行循环采样并显示改变输入信号和通道值。
在按下一些没有指定功能的键时,也能够实现复位功能,在中断程序中将读到的键值和#0EH比较,小于就退出中断,这样就将没有指定功能的键隔离了。
所有按键功能实现后,将采样值和实测值比较,误差比较大,且实测值的小数位大于5时,第一位的小数的误差在5之内,刚开始怀疑是硬件问题,将八个通道的值都比较后发现都存在一样的问题,开始怀疑是软件问题。
在检查软件时发现在判断是否加5的标志的建立存在问题。
仔细分析后将问题解决后就能够将误差控制在百分之二以内。
试验所测数据如下表所示:
通道标准值测量值误差
0 1.00 1.01 1.00%
1 3.00 2.98 -0.67%
2 2.50 2.48 -0.8%
3 1.50 1.51 0.67%
4 4.00 3.99 -0.25%
5 2.20 2.21 0.5%
6 1.20 1.19 -0.83%
7 2.00 2.02 1.00%
表5.1 试验测量数据
通过上面的测试表明,该系统的测量精度比较高,随着被测电压值的增大,误差越小。
误差产生的原因:一电源电压存在误差,二,模拟电路部分的电阻的阻值存在误差。
三 ADC0809在进行数字量的转换过程中存在误差。
用万用表测量电压时存在误差。
第六章结论及心得
在这次单片机课程设计试验中,学会了很多东西,也可以学到更多的知识。
试验后对汇编语言的理解就已经有了进一步的理解,同时也加深那些我们已经学过的各种计算机语言的理解。
在经过了此次单片机课程设计。
使我养成了模块化工程设计方法的习惯,在设计功能模块时候,得先确定是什么功能模块,并绐模块读取地址或数据和存储地址或传出变量。
只要这样,在需要时候进行调用或中断就可以了。
也使在别的程序中能够拿来就可以用
最后,单片机课程设计则结合以上两次设计的优点:既使用了软件又结合了硬件,并且告诉我们使用正确的接口。
经过这次经历,我不仅加深了对单片机理论的理解,还熟悉和掌握了单片机的许多基础设计语言和模拟单片机软件程序,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,做别人却没想到的事。
使之不断地战胜自己,超越前人。
这个设计过程中,我遇到过许多次失败的考验,尤其是在程序设计的过程中,先一个功能一个功能慢慢的实现,在结合起来使之能够实现多个功能。
这次课程设计让我受益匪浅,无论从知识上还是其他的各个方面。
但在实习中见过甚至使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。
在这次课程设计中又让我体会到了合作与团结的力量,当遇到不会或是设计不出来的地方,寻找同学帮助,而一个我百思不得其解的软件问题,就是一个同学给我一下就指出来了,当时有一种柳暗花明又一村的感觉。
在试验中还培养了团队合作精神,在方案的选择和程序的设计时,两个人互相讨论,最终取长补短,完成设计、
单片机是很重要的一门课程。
尽管我们在课堂学到的内容很有限,但在以后的学习中单片机还需要好好的深入研究和学习,学好了单片机也就多了一项生存的本钱。
最后感谢老师对我们的精心指导和帮助,感谢同学们对我的帮助。
参考文献
[1] 何立民.《单片机应用系统设计》.北航出版社;
[2] 张先庭.《单片机原理接口与C51应用程序设计》.国防工业出版社,:2011;
[3]童诗白,华成英。
模拟电子技术基础(第四版)。
高等教育出版社。
2009.3.
[4]阎石。
数字电子技术基础(第四版)。
高等教育出版社。
2009.2.
[5] 陈光东.《单片微型计算机原理及接口技术》.华中科技大学出版社;
[6] 房小翠.《单片机实用系统设计技术》. 国防工业出版社。
附录A
八路数据循环采集实物图
附录B 试验程序
ORG 0000H
LJMP ST
ORG 0003H
LJMP INTR
NI BIT 03H
YOU BIT 01H
CIR BIT 00H
MY BIT 02H
GATEDATA EQU 41H
CS EQU P1.0
CLK EQU P1.1
CDATA EQU P1.2
KEY EQU P1.3
KEYDATA EQU 36H
GETDATA EQU 34H
ST: MOV SP,#6AH
MOV R0,#40H
MOV R7,#8
EIGHT: MOV R0,#0 ;清40h-47h单元的内容 INC R0
DJNZ R7,EIGHT
CLR MY
CLR YOU
CLR CIR
MOV GATEDATA,#00H
MOV DPTR,#0F900H
MOV IE,#10001011B
SETB IT0
ACALL CSH ;7279初始化
MOV R1,#01H
GO: JNB MY,HOME;复位键
AJMP ST
HOME: ACALL ADC0809
ACALL TRANS
ACALL DIS ;显示数据
JB CIR,GONE;判断单路采样
AJMP GO1
GONE: JNB YOU,GO;单路采样的值后进行循环采样
ACALL DELY
GO1: INC GATEDATA
INC DPTR
ACALL DEL
MOV A,#07H
CLR C
CJNE A,GATEDATA,GET
GET: JNC GO
MOV GATEDATA,#00H
MOV DPTR,#0F900H
LJMP GO
CSH: CLR CS;初始化
MOV R6,#0CH
LA0: DJNZ R6,LA0;延时
MOV A,#0A4H
ACALL STFS;
MOV R6,#02H
LA1: DJNZ R6,LA1
SETB CS
RET
ADC0809: MOV A,GATEDATA ;0809采样采样值送48h单元 MOVX @DPTR,A
MOV R4,#100
L0: DJNZ R4,L0
MOVX A,@DPTR
MOV GETDATA,A
RET
TRANS: MOV A,GETDATA;显示数据转为三位BCD码存入45H,46H,47H MOV B,#51
DIV AB
MOV 45H,A;个位数放入45H
ACALL CHANGE
JNB NI,LOOP2
ADD A,#5
LOOP2:MOV 46H,A;小数后第1为放入46H
ACALL CHANGE
JNB NI,LOOP3
ADD A,#5
LOOP3:MOV 47H,A;小数后第2位放入47H
RET
CHANGE: MOV A,B ;余数大于19H,乘法溢出,结果加5
CLR NI
PUSH B
MOV B,#4H
MUL AB
CLR C
CJNE A,#102,BEST
BEST:JC NEXT
SETB NI
NEXT:POP B
MOV A,#10
MUL AB
MOV B,#51
DIV AB
RET
INTR: PUSH ACC ;中断程序
ACALL REKEY
MOV R2,#0FFH
DJNZ R2,$
CLR C
CJNE A,#0EH,NOTJMP
SETB YOU
LJMP KEND
NOTJMP: JC KEND
CJNE A,#0FH,NOTJM
SETB MY
LJMP KEND
NOTJM: MOV B,A ;将键号转变成键值 MOV R2,#00H
MOV DPTR,#0F900H
MOV R3,#08H
KP1: PUSH DPH
PUSH DPL
MOV A,R2
MOV DPTR,#TAB
MOVC A,@A+DPTR
POP DPL
POP DPH
CJNE A,B,KP2
AJMP KP3
KP2: INC R2
INC DPTR
DJNZ R3,KP1
AJMP KEND
KP3: SETB CIR
MOV GATEDATA,R2
KEND: POP ACC
RETI
REKEY:CLR P1.0 ;读键值程序
MOV R6,#0CH
LP1: DJNZ R6,LP1
MOV A,#15H
ACALL STFS
MOV R6,#06H
LP2: DJNZ R6,LP2
ACALL STJS
SETB P1.0
RET
DIS: MOV R7,#08H;显示程序,40-47h单元 MOV R0,#40H
MOV R1,#87H
ORL 45H,#80H
CLR CS
MOV A,#88H
ACALL STFS
MOV A,#0FFH
ACALL STFS
LC1: MOV R6,#0CH
LC2: DJNZ R6,LC2
MOV A,R1
ACALL STFS
MOV R6,#04H
LC3: DJNZ R6,LC3
MOV A,@R0
ACALL STFS
MOV R6,#02H
LC4: DJNZ R6,LC4
INC R0
DEC R1
DJNZ R7,LC1
SETB CS
RET
STFS: MOV R5,#08H ;发送子程序
SLP1: RLC A
MOV CDATA,C
SETB CLK
MOV R6,#02H
SLP2: DJNZ R6,SLP2
CLR CLK
MOV R6,#02H
SLP3: DJNZ R6,SLP3
DJNZ R5,SLP1
RET
STJS:MOV R7,#08H ;接受一字节子程序
SRE1: SETB P1.1
SETB P1.2
MOV R6,#02H
SRE2:DJNZ R6,SRE2
MOV C,P1.2
RLC A
CLR P1.1
MOV R6,#02H
SRE3:DJNZ R6,SRE3
DJNZ R7,SRE1
RET
DEL:MOV R5,#06H
DEL0:MOV R7,#0FFH
DEL1:MOV R6,#0FFH
JB CIR,BACK;退出延时
DEL2:DJNZ R6,DEL2
DJNZ R7,DEL1
DJNZ R5,DEL0
BACK:RET
DELY:MOV R5,#08H
DEL3:MOV R7,#0FFH
DEL4:MOV R6,#0FFH
JB MY,BACK1;退出延时
DEL5:DJNZ R6,DEL5
DJNZ R7,DEL4
DJNZ R5,DEL3
BACK1:RET
TAB: DB 1FH,1EH,1DH,1CH,17H,16H,15H,14H END。