数据采集系统的设计与实现_第1页
数据采集系统的设计与实现_第2页
数据采集系统的设计与实现_第3页
数据采集系统的设计与实现_第4页
数据采集系统的设计与实现_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据采集系统的设计与实现汇编语言+ 微型计算机技术信息系2012年8月28日2012年9月9日长江大学工程技术学院课程设计报告课设题目课程名称系部班级学生姓名学号序号指导教师时间目录长江大学工程技术学院 错误!未定义书签一、设计目的 错误!未定义书签二、设计内容 错误!未定义书签三、硬件设计及分析 错误!未定义书签1 .总体结构图 错误!未定义书签2 .各部件端口地址设计及分析 错误!未定义书签3,各部件的组成及工作原理 错误!未定义书签四、软件设计及分析 错误!未定义书签1 .总体流程图 错误!未定义书签2 .主要程序编写及分析 错误!未定义书签五、系统调试 错误!未定义书签1.调试环境介绍

2、 错误!未定义书签2,各部件的调试 错误!未定义书签3,调试方法及结果 错误!未定义书签六、总结与体会 错误!未定义书签七、附录 错误!未定义书签数据采集系统的设计与实现一、设计目的1 .通过本设计,使学生综合运用微型计算机技术、汇编语言程序设计 以及电子技术等课程的内容,为以后从事计算机检测与控制奠定一定的基础。2 .主要掌握并行I/O 接口芯片8253、8255A ADC080吸中断控制芯片8259A 等可编程器件的使用,掌握译码器 74LS138的使用。3 .学会用汇编语言编写一个较完整的实用程序。4 .掌握微型计算机技术应用开发的全过程: 分析需求、设计原理图、选用元 器件、布线、编程

3、、调试、撰写报告等步骤。二、设计内容1 .功能要求 利用汇编语言+微型计算机系统课程中所学的可编程接口芯片 8253、 8255A ADC080导口微机内部的中断控制器 8259A (从保留的IRQ2或TRQ1邮弓| 入)设计一个数据采集系统、并且编程与调试。 用8253定时器定时10MS每次定时10MS后启动一次模/数转换,要求 对所接通道变化的模拟电压值进行采集。 每次模/数转换结束后,产生一次中断,在中断服务程序中,采集来的 数字量被读入微处理器的累加器 AL中,然后通过8255A输出到8个LED发光二 极管显示。2 .设计所需器材与工具 微机原理与接口综合仿真实验平台。 可编程接口芯片

4、8253、8255A、ADC080和译码器芯片74LS138 74LS245 等。 可调电位器Q一个。其他逻辑器件、导线若干万用表、常用工具等。三、硬件设计及分析1 .总体结构图图1一框架总图2 .各部件端口地址设计及分析8255端口地址:208-20FH,端口 A输入,端口 B输出。A 口地址:208H, B 口地址:209H C 口地址:20AH8259端口地址:210-217H, ICW1应写入8259A偶地址端口,它的D7D5位, 当8259A应用于8088/8086系统时无效,故以0填充。D4位是ICW1的标志位, 为1。需要多片8259A级联时才需要输入ICW3 D0位表示初始化编

5、程时是否需 要写入ICW4这样,ICW1的命令字就是:00011011,即十六进制的1BH8253端口地址:200-207H。本实验中计数器按方式0工作。即十六位二进制 计数器。当计数设置好后,计数器就开始计数。如果要读入计数器的值,要先锁 存计数值,才能读到计数值。同时OUT却输出一个高电平。实验时,可以将OUT0 接到LED上,观察计数器是否工作。ADC080端口地址:218-21FH, CS79接译码处21821FM个插孔。A/D的CS# 译码处20820F这个插孔,0809的IN0接至电位器 W1的中心抽头插孔。3 .各部件的组成及工作原理8255A有三个并行输入/输出接口,分别为A、

