数据采集系统研发设计与实现.docx
- 文档编号:7171592
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:18
- 大小:175.77KB
数据采集系统研发设计与实现.docx
《数据采集系统研发设计与实现.docx》由会员分享,可在线阅读,更多相关《数据采集系统研发设计与实现.docx(18页珍藏版)》请在冰豆网上搜索。
数据采集系统研发设计与实现
长江大学工程技术学院
课程设计报告
课设题目
数据采集系统的设计与实现
课程名称
汇编语言+微型计算机技术
系部
信息系
班级
学生姓名
学号
序号
指导教师
时间
2012年8月28日~2012年9月9日
目录
目录
长江大学工程技术学院1矚慫润厲钐瘗睞枥庑赖。
一、设计目的1聞創沟燴鐺險爱氇谴净。
二、设计内容1残骛楼諍锩瀨濟溆塹籟。
三、硬件设计及分析2酽锕极額閉镇桧猪訣锥。
1.总体结构图2彈贸摄尔霁毙攬砖卤庑。
2.各部件端口地址设计及分析2謀荞抟箧飆鐸怼类蒋薔。
3.各部件的组成及工作原理2厦礴恳蹒骈時盡继價骚。
四、软件设计及分析3茕桢广鳓鯡选块网羈泪。
1.总体流程图3鹅娅尽損鹌惨歷茏鴛賴。
2.主要程序编写及分析4籟丛妈羥为贍偾蛏练淨。
五、系统调试4預頌圣鉉儐歲龈讶骅籴。
1.调试环境介绍4渗釤呛俨匀谔鱉调硯錦。
2.各部件的调试4铙誅卧泻噦圣骋贶頂廡。
3.调试方法及结果9擁締凤袜备訊顎轮烂蔷。
六、总结与体会9贓熱俣阃歲匱阊邺镓騷。
七、附录10坛摶乡囂忏蒌鍥铃氈淚。
数据采集系统的设计与实现
一、设计目的
1.通过本设计,使学生综合运用《微型计算机技术》、《汇编语言程序设计》以及电子技术等课程的内容,为以后从事计算机检测与控制奠定一定的基础。
蜡變黲癟報伥铉锚鈰赘。
2.主要掌握并行I/O接口芯片8253、8255A、ADC0809及中断控制芯片8259A等可编程器件的使用,掌握译码器74LS138的使用。
買鲷鴯譖昙膚遙闫撷凄。
3.学会用汇编语言编写一个较完整的实用程序。
4.掌握微型计算机技术应用开发的全过程:
分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等步骤。
綾镝鯛駕櫬鹕踪韦辚糴。
二、设计内容
1.功能要求
①利用《汇编语言+微型计算机系统》课程中所学的可编程接口芯片8253、8255A、ADC0809和微机内部的中断控制器8259A(从保留的IRQ2或TRQ10端引入)设计一个数据采集系统、并且编程与调试。
驅踬髏彦浃绥譎饴憂锦。
②用8253定时器定时10MS,每次定时10MS后启动一次模/数转换,要求对所接通道变化的模拟电压值进行采集。
猫虿驢绘燈鮒诛髅貺庑。
③每次模/数转换结束后,产生一次中断,在中断服务程序中,采集来的数字量被读入微处理器的累加器AL中,然后通过8255A输出到8个LED发光二极管显示。
锹籁饗迳琐筆襖鸥娅薔。
2.设计所需器材与工具
④微机原理与接口综合仿真实验平台。
⑤可编程接口芯片8253、8255A、ADC0809和译码器芯片74LS138、74LS245等。
⑥可调电位器4.7KΩ一个。
⑦其他逻辑器件、导线若干。
⑧万用表、常用工具等。
三、硬件设计及分析
1.总体结构图
图1—框架总图
2.各部件端口地址设计及分析
8255端口地址:
208-20FH,端口A输入,端口B输出。
A口地址:
208H,B口地址:
209H。
C口地址:
20AH。
構氽頑黉碩饨荠龈话骛。
8259端口地址:
210-217H,ICW1应写入8259A偶地址端口,它的D7~D5位,当8259A应用于8088/8086系统时无效,故以0填充。
D4位是ICW1的标志位,为1。
需要多片8259A级联时才需要输入ICW3。
D0位表示初始化编程时是否需要写入ICW4。
这样,ICW1的命令字就是:
00011011,即十六进制的1BH。
輒峄陽檉簖疖網儂號泶。
8253端口地址:
200-207H。
本实验中计数器按方式0工作。
即十六位二进制计数器。
当计数设置好后,计数器就开始计数。
如果要读入计数器的值,要先锁存计数值,才能读到计数值。
同时OUT脚输出一个高电平。
实验时,可以将OUT0接到LED上,观察计数器是否工作。
尧侧閆繭絳闕绚勵蜆贅。
ADC0809端口地址:
218-21FH,CS79接译码处218~21FH这个插孔。
A/D的CS插译码处208~20F这个插孔,0809的IN0接至电位器W1的中心抽头插孔。
识饒鎂錕缢灩筧嚌俨淒。
3.各部件的组成及工作原理
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-8255
中断管理模块主要74LS138来完成,74LS138为3-8译码器,可以产生8片选,但是在这个程序中只要用四个片选,即200-207、208-20F、210-217、218-21F。
74LS138其工作原理如下:
当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平。
可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。
阌擻輳嬪諫迁择楨秘騖。
同时,中断管理模块需要做的工作有设置中断向量。
在对中断进行设置的时候可以对中断类型号进行修改。
其实中断类型号的设置在对8259进行初始化的时候就完成了。
氬嚕躑竄贸恳彈瀘颔澩。
数据采集模块是用ADC0809来完成的,通过ADC0809来进行模数转换,ADC0809所采集的模拟信号转换为数字信号。
这个模块是用来对数据进行采集、处理、转换的部分。
在这个模块里我们要注意的是如何去处理在设计过程中该怎样去处理送入软件里面的信号的频率,我们在实验中ADC0809所接入的频率为1MHZ,但是也可以去使用2MHZ的这样一个频率,因为是8253的ADC0809是模/数转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
IN3连接一个滑动电阻器,通过该电阻器改变电阻得到不同的电压值,经过数据采集并转换后通过LED显示得到结果釷鹆資贏車贖孙滅獅赘。
图3-ADC0809
8253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
怂阐譜鯪迳導嘯畫長凉。
8253可编程计数器/定时器,内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
谚辞調担鈧谄动禪泻類。
工作原理:
8253具有3个独立的计数通道,采用减1计数方式。
在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。
当计数脉冲是已嘰觐詿缧铴嗫偽純铪锩。
知周期的时钟信号时,计数就成为定时。
图4-8253
四、软件设计及分析
1.总体流程图
设置中断向量
8255初始化
8253初始化
开中断
等待中断
图5--主程序流程图
2.主要程序编写及分析
1.8255AI/o调通
端口地址:
208H~20FH
从端口A输入开关的状态,端口B输出接到发光二极管上,然后由二极管是否发光来判断芯片是否正常
start:
movdx,20bh
moval,90h
outdx,al
abc:
movdx,208h;端口A读入
inal,dx
movdx,209h;端口B输出
outdx,al
jmpabc
2.通过按钮产生中断脉冲,向8259申请中断,在中断服务程序中8255AI/o
思路:
设置ICW1,ICW2和ICW4,设置ICW1用于指定中断触发方式和芯片的数量,ICW2设置用于中断类型号,设置ICW4主要用于中断结束的方式熒绐譏钲鏌觶鷹緇機库。
start:
moval,13h;icw1
movdx,210h;8259
outdx,al
moval,8;icw2
movdx,211h
outdx,al
moval,1;icw4
outdx,al
movax,0
movds,ax
leaax,int0
movds:
[4*8],ax
movax,cs
movds:
[4*8+2],ax
inal,dx
andal,0feh
outdx,al
movdx,203h
moval,80h
outdx,al
movbl,1
moval,bl
movdx,200h
outdx,al;pa0
sti
repeat:
hlt
jmprepeat
int0procnear
rolbl,1
moval,bl
movdx,200h
outdx,al
movdx,210h
moval,20h
outdx,al
iret
int0endp
3.用8253定时,产生中断,重复第二步。
思路:
将中断服务程序的段基地址和偏移地址保存在中断向量表中,即设置ip和cs,可以将中断类型号改为8,中断从IR0端启动。
鶼渍螻偉阅劍鲰腎邏蘞。
start:
moval,13h;设置ICW1初始化命令字(00011011)
movdx,210h
outdx,al;将ICW1输出到偶地址端口
moval,0ah;ICW2中断类型号基值(0ah),IR2启动
movdx,211h
outdx,al;将ICW2输出到奇地址端口
moval,1;ICW4,一般结束中断的方式
outdx,al
movax,0
movds,ax
leaax,int0
movds:
[4*0ah],ax;INT0中断偏移地址,即设置ip
movax,cs
movds:
[4*0ah+2],ax;中断向量指针,设置cs
;inal,dx
;andal,0feh
;outdx,al
;8255初始化
movdx,203h;控制端口地址,送控制字
moval,80h
outdx,al
movbl,1
moval,bl
movdx,200h
outdx,al;端口A输出,输出1
;8253初始化(200H-207H)f=1mhz,t=1us,T=10ms启动
movdx,20bH
moval,00110110B;选择计数器0,方式3,先低后高
outdx,al;送计数方式控制字
movdx,208H;选择计数器0
movax,1000
outdx,al;后送高八位
moval,ah
outdx,al;先送低八位
movdx,20bH
moval,01110110B;选择计数器1,方式3,先低后高
outdx,al;送计数方式控制字
movdx,209H;选择计数器0
movax,1000
outdx,al;后送高八位
moval,ah
outdx,al;先送低八位
sti
repeat:
hlt;等待中断
jmprepeat
;中断服务程序
int0procnear
rolbl,1
moval,bl;移位后从端口A输出
movdx,200h
outdx,al
movdx,210h
moval,20h
outdx,al
iret
int0endp
4.定时中断,ADC8255I/o
思路:
设置控制端口,初始化8253,使用计数器0和计数器1,采用方
式3,OUT端输出方波,送数据时先送低8位,后送高8位,Clock1使用1MHZ的脉冲频率。
将两个计数器级联,最后OUT端输出的方波的周期是:
T=1us*1000*1000纣忧蔣氳頑莶驅藥悯骛。
start:
moval,13h;设置ICW1初始化命令字(00011011)
movdx,210h
outdx,al;将ICW1输出到偶地址端口
moval,0ah;ICW2中断类型号基值(0ah),IR2启动
movdx,211h
outdx,al;将ICW2输出到奇地址端口
moval,1;ICW4,一般结束中断的方式
outdx,al
movax,0
movds,ax
leaax,int0
movds:
[4*0ah],ax;INT0中断偏移地址,即设置ip
movax,cs
movds:
[4*0ah+2],ax;中断向量指针,设置cs
;inal,dx
;andal,0feh
;outdx,al
;8255初始化
movdx,203h;控制端口地址,送控制字
moval,80h
outdx,al
movbl,1
moval,bl
movdx,200h
outdx,al;端口A输出,输出1
;8253初始化(200H-207H)f=1mhz,t=1us,T=10ms启动
movdx,20bH
moval,00110110B;选择计数器0,方式3,先低后高
outdx,al;送计数方式控制字
movdx,208H;选择计数器0
movax,1000
outdx,al;后送高八位
moval,ah
outdx,al;先送低八位
movdx,20bH
moval,01110110B;选择计数器1,方式3,先低后高
outdx,al;送计数方式控制字
movdx,209H;选择计数器0
movax,1000
outdx,al;后送高八位
moval,ah
outdx,al;先送低八位
STI;开中断
ABC:
HLT;等待中断
JMPABC
;中断服务程序
INT0ProcNEAR;定义过程NEAR
movdx,218H;ADC0809的地址->dx
moval,0;初始化一个低电平
outdx,al
CALLDELAY;调用延时子程序
INal,dx;读转换结果->AL中
;输出
movdx,200H
outdx,al
;自动结束中断
movdx,210H
moval,20H
outdx,al
STI;开中断
IRET;中断返回
INT0endp
DELAYProcnear
pushcx
moval,0F00H
LOOP$;CX<-CX-1
;这条指令
popcx;出栈
RET;从子程序返回
DELAYendp;子程序结束
五、系统调试
1.调试环境介绍
a.运行hk88te这两个软件进行绘图和调试。
其运行环境如下图所示:
图6
b.进行编译。
c.将试验箱与电脑连接好后先进行串口测试。
其图如下:
图7
d.串口测试通过后就是编译并链接,其图如下:
图8
e.最后全速运行,得出结果
图9
2.各部件的调试
a.8255AI/O调通
通过观察LED灯是否亮,来判断芯片是否正常工作。
将输出端口A改为B端口时,灯理论上是不亮的。
然后将程序的输出端口改为209H时,灯理论上会亮。
将输出端口A改为C端口时,灯理论上是不亮的。
然后将程序的输出端口改为20AH时,灯理论上会亮.A口地址为208H,B口地址为209H,C口地址为20AH,控制口地址为20BH,将对应的控制码写入控制口即可完成初始化。
当输出端口为A时,程序的输出端口应为208H。
颖刍莖蛺饽亿顿裊赔泷。
b.用按钮产生中断脉冲,向8259申请中断,在中断服务程序中8255AI/O
8255连接到200-207。
8259连接到210-217IR0连接到UP脉冲按纽INTR,INTA连接到HK958适配板的INTR,INTAA0-A2连接到HK958适配板的A0-A2编译连接下载再全速运行,每当按一次脉冲LED灯循环左移一次濫驂膽閉驟羥闈詔寢賻。
c.用8253定时,产生中断,重复第二步。
将频率设置为1MHZ。
用2个计数器,计数器0的大小设置为1000,计数器2大小设置为2000,则时间间隔为2s。
(时间间隔=周期*扩大倍数)。
通过观看LED的闪烁快慢可以知道你的时间间隔的大小,闪烁越快时间间隔越短,闪烁越慢时间间隔越长。
8255:
210-217H,8253:
208-20FH,8255:
200-207H。
銚銻縵哜鳗鸿锓謎諏涼。
d.定时中断。
ADC0809。
8255AI/O。
通过旋转模拟量发生器控制8个LED灯的亮与灭,选择ADC0809的片选为218-21F,8255的片选为200-207H。
ADC0809的Clock选择0.25MHZ。
挤貼綬电麥结鈺贖哓类。
3.调试方法及结果
调试8255芯片时,选取合适的片选。
通过观察LED灯是否亮,来判断芯片是否正常工作。
将端口A改为端口B时,灯不亮。
然后将程序的输入端口改为209H时,灯亮。
将端口结果。
将端口A改为端口C时,灯不亮。
然后将程序的输入端口改为20AH时,灯亮:
结果表明在输出A端口:
208H,B端口:
209H,C端口:
20AH,才能确保实验的正确。
赔荊紳谘侖驟辽輩袜錈。
4个接口芯片的端口地址可以改变,程序也就改变。
当改变芯片的端口地址时,我将程序的初始化地址与芯片的端口地址保持一致,在测试ADC0809时运行时不能产生中断循环,经检查是没有将结束端口与8259A的地址保持一致。
且片选地址与8253芯片共用一个端口地址,在修改了ADC0809的片选地址之后,结果正常显示。
塤礙籟馐决穩賽釙冊庫。
在改变程序初始化顺序时,将8255、8253放在8259的前面,实验不能正常运行。
将8259放在最前面,8255A、8253随意放置,实验可以正常运行。
结果:
在初始化时必须将8259A放在最前面。
裊樣祕廬廂颤谚鍘羋蔺。
六、总结与体会
通过本实验的学习,让我学会了一些在课堂不能学到的东西。
同时,在实验中遇到的问题,通过解决问题的过程中,让我从中学到了不少的东西。
尤其是在遇到问题时,经过和同学讨论,以及请教老师而使问题得以解决时,自己中从收获的会更多;更甚者,当遇到问题时,通过自己查阅资料而将问题解决,这样自己心里对自己做的东西会更加的感兴趣。
在此,就应该说说在实验过程中遇到的问题,比如在实验过程中,当我们做中断脉冲时,在编译、调试一切通过的前提下,得出的结果与实验的真实结果不一致时,现在我们前进的步伐再次受阻,现在的我们不得不自己静下心来解决问题;在此过程中,通过对试验箱等一些外在因素的逐一排除下,我们开始对代码进行分析,通过这些检查,发现出现这一问题的原因是:
在用8253A计数时,选择不同计数器的方式控制字出现了一点问题。
原本应该选择两个不同的计数器,结果给两个计数器输入的方式控制字给的是一样的,这样最终导致实验出现了错误的结果。
仓嫗盤紲嘱珑詁鍬齊驁。
在课设中,最常说的就是对8255A输入输出端口的设置,以及如何来实现对端口设置的交换,做这样的改动我们该怎样去进行等等问题。
在通过老师和同学的帮助下,我们完成了这样的操作,这让我再次感受到,在实验过程中,一起发现问题,在一起通过请教和讨论得出答案,这个过程给我们带来的收获。
绽萬璉轆娛閬蛏鬮绾瀧。
在本次课程设计中,我明白了几种芯片的初始化编程方法,以及对这几个芯片的功能以及该如何将其功能与其他芯片之间很好的结合起来。
除此之外,这次课设让我感觉到,当我们遇到问题时,首先要静得下心,耐心地慢慢找出问题出在什么地方,再慢慢的解决问题,不要遇到问题就心浮气躁,这样不但不能解决问题,反而会适得其反。
骁顾燁鶚巯瀆蕪領鲡赙。
七、附录
STACKSEGMENTPARASTACK'STACK'
DB128dup(?
)
STACKENDS
CODESEGMENTPARAPUBLIC'CODE'
ASSUMECS:
CODE,SS:
STACK,DS:
CODE
;对8259初始化
START:
MOVAL,00011011B;设置ICW1初始化命令字
MOVDX,210H;设置输出端口的偶地址
OUTDX,AL;将ICW1输出到偶地址端口
MOVAL,8;设置中断类型号为8
MOVDX,211H;设置输出端口的奇地址
OUTDX,AL;将ICW2输出到奇地址端口
MOVAL,1;ICW4初始化,"1"表示用于8位以上的微机
OUTDX,AL;将ICW4输出到奇地址端口
;设置中断向量表
CLI;关中断
MOVAX,0000H;初始化DS
MOVDS,AX
LEAAX,INT0;中断服务首地址
MOVDS:
[4*8],AX;取偏移地址,将IP存入
MOVAX,SEGINT0;SEG为伪指令,表示取出INT0的偏移地址
MOVDS:
[4*8+2],AX;取偏移地址,将cs存入
;对8255初始化(208H-20FH),从A端口输入,从B端口输出
MOVDX,20BH;8255A控制端口地址
MOVAL,10010000B
OUTDX,AL;送到控制端口
;8253初始化(200H~207H)
;f=1MHZ,时间间隔t=10ms
MOVDX,203H;控制端口地址给DX
MOVAL,8AH;计数器0
OUTDX,AL
MOVAX,10000
MOVDX,200H
OUTDX,AL;先送低8位
MOVAL,AH
OUTDX,AL;后送高8位
STI;开中断
ABC:
HLT;等待中断
JMPA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 采集 系统 研发 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)