数据采集系统的设计与实现.docx
《数据采集系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《数据采集系统的设计与实现.docx(21页珍藏版)》请在冰豆网上搜索。
![数据采集系统的设计与实现.docx](https://file1.bdocx.com/fileroot1/2022-11/26/c452f883-1a38-4a7c-86bb-5d420cc94c6f/c452f883-1a38-4a7c-86bb-5d420cc94c6f1.gif)
数据采集系统的设计与实现
《汇编语言+微型计算机技术》
课程设计报告
课设题目
数据采集系统的设计与实现
系部
班级
学生姓名
学号
序号
指导教师
时间
目录
一、设计目的3
二、设计内容3
三、硬件设计及分析4
1.总体结构图4
2.各部件端口地址设计及分析4
3.各部件的组成及工作原理5
四、软件设计及分析7
1.总体流程图7
2.主要程序编写及分析8
五、系统调试12
1.调试环境介绍12
2.各部件的调试13
3.调试方法及结果19
六、总结与体会20
七、附录20
数据采集系统的设计与实现
一、设计目的
1.通过本设计,使学生综合运用《微型计算机技术》、《汇编语言程序设计》以及电
子技术等课程的内容,为以后从事计算机检测与控制工作奠定一定的基础。
2.主要掌握并行I/O接口芯片8253、8255A、ADC0809及中断控制芯片8259A等可编
程器件的使用,掌握译码器74LS138的使用。
3.学会用汇编语言编写一个较完整的实用程序。
4.掌握微型计算机技术应用开发的全过程:
分析需求、设计原理图、选用元器件、
布线、编程、调试、撰写报告等步骤。
二、设计内容
1.功能要求
①利用《微型计算机技术》课程中所学习的可编程接口芯片8253、8255A、
ADC0809和微机内部的中断控制器8259A(从保留的IRQ2或IRQ10端引入)设计一
个模拟电压采集系统,并且编程与调试。
②用8253定时器定时10MS,每次定时10MS后启动一次模/数转换,要求对所
接通道变化的模拟电压值进行采集。
③每次模/数转换结束后,产生一次中断,在中断服务程序中,采集来的数字
量被读入微处理器的累加器AL中,然后通过8255A输出到8个LED发光二极管显
示。
2.设计所需器材与工具
④微机原理与接口综合仿真实验平台。
⑤可编程芯片8253、8255A、ADC0809和译码器芯片74LS138、74LS245等。
⑥可调电位器4.7KΩ一个。
⑦其它逻辑器件、导线若干。
三、硬件设计及分析
1.总体结构图
图1总体结构图
2.各部件端口地址设计及分析
1、端口地址的设计
①8255的CS55连至译码处的200H-207H插孔(A口地址为200H,B口地址为201H,C口地址为202H,控制口地址为203H)。
②8259的CS59连地址译码区的218H-21FH(ICW1的地址为218H,ICW2的地址为219H)。
③8253的CS53片选孔用线连至译码处220H-227H这个孔(端口地址为223H、计数器0的地址为220H、计数器1的地址为221H、计数器2的地址为222H)。
④AD0809的连线:
CS79接译码处210H-217H这个插孔。
AD0809的CS09接译码处208H-20FH这个插孔(假输出时用端口地址208H)。
2、各个分析并调整、修改
①8255有两根地址线(A0、A1),所以它有四个地址可用,它们分别为控制端口D、A口、B口、C口,并且从A到D依次递加;所以想要调整它们的地址其实很简单,例如把片选改为208H,四个地址分别为208H、209H、20AH、20BH。
②8259只有一根地址线A0,所以它只有两根地址线可用,一个为偶地址一个为奇地址,ICW1用偶地址,ICW2、ICW4用奇地地;调整与修改:
例如把片选改为200H,那么ICW1用200H,ICW2、ICW4用201H。
③8253和8255差不多,它也有两个地址线(A0、A1),初始化的过程和调整、修改完全可以参照8255.
④AD0809的CS79接译码处210H-217H这个插孔。
AD0809的CS09接译码处208H-20FH这个插孔(假输出时用端口地址208H),调整与修改更简单,只需要改变片选即可。
3.各部件的组成及工作原理
1、8253模块(数据显示模块)
分析:
数据显示模块是由8255A与74LS245所组成的。
8255A有三个并行输入/输出接口,分别为A、B、C三个端口。
分别为:
方式0:
基本的输入输出方式,即无须联络就可以直接进行的I/O方式。
其中A、B、C口的高四位或低四位可分别设置成输入或输出。
方式1:
选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0。
方式2:
双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。
然后根据在程序中是设置的那种工作方式去与74LS245进行连接。
在程序中我所使用的是B口输入,A口输出的输出方式。
在这个模块中最主要的就是去怎样设置好输入与输出端口。
这就要要求我们在对8255A进行初始化的时候就要考虑清楚这个问题。
2、8259模块(中断管理)
分析:
中断管理模块主要74LS138来完成,74LS138为3-8译码器,可以产生8片选,但是在这个程序中只要用四个片选,即200-207、208-20F、210-217、218-21F。
74LS138其工作原理如下:
当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平。
可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。
同时,中断管理模块需要做的工作有设置中断向量。
在对中断进行设置的时候可以对中断类型号进行修改。
其实中断类型号的设置在对8259进行初始化的时候就完成了。
3、8253模块(定时模块)
分析:
8253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
8253可编程计数器/定时器,内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
工作原理:
8253具有3个独立的计数通道,采用减1计数方式。
在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。
当计数脉冲是已知周期的时钟信号时,计数就成为定时。
4、ADC0809模块(数据采集)
分析:
数据采集模块是用ADC0809来完成的,通过ADC0809来进行模数转换,ADC0809所采集的模拟信号转换为数字信号。
这个模块是用来对数据进行采集、处理、转换的部分。
在这个模块里我们要注意的是如何去处理在设计过程中该怎样去处理送入软件里面的信号的频率,我们在实验中ADC0809所接入的频率为0.25MHZ,但是也可以去使用0.5MHZ的这样一个频率,因为是8253的
ADC0809是模/数转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
IN3连接一个滑动电阻器,通过该电阻器改变电阻得到不同的电压值,经过数据采集并转换后通过LED显示得到结果
四、软件设计及分析
1.总体流程图
1.主程序流程图
将8259A、8255A、8253初始化后,通过开始中断、等待中断来进行数据传输。
图2主程序流程图
2.中断服务程序
启动摸/数转换,对数据进行转换,然后通过8255A输出。
返回开中断来进行循环。
图3中断服务程序
2.主要程序编写及分析
1、8259模块(中断管理)
;初始化8259
MOVDX,220H;设置输出端口的偶地址
MOVAL,13H;设置ICW1初始化命令字
OUTDX,AL;将ICW1输出到偶地址端口
MOVDX,221H;ICW2
MOVAL,8;设置中断类型号为8(引脚IR0)
OUTDX,AL;将ICW2输出到奇地址端口
MOVAL,1;"1"表示用于8位以上的微机
OUTDX,AL;将ICW4输出到奇地址端口
;开始设置中断向量表
MOVAX,0;初始化DS
MOVDS,AX;中断向量表在主存的0段值内
LEAAX,INT0;中断服务首地址
MOVDS:
[4*8],AX;取偏移地址,将IP存入
MOVAX,CS;取中段服务子程序的段地址到AX中
MOVDS:
[4*8+2],AX;取偏移地址,将cs存入
简要分析:
首先对ICW1、ICW2、ICW4进行初始化,然后设置中断向量表,在对中断进行设置的时候可以对中断类型号进行修改。
其实中断类型号的设置在对8259进行初始化的时候就完成了。
每次中断时ADC0809就会采集数据。
2、8253模块(定时模块)
;初始化8253
MOVDX,203H;控制端口
MOVAL,00110110B
OUTDX,AL
MOVDX,200H;计数器0
MOVAX,10000
OUTDX,AL;先送低8位
MOVAL,AH
OUTDX,AL;后送高8位
MOVDX,203H;控制端口
MOVAL,01110110B
OUTDX,AL
MOVDX,200H;计数器1
MOVAX,10000
OUTDX,AL;先送低8位
MOVAL,AH
OUTDX,AL;后送高8位
简要分析:
首先对8253进行初始化,我选用了两个计数器(计数器0,计数器1),两个计数器将1MHz放大了两次,目的让中断的时间变大。
3、ADC0809模块(数据采集)
PUSHCS;开始获取数据段
POPDS
CALLDELAY;调用延迟
;开始初始化六个数码管
MOVDX,Z8279
MOVAL,LEDMOD
OUTDX,AL
MOVAL,LEDFEQ
OUTDX,AL
MOVCX,06H
XZ:
MOVDX,D8279
MOVAL,00H
OUTDX,AL
LOOPXZ
MOVDX,D8279
MOVAL,5eH
OUTDX,AL
MOVDX,D8279
MOVAL,77H
OUTDX,AL
MOVDX,208H
MOVAL,0;假输出(启动转换)
OUTDX,AL
CALLDELAY
INAL,DX;从0809中获取数据到CPU的AL中
;MOVCL,04H
;RORAL,CL;循环移位
;ANDAL,0FH;逻辑与指令:
屏蔽AL中的高四位
MOVCL,05H
MULCL;无符号数乘法指令:
Cl乘以Al存放到AX中
MOVCL,0FFH
DIVCL;除法指令:
获取电压值
PUSHAX
MOVDX,Z8279
MOVAL,81H
OUTDX,AL
POPAX
LEABX,LEC
XLAT
MOVDX,D8279;将AL中内容写到数码管上
OUTDX,AL
CALLDELAY
MOVAL,AH
MOVCL,0AH
MULCL
MOVCL,0FFH
DIVCL
PUSHAX
MOVDX,Z8279
MOVAL,80H
OUTDX,AL
POPAX
LEABX,LED
XLAT
MOVDX,D8279;将AL中内容写到数码管上
OUTDX,AL
MOVDX,220H
MOVAL,20H
OUTDX,AL
IRET
简要分析:
首先是初始化数码管,调用中断服务子程序后,利用一个假输出启动A/D转换,然后调用延迟,接着从ADC8089中获取数据到CPU中,最后将采集过来的树转换成十进制的数送给数码管。
五、系统调试
1.调试环境介绍1.运行k88te这两个软件进行绘图和调试。
其运行环境如下图所示:
图4运行环境
2.进行编译。
3.将试验箱与电脑连接好后先进行串口测试。
其图如下:
图5串口测试
2.各部件的调试
(1)8255A的检测
①方法:
观看8个LED灯的状态。
②主要连线步骤:
将K0-K7分别连至8255A的PB0-PB7(B口作为输入),将L0-L7分别连线连至8255A的PA0-PA7(A口作为输出),8255A的CS55连至译码处的200H-207H插孔(A口地址为200H,B口地址为201H,C口地址为202H,控制口地址为203H)。
③用来检测的代码如下
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,203H;控制端口
MOVAL,82H
OUTDX,AL
JM:
MOVDX,201H
INAL,DX;B口输入
MOVDX,200H
OUTAL,DX;A口输出
JMPJM
CODEENDS
ENDSTART
④检测现象与结果:
运行时若看见8个LED灯全亮,则说明芯片是好的,否则说明芯片有问题。
(2)8259的检测
①方法:
利用流水灯的实验。
②主要连线步骤:
8259模块的CS59连地址译码区的210H-217H,IR0接“脉冲源“区的UP。
8255A连至200H-207H,8255A的PC0-PC7(C口作为输出)分别链接发光二极管的L7-L0。
③用来检测的代码如下
CODESEGMENT'CODE'
ASSUMECS:
CODE
START:
MOVDX,203H;8255A
MOVAL,80H
OUTDX,AL
MOVDX,210H;ICW1
MOVAL,13H
OUTDX,AL
MOVDX,211H;ICW2
MOVAL,8
OUTDX,AL
MOVAL,1;ICW4
OUTDX,AL
MOVAX,0
MOVDS,AX
LEAAX,INT0
MOVDS:
[4*8],AX
MOVAX,CS
MOVDS:
[4*8+2],AX
MOVDX,202H
MOVBL,0FH
MOVAL,BL
OUTDX,AL
STI
ABC:
HLT
JMPABC
INT0:
ROLBL,1
MOVDX,202H
MOVAL,BL
OUTDX,AL
MOVDX,210H
MOVAL,20H
OUTDX,AL
IRET
CODEENDS
ENDSTART
④检测现象与结果:
运行时若看见八个LED灯从左到右像流水一样每四个一亮,则说明芯片是好的,否则说明芯片有问题。
(3)8253的检测
①方法:
观看1个LED灯的状态。
②主要连线:
GATE0-GATE1连至电源+5V,CLK0接OUT1,OUT0用线连至一个发光管(L0),CLK1接1MHz,CS53片选孔用线连至译码处208H-20FH这个孔。
③用来的检测的代码如下
CODESEGMENT'CODE'
ASSUMECS:
CODE
START:
MOVDX,20BH;控制端口
MOVAL,00110110B
OUTDX,AL
MOVDX,208H;计数器0
MOVAX,1000
OUTDX,AL
MOVAL,AH
OUTDX,AL
MOVDX,20BH;计数器1
MOVAL,01110110B
OUTDX,AL
MOVDX,209H
MOVAX,1000
OUTDX,AL
MOVAL,AH
OUTDX,AL
CODEENDS
ENDSTART
④检测现象与结果:
运行时若看见LED每隔1S闪烁一次,则说明芯片是好的,否则说明芯片有问题。
(4)AD0809的检测
①方法:
利用A/D转换实验检测。
②主要连线步骤:
CS79接译码处210H-217H这个插孔。
AD0809的CS09接译码处208H-20FH这个插孔,AD0809的09IN0接至电位器VIN的中心抽头插孔,CLOCK的频率一般不要超过05Hz(在实验板上经过分频后,分别产生有1MHz、0.5MHz及0.25MHz的脉冲信号(),可以用来作为AD0809的CLOCK脉冲信号)。
③检测的代码如下
Z8279EQU212H
D8279EQU210H
LEDMODEQU00;左边输入,八位显示外部译码八位显示
LEDFEQEQU38H;扫描频率
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
START:
PUSHCS
POPDS
CALLDELAY
MOVDX,D8279
MOVAL,LEDMOD
OUTDX,AL
MOVAL,LEDFEQ
OUTDX,AL
MOVCX,06H
XZ:
MOVDX,D8279
MOVAL,00H
OUTDX,AL
LOOPXZ
MOVDX,D8279
MOVAL,5EH
OUTDX,AL
MOVDX,D8279
MOVAL,77H
OUTDX,77H
NOP
BG:
MOVDX,208H
MOVAL,0;假输出的作用:
启动转换
OUTDX,AL
CALLDELAY
INAL,DX;从0809中获取数据到CPU的AL中
MOVCL,04H
RORAL,CL;循环右移四位
ANDAL,0FH;逻辑与(安按位相与)
PUSHAX
MOVDX,Z8279
MOVAL,81H
OUTDX,AL
POPAX
LEABX,LED;取偏移地址
XLAT
MOVDX,D8279;将AL中的内容写到数码管上
OUTDX,AL
CALLDELAY
JMPBG
LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H
DB5EH,79H,71H
DELAYPROCNEAR
PUSHCX
MOVCX,0F00H
LOOP$
POPCX
RET
DELAYENDP
CODEENDS
ENDSTART
④测试现象与结果:
运行时若看见一个数码管的数字从零变到F则说明该芯片是好的,否则是有问题。
3.调试方法及结果
1.当输出端口为A时,程序的输出端口应为218H
将输出端口A改为B端口时,灯不亮。
然后将程序的输出端口改为219H时,灯亮。
将输出端口A改为C端口时,灯不亮。
然后将程序的输出端口改为21AH时,灯亮
结果:
在输出时
A端口218H
B端口219H
C端口21AH
才能确保实验的正确。
2.4个接口芯片的端口地址可以改变,程序也就改变
当改变芯片的端口地址时,我将程序的初始化地址与芯片的端口地址保持一致,运行时不能产生中断循环,经检查是没有将结束端口与8259A的地址保持一致。
3.初始化顺序也可以改变
在改变程序初始化顺序时,将8255A、8253放在8259A的前面,实验不能正常运行。
将8259放在最前面,8255A、8253随意放置,实验可以正常运行。
结果:
在初始化时必须将8253A放在最前面。
六、总结与体会
通过这次汇编课程设计,将课程所学知识有效的结合在一起进行运用,在很大程度上加深了对课堂知识的理解,对8253,8259,8255等有关芯片的使用有了进一步的加深,当然这得益于在课设过程中和同学及老师的交流,这对于每个人来说都是极其必要的。
很感谢学校每学期末进行的课程设计这项活动,还记得大一时第一次做这个时,当时还很吃力,不过后来改变了对课程设计这项活动的看法,以积极的心态去做,并抱着学习的态度去进行,我想一定会得到意想不到的收获,果然事实上证明我是对的。
常说“实践是检验真理的唯一标准”,
对我们而已,课本上所学的知识终究还是死的,为了验证它的正确如否,就必须通过我们的双手自己亲自去实践,而课程设计就是给了我们这样的机会,所以……
七、附录
DATASEGMENT
LED1DBBFH,86H,DBH,CFH,E6H,EDH
LED2DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVDX,223H;初始化8255A
MOVAL,80H
OUTDX,AL
MOVDX,218H;初始化D8279
MOVAL,00
OUTDX,AL
MOVAL,38H
OUTDX,AL
MOVCX,06H
XZ:
MOVDX,218H
MOVAL,00H
OUTDX,AL
LOOPXZ
MOVDX,218H
MOVAL,5EH
OUTDX,AL
MOVDX,218H
MOVAL,77H
OUTDX,AL
NOP
PUSHAX;初始化Z8279
MOVDX,21AH
MOVAL,81H
OUTDX,AL
POPAX
MOVAL,13H;初始化8259,ICW1
MOVDX,210H
OUTDX,AL
MOVAL,8;ICW2
MOVDX,211H
OUTDX,AL
MOVAL,1;ICW4
OUTDX,AL
LEAAX,INT0(/INT1)
MOVDS:
[4*8],AX
MOVAX,CS
MOVDS:
[4*8+2],AX
MOVAL,36H;初始化8253
MOVDX,20BH
OUTDX,AL
MOVAX,1000
MOVDX,208H
OUTDX,AL
MOVAL,AH
OUTDX,AL
MOVAL,76H
MOVDX,20BH
OUTDX,AL
MOVAX,2000
MOVDX,209H
OUTDX,AL
MOVAL,AH
OUTDX,AL
STI;开中断
REPEAT:
HLT;等待中断
JMPREPEAT
INTO:
;中断服务子程序(LED显示)
MOVDX,200H;启动A/D
MOVA