6、B C三个端口。分别为:方式0 :基本的输入输出方式,即无须联络就可以直接进行的I/O方式。其中A、B、C 口的高四位或低四位可分别设置成输入或输出。方式1 :选通I/O,此时接口和外围设备需联络信号进行协调,只有 A口和B 口可以工作在万式 1 ,止匕时C 口的某些线被规定为 A 口或B 口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式00方式2:双向I/O方式,只有A 口可以工作在这种方式,该I/O线即可输入又可输出,此时 C 口有5条线被规定为 A口和外围设备的双向联络线, C 口剩下的三条线可作为B 口方式1的联络线,也可以和B 口一起方式0的I/O 线。然后根据在

7、程序中是设置的那种工作方式去与74LS245进行连接。在程序中我所使用的是B口输入,A口输出的输出方式。在这个模块中最主要的就是去 怎样设置好输入与输出端口。这就要要求我们在对8255A进行初始化的时候就要考虑清楚这个问题。218-21F3436二D0D1D2D3D4D5D6D7RD WRA0A1RESETCS8 255APA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7PC0PC1PC2PC3PC4PC5PC6PC74233214I5fFF一一一19-1A0A1A2A3A4A5B0B1B2B3B4B5B6B7CEAB/BA1817161574LS

8、245D7LEDR810k图 2-8255中断管理模块主要74LS138来完成,74LS138为3-8译码器,可以产生8片 选,但是在这个程序中只要用四个片选, 即200-207、208-20F、210-217、218-21F。 74LS138其工作原理如下:当一个选通端(G1)为高电平,另两个选通端(/(G2A) 和/(G2B)为低电平。可将地址端(A、B、C)的二进制编码在一个对应的输出 端以低电平译出。同时,中断管理模块需要做的工作有设置中断向量。 在对中断进行设置的时 候可以对中断类型号进行修改。其实中断类型号的设置在对 8259进行初始化的 时候就完成了。数据采集本K块是用ADC08

9、0歌完成的,通过ADC080欧进行模数转换, ADC080所采集的模拟信号转换为数字信号。这个模块是用来对数据进行采集、 处理、转换的部分。在这个模块里我们要注意的是如何去处理在设计过程中该怎 样去处理送入软件里面的信号的频率,我们在实验中ADC080前接入的频率为1MHZ但是也可以去使用2MHZ勺这样一个频率,因为是 8253的ADC08091模/ 数转换器。其内部有一个 8通道多路开关,它可以根据地址码锁存译码后的 信号,只选通8路模拟输入信号中的一个进行A/D转换。IN3连接一个滑动电阻器,通过该电阻器改变电阻得到不同的电压值,经过数据采集并转换 后通过LED显示得到结果U2(IN0)U

10、2262728IN0ADD A1012IN1IN2IN3IN4IN5IN6IN7STARTEOCOUTPUT ENABLECLOCKVCCVREF(+)VREF(-)ADC0809ADD BADD CALE2523 122? -1MSB2 -22 -32 -42 -52 -62 -72 -8LSBGND212019188-151417474LS0:74LS02- U6:BU6:A1R9 10k图 3-ADC08098253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。每个计数器的输入和输出都决定于设置在控制寄存器 中的控制字,互相之间工作完全独立。每个计数器通过三

11、个引脚和外部联系,一个为时钟输入端 CLK, 一个为门控彳S号输入端GATE另一个为输出端OUT每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CFR 一个计数执行部件 CE和一个输出锁存器 OL。8253可编程计数器/定时器,内部有三个计数器,分别成为计数器计数器1和计数器2,他们的机构完全相同。每个计数器的输入和输出都决0、定于设置在控制寄存器中的控制字,互相之间工作完全独立。工作原理:8253具有3个独立的计数通道,采用减1计数方式。在门控信号有效时,每输入 1个计数脉冲,通道作 1次计数操作。当计数脉冲是已 知周期的时钟信号时,计数就成为定时。87654321222

12、31920D0D1D2D3D4D5D6D7RDWRA0A1CLK0 GATE0 OUTCLK1 GATE1 OUTCLK2 GATE2 OUT91110151413181617U3CS200-2078253A图 4-8253四、软件设计及分析1 .总体流程图8259的初始化图5-主程序流程图2.主要程序编写及分析I/o 调通端口地址:208H20FH从端口 A输入开关的状态,端口 B输出接到发光二极管上,然后由二极管是否发 光来判断芯片是否正常start: mov dx,20bhmov al,90hout dx,alabc: mov dx,208h ; 端口 A 读入in al,dxmov d

13、x,209h ; 端口 B 输出out dx,aljmp abc2 .通过按钮产生中断脉冲,向8259申请中断,在中断服务程序中8255A I/o思路:设置ICW1, ICW2?口 ICW4设置ICW1用于指定中断触发方式和芯片的数量,ICW2设置用于中断类型号,设置ICW4主要用于中断结束的方式start: mov al,13h; icw1mov dx,210h; 8259out dx,almov al,8; icw2mov dx,211hout dx,almov al,1; icw4out dx,almov ax,0mov ds,axlea ax,int0 mov ds:4*8,ax mo

14、v ax,cs mov ds:4*8+2,ax in al,dx and al,0feh out dx,al mov dx,203h mov al,80h out dx,al mov bl,1 mov al,bl mov dx,200hout dx,al ;pa0 stirepeat:hltjmp repeatint0 proc near rol bl,1 mov al,bl mov dx,200h out dx,al mov dx,210h mov al,20h out dx,al iretint0 endp3 .用8253定时,产生中断,重复第二步。思路:将中断服务程序的段基地址和偏移地址

15、保存在中断向量表中,即设置 ip和cs,可以将中断类型号改为8,中断从IR0端启动。start:mov al,13h ; 设置 ICW1 初始化命令字(00011011)mov dx,210hout dx,al ; 将ICW1输出到偶地址端口mov al,0ah ;ICW2中断类型号基伯:(0ah), IR2启动mov dx,211hout dx,al ; 将ICW2输出到奇地址端口mov al,1 ;ICW4 , 一般结束中断的方式out dx,almov ax,0mov ds,axlea ax,int0mov ds:4*0ah,ax ;INT0中断偏移地址,即设置ipmov ax,cs中断

16、向量指针,设置csmov ds:4*0ah+2,ax;in al,dx;and al,0feh;out dx,al;8255 初始化mov dx,203h;控制端口地址,送控制字mov al,80hout dx,almov bl,1mov al,blmov dx,200hout dx,al ;端口 A输出,输出1;8253初始化(200H-207H)f=1mhz,t=1us , T=10ms启动mov dx, 20bHmov al,00110110B ;选择计数器0,方式3,先低后高out dx ,al mov dx,208H mov ax,1000 out dx,al mov al,ah o

17、ut dx,al mov dx, 20bH;送计数方式控制字;选择计数器0;后送高八位;先送低八位mov al,01110110B ; out dx ,al mov dx,209H mov ax,1000 out dx,al mov al,ah out dx,al选择计数器1,方式3,先低后高;送计数方式控制字;选择计数器0;后送高八位;先送低八位stirepeat: hlt;jmp repeat;中断服务程序int0 proc nearrol bl,1mov al,bl ;mov dx,200h out dx,al mov dx,210h mov al,20h out dx,al iret等

18、待中断移位后从端口 A输出int0 endp4 .定时中断,ADC 8255 I/o思路:设置控制端口,初始化 8253,使用计数器0和计数器1,采用方 式3, OU琢输出方波,送数据时先送低 8位,后送高8位,Clockl使用1MHZ勺 脉冲频率。将两个计数器级联,最后 OU琢输出的方波的周期是:T=1us*1000*1000设置ICW1初始化命令字(00011011)将ICW1输出到偶地址端口中断类型号基值(0ah), IR2启动start:mov al,13h;ICW2将ICW2输出到奇地址端口mov dx,210h out dx,al mov al,0ah mov dx,211h ou

19、t dx,al ;般结束中断的方式中断偏移地址,即设置ip中断向量指针,设置cs控制端口地址,送控制字mov al,1 ;ICW4 out dx,al mov ax,0 mov ds,ax lea ax,int0 mov ds:4*0ah,ax ;INT0 mov ax,cs mov ds:4*0ah+2,ax ;in al,dx ;and al,0feh ;out dx,al ;8255 初始化 mov dx,203h mov al,80h out dx,al mov bl,1mov al,blmov dx,200hout dx,al ;端口 A输出,输出1;8253 初始化(200H-20

20、7H)f=1mhz,t=1us , T=10ms启动mov dx, 20bHmov al,00110110B ;选择计数器0,方式3,先低后高out dx ,al;送计数方式控制字mov dx,208H;选择计数器0mov ax,1000out dx,al;后送高八位mov al,ahout dx,al;先送低八位mov dx, 20bHmov al,01110110B ;选择计数器1,方式3,先低后高out dx ,al;送计数方式控制字mov dx,209H;选择计数器0 mov ax,1000out dx,al mov al,ah out dx,alSTI ;开中断ABC: HLT ;等

21、待中断 JMP ABC ;中断服务程序 INT0 Proc NEAR mov dx,218H mov al,0 ; out dx, al CALL DELAY IN al, dx;输出 mov dx,200H out dx, al;自动结束中断 mov dx,210H mov al,20H out dx, al STI IRETINT0 endpDELAY Proc near push cx mov al,0F00H LOOP $ ;这条指令 pop cx RETDELAY endp;后送高八位;先送低八位;定义过程NEAR;ADC0809 的地址-> dx初始化一个低电平;调用延时子程

22、序;读转换结果->AL中;开中断;中断返回;CX<-CX-1;出栈;从子程序返回;子程序结束五、系统调试1.调试环境介绍a.运行hk88te这两个软件进行绘图和调试。具运行环境如下图所示:7TK 7.T系实龚机IB试蚊外TTKRflTFSTACKS E C ME NT STfiCKSTftD Vf 1 2S DUPf?)STACKENDScod? segmpnt 3三qump c与二匚口11。,&仁:亏七merlemou ml 91131ai; lcv>1ima udxOh;829outdx, almu ual, 8 ;1c.uj2UkU udx 1 11koutdx

23、almo unJ. ,1 :±CbJ4|outdM , almo uax , 9no ud s, ax;与目ZW中断程序的入口地址图6b.进行编译。c.将试验箱与电脑连接好后先进行审口测试。其图如下:图7d.串口测试通过后就是编译并链接,其图如下:文件名: c: kkse+eeeas92M. 他©最后修改时间:2。12年明月06日21:12加羲到实验机段地址:8100H 加载到安蕊机偏移地址;OOOOH加就进度;o *e.最后全速运行,得出结果文件名:c:hk08 teV8BasiB259.醍屯最后修改时间:ELM £年加月06日21:1?加羲到实盹机段地址;ai

24、aoM加载到实盹机偏移地址:OOOOM加薪进度:0 %2 .各部件的调试I/O调通通过观察LED丁是否亮,来判断芯片是否正常工作。将输出端口 A改为B端 口时,灯理论上是不亮的。然后将程序的输出端口改为209H时,灯理论上会亮。 将输出端口 A改为C端口时,灯理论上是不亮的。然后将程序的输出端口改为 20AH时,灯理论上会亮.A 口地址为208H, B 口地址为209H, C 口地址为20AH 控制口地址为20BH将对应的控制码写入控制口即可完成初始化。当输出端口 为A时,程序的输出端口应为208Hb.用按钮产生中断脉冲,向8259申请中断,在中断服务程序中 8255A I/O 8255连接到

25、200-207。8259连接到210-217IR0连接到UP脉冲按纽INTR, INTA 连接至ij HK958®配板的INTR, INTAA0-A2连接至ij HK958®配板的A0-A2编译连接下载再全速运行,每当按一次脉冲 LED灯循环左移一次c.用8253定时,产生中断,重复第二步。将频率设置为1MHZ用2个计数器,计数器0的大小设置为1000,计数器2大小设置为2000,则时间间隔为2s, (时间间隔=周期*扩大倍数)。通过观看LED的闪烁快慢可以知道你的时间问隔的大小,闪烁越快时间问隔越短,闪烁越慢时间问隔越长。8255:210-217H,8253:208-20

26、FH, 8255:200-207H。d.定时中断。ADC0809。8255A I/O。通过旋转模拟量发生器控制 8个LED灯的 亮与灭,选择 ADC0809勺片选为218-21F, 8255的片选为200-207H。ADC0809 的Clock选择。3 .调试方法及结果调试8255芯片时,选取合适的片选。通过观察 LED丁是否亮,来判断芯片 是否正常工作。将端口 A改为端口 B时,灯不亮。然后将程序的输入端口改为 209H时,灯亮。将端口结果。将端口 A改为端口 C时,灯不亮。然后将程序的 输入端口改为20AH时,灯亮:结果表明在输出 A端口: 208H, B端口 : 209H, C 端口:

27、20AH才能确保实验的正确。4个接口芯片的端口地址可以改变,程序也就改变。当改变芯片的端口地址 时,我将程序的初始化地址与芯片的端口地址保持一致,在测试ADC0809寸运行时不能产生中断循环,经检查是没有将结束端口与 8259A的地址保持一致。且片 选地址与8253芯片共用一个端口地址,在修改了 ADC0809勺片选地址之后,结 果正常显示。在改变程序初始化顺序时,将 8255、8253放在8259的前面,实验不能正常 运行。将8259放在最前面,8255A 8253随意放置,实验可以正常运行。结果: 在初始化时必须将8259A放在最前面。六、总结与体会通过本实验的学习,让我学会了一些在课堂不

28、能学到的东西。同时,在实验 中遇到的问题,通过解决问题的过程中,让我从中学到了不少的东西。尤其是在 遇到问题时,经过和同学讨论,以及请教老师而使问题得以解决时,自己中从收获的会更多;更甚者,当遇到问题时,通过自己查阅资料而将问题解决,这样自 己心里对自己做的东西会更加的感兴趣。 在此,就应该说说在实验过程中遇到的 问题,比如在实验过程中,当我们做中断脉冲时,在编译、调试一切通过的前提 下,得出的结果与实验的真实结果不一致时, 现在我们前进的步伐再次受阻,现 在的我们不得不自己静下心来解决问题; 在此过程中,通过对试验箱等一些外在 因素的逐一排除下,我们开始对代码进行分析,通过这些检查,发现出现

29、这一问 题的原因是:在用8253A计数时,选择不同计数器的方式控制字出现了一点问题。 原本应该选择两个不同的计数器,结果给两个计数器输入的方式控制字给的是一 样的,这样最终导致实验出现了错误的结果。在课设中,最常说的就是对8255A输入输出端口的设置,以及如何来实现对 端口设置的交换,做这样的改动我们该怎样去进行等等问题。 在通过老师和同学 的帮助下,我们完成了这样的操作,这让我再次感受到,在实验过程中,一起发 现问题,在一起通过请教和讨论得出答案,这个过程给我们带来的收获。在本次课程设计中,我明白了几种芯片的初始化编程方法,以及对这几个芯片的功能以及该如何将其功能与其他芯片之间很好的结合起来。除此之外,这次课设让我感觉到,当我们遇到问题时,首先要静得下心,耐心地慢慢找出问题出 在什么地方,再慢慢的解决问题,不要遇到问题就心浮气躁,这样不但不能解决 问题,反而会适得其反。七、附录STACK SEGMENT PARA STACK 'STACK'DB 128 dup()STACK ENDSCODE SEGMENT PARA PUBLIC 'CODE'ASSUME CS:CODE,SS:STACK,DS:CODE;对8259初

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论