《汇编语言+微型计算机技术》数据采集系统的设计与实现汇编课设报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《汇编语言+微型计算机技术》
课程设计报告
课设题目数据采集系统的设计与实现
系部信息系
班级计算机xx
学生姓名xxx
学号xxxxxx
序号 5
指导教师xx
时间2014.6.17~2014.6.29
目录
一、设计目的 (1)
二、设计内容 (1)
三、硬件设计及分析 (2)
1总体结构图 (2)
2.各部件端口地址设计及分析 (2)
3.各部件的组成及工作原理 (3)
四、软件设计及分析 (5)
1总体流程图 (5)
2.主要程序编写及分析 (6)
五、系统调试 (10)
1.调试环境介绍 (10)
2.各部件的调试 (11)
3.调试方法及结果 (15)
六、总结与体会 (16)
七、附录 (16)
数据采集系统的设计与实现
一、设计目的
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.总体结构图
2.各部件端口地址设计及分析
1.8255A
8255的CS55连至译码处的200H-207H插孔(A口地址为200H,B口地址为201H,C口地址为202H,控制口地址为203H)。
将K0~K7分别连接至8255A的PB0~PB7,将L0~L7分别连接至8255A的
PC0~PC7,8255ACS55连至译码处的200~207插孔。
8255有两根地址线,有四个地址可用,它们分别为控制端口D、A口、B口、C 口,并且从A到D依次递加,例如把片选改为208H,四个地址分别为208H、209H、20AH、20BH。
8259的CS59连地址译码区的218H-21FH(ICW1的地址为218H,ICW2的地址为219H)。
IRO按”脉冲源”区的UP。
8255A连至200H-207H,8255A的PA0-PA7分别连接发光二极管的L7-L0。
8259只有一根地址线A0,所以它只有两个地址可用,一个为偶地址一个为奇地址,ICW1用偶地址,ICW2、ICW4用奇地地。
例如把片选改为200H,那么ICW1用200H,ICW2、ICW4用201H。
3.8253
8253的CS53片选孔用线连至译码处220H-227H这个孔(端口地址为223H、计数器0的地址为220H、计数器1的地址为221H、计数器2的地址为222H)。
GATE0-GATE1接至电源+5V,CLK0接OUT1,OUT0用线连至一个发光管
(L0),CLK接1MHZ。
8253和8255差不多,它也有两个地址线(A0、A1),初始化的过程和调整、修改完全可以参照8255。
4.ADC0809
AD0809的连线:CS79接译码处210H-217H这个插孔。
AD0809的CS09接译码处208H-20FH这个插孔(假输出时用端口地址208H)。
ADC0809的CS09接译码处,AD0809的09IN0接至电位器VIN的中心抽头插孔,CLOCK的频率一般不要超过0.5MHZ,在实验板上经过分频后,分别产生有1MHZ,0.5MHZ,及0.25MHZ的脉冲信号(),可以用来作为ADC0809
的CLOCK脉冲信号。
AD0809的CS79接译码处210H-217H这个插孔。
AD0809的CS09接译码处208H-20FH这个插孔(假输出时用端口地址208H),调整与修改更简单,只需要改变片选即可。
3.各部件的组成及工作原理
1.8255A
分析:数据显示模块是由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线。
分析:中断管理模块主要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.主程序图
2.中断流程图
2.主要程序编写及分析
1.8255A
DATA SEGMENT
DATA ENDS
STACK SEGMENT STACK
STA DW 50 DUP()
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV DX,203H
MOV AL,92H
OUT DX,AL
BG: M OV DX,201H
IN AL,DX
MOV DX,202H
OUT DX,AL
JMP BG
CODE ENDS
END START
2.8259
STACK SEGMENT P ARA STACK ‘STACK’
DB 128 DUP(?)
STACK ENDS
CODE SEGMENT PARA PUBLIC’CODE’
ASSUME CS:CODE,SS:STACK,DS:CODE
START:
MOV DX,220H ;设置输出端口的偶地址
MOV AL,13H ;设置ICW1初始化命令字
OUT DX,AL ;将ICW1输出到偶地址端口
MOV DX,221H ;ICW2
MOV AL,8 ;设置中断类型号为8(引脚IR0)
OUT DX,AL ;将ICW2输出到奇地址端口
MOV AL,1 ;"1"表示用于8位以上的微机
OUT DX,AL ;将ICW4输出到奇地址端口
;开始设置中断向量表
MOV AX,0 ;初始化DS
MOV DS,AX ;中断向量表在主存的0段值内
LEA AX,INT0 ;中断服务首地址
MOV DS:[4*8],AX ;取偏移地址,将IP存入
MOV AX,CS;取中段服务子程序的段地址到AX中
MOV DS:[4*8+2],AX;取偏移地址,将cs存入
简要分析:首先对ICW1、ICW2、ICW4进行初始化,然后设置中断向量表,在对中断进行设置的时候可以对中断类型号进行修改。
其实中断类型号的设置在对8259进行初始化的时候就完成了。
每次中断时ADC0809就会采集数据。
3.8253
MOV DX,203H ;控制端口
MOV AL,00110110B
OUT DX,AL
MOV DX,200H ;计数器0
MOV AX,10000
OUT DX,AL ;先送低8位
MOV AL,AH
OUT DX,AL ;后送高8位
MOV DX,203H ;控制端口
MOV AL,01110110B
OUT DX,AL
MOV DX,200H ;计数器1
MOV AX,10000
OUT DX,AL ;先送低8位
MOV AL,AH
OUT DX,AL ;后送高8位
简要分析:首先对8253进行初始化,我选用了两个计数器(计数器0,计数器1),两个计数器将1MHz放大了两次,目的让中断的时间变大。
4.ADC0809
PUSH CS ;开始获取数据段
POP DS
CALL DELAY ;调用延迟
;开始初始化六个数码管
MOV DX,Z8279
MOV AL,LEDMOD
OUT DX,AL
MOV AL,LEDFEQ
OUT DX,AL
MOV CX,06H
XZ: MOV DX,D8279
MOV AL,00H
OUT DX,AL
LOOP XZ
MOV DX,D8279
MOV AL,5eH
OUT DX,AL
MOV DX,D8279
MOV AL,77H
OUT DX,AL ;以上为写(AD )
MOV DX,208H
MOV AL,0 ;假输出(启动转换)
OUT DX,AL
CALL DELAY ;调用延迟(t>=100微秒)因为0809完成一次转换需要100微秒
IN AL,DX ;从0809中获取数据到CPU的AL中
MOV CL,04H
ROR AL,CL ;循环移位
AND AL,0FH ;;逻辑与指令:屏蔽AL中的高四位
MOV CL,05H
MUL CL ;无符号数乘法指令:Cl乘以Al存放到AX中
MOV CL,0FFH
DIV CL ;除法指令:获取电压值
PUSH AX
MOV DX,Z8279
MOV AL,81H
OUT DX,AL
POP AX
LEA BX,LEC
XLAT
MOV DX,D8279 ;将AL中内容写到数码管上
OUT DX,AL
CALL DELAY
MOV AL,AH
MOV CL,0AH
MUL CL
MOV CL,0FFH
DIV CL
PUSH AX
MOV DX,Z8279
MOV AL,80H
OUT DX,AL
POP AX
LEA BX,LED
XLAT
MOV DX,D8279 ;将AL中内容写到数码管上
OUT DX,AL
MOV DX,220H
MOV AL,20H
OUT DX,AL
IRET
简要分析:首先是初始化数码管,调用中断服务子程序后,利用一个假输出启动A/D转换,然后调用延迟,接着从ADC8089中获取数据到CPU中,最后将采集过来的树转换成十进制的数送给数码管。
五、系统调试
1.调试环境介绍
1.运行hk88te这两个软件进行绘图和调试。
其运行环境如下图所示:
2.进行编译。
3.将试验箱与电脑连接好后先进行串口测试。
其图如下:
4.最后是进行全速运行,得出结果。
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)。
③用来检测的代码如下
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX,203H;控制端口
MOV AL,82H
OUT DX,AL
JM:MOV DX,201H
IN AL,DX ;B口输入
MOV DX,200H
OUT AL,DX ;A口输出
JMP JM
CODE ENDS
END START
④检测现象与结果:运行时若看见8个LED灯全亮,则说明芯片是好的,否则说明芯片有问题。
(2)8259的检测
①方法:利用流水灯的实验。
②主要连线步骤:8259模块的CS59连地址译码区的210H-217H,IR0接“脉冲源“区的UP。
8255A连至200H-207H,8255A的PC0-PC7(C口作为输出)分别链接发光二极管的L7-L0。
③用来检测的代码如下
CODE SEGMENT 'CODE'
ASSUME CS:CODE
START:
MOV DX,203H ;8255A
MOV AL,80H
OUT DX,AL
MOV DX,210H ;ICW1
MOV AL,13H
OUT DX,AL
MOV DX,211H ;ICW2
MOV AL,8
OUT DX,AL
MOV AL,1 ;ICW4
OUT DX,AL
MOV AX,0
MOV DS,AX
LEA AX,INT0
MOV DS:[4*8],AX
MOV AX,CS
MOV DS:[4*8+2],AX
MOV DX,202H
MOV BL,0FH
MOV AL,BL
OUT DX,AL
STI
ABC:
HLT
JMP ABC
INT0:
ROL BL,1
MOV DX,202H
MOV AL,BL
OUT DX,AL
MOV DX,210H
MOV AL,20H
OUT DX,AL
IRET
CODE ENDS
END START
④检测现象与结果:运行时若看见八个LED灯从左到右像流水一样每四个一亮,则说明芯片是好的,否则说明芯片有问题。
(3)8253的检测
①方法:观看1个LED灯的状态。
②主要连线:GATE0-GATE1连至电源+5V,CLK0接OUT1,OUT0用线连至
一个发光管(L0),CLK1接1MHz,CS53片选孔用线连至译码处208H-20FH这个孔。
③用来的检测的代码如下
CODE SEGMENT 'CODE'
ASSUME CS:CODE
START:
MOV DX,20BH;控制端口
MOV AL,00110110B
OUT DX,AL
MOV DX,208H;计数器0
MOV AX,1000
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,20BH;计数器1
MOV AL,01110110B
OUT DX,AL
MOV DX,209H
MOV AX,1000
OUT DX,AL
MOV AL,AH
OUT DX,AL
CODE ENDS
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 脉冲信号)。
③检测的代码如下
Z8279 EQU 212H
D8279 EQU 210H
LEDMOD EQU 00 ;左边输入,八位显示外部译码八位显示
LEDFEQ EQU 38H ;扫描频率
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
START:
PUSH CS
POP DS
CALL DELAY
MOV DX,D8279
MOV AL,LEDMOD
OUT DX,AL
MOV AL,LEDFEQ
OUT DX,AL
MOV CX,06H
XZ:
MOV DX,D8279
MOV AL,00H
OUT DX,AL
LOOP XZ
MOV DX,D8279
MOV AL,5EH
OUT DX,AL
MOV DX,D8279
MOV AL,77H
OUT DX,77H
NOP
BG:
MOV DX,208H
MOV AL,0;假输出的作用:启动转换
OUT DX,AL
CALL DELAY;延迟(t>=100微秒)因为0809完成一次转换需要100微秒IN AL,DX;从0809中获取数据到CPU的AL中
MOV CL,04H
ROR AL,CL;循环右移四位
AND AL,0FH;逻辑与(安按位相与)
PUSH AX
MOV DX,Z8279
MOV AL,81H
OUT DX,AL
POP AX
LEA BX,LED;取偏移地址
XLAT
MOV DX,D8279;将AL中的内容写到数码管上
OUT DX,AL
CALL DELAY
JMP BG
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H DB 5EH,79H,71H
DELAY PROC NEAR
PUSH CX
MOV CX,0F00H
LOOP $
POP CX
RET
DELAY ENDP
CODE ENDS
END START
④测试现象与结果:运行时若看见一个数码管的数字从零变到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放在最前面。
六、总结与体会
通过本次课程设计,收获不少,第一是巩固了课上学的知识,不但加深了记忆还掌握了具体的用法,课上没注意的一些细节也搞清楚了。
汇编语言是一项实用性很强的技术,只有进行实际操作,将理论应用于实际中,才能确实掌握书中的知识点。
通过做这次课程设计,我受益匪浅,让我对汇编的知识有了更深的了解。
在这几天的时间里,我遇到了很多的问题,可以说是一个接一个的来,这个解决了,可是又来了一个。
有时候我觉得自己是没法再写下去了,但是,有时候我就是不会放弃的,有了不明白的地方,就和同学讨论,这让我更深切的体会到人与人之间的那种相互协调合作的机制。
本次的汇编语言课程设计是通过大量的查阅资料和搜索信息资料来完成的,在设计的过程使我掌握了许多的电脑基本技能及理解查阅资料的基本方法,同时经过我的不断查阅,理解资料,加深了对汇编语言的理解与认识。
在设计的整个过程中,我体会到了设计的快乐,和小小的成就感。
七、附录
Z8279 EQU 212H
D8279 EQU 210H
LEDMOD EQU 00 ;左边输入,八位显示外部译码八位显示
LEDFEQ EQU 38H ;扫描频率
CODE SEGMENT
ASSUME CS:CODE,DS:code
START:
;初始化8253
MOV DX,203H
MOV AL,36H
OUT DX,AL
MOV DX,200H
MOV AX,1000
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,203H
MOV AL,76H
OUT DX,AL
MOV DX,201H
OUT DX,AL
MOV AX,500
OUT DX,AL
MOV AL,AH
OUT DX,AL
;初始化8259
MOV DX,220H
MOV AL,13H
OUT DX,AL
MOV DX,221H
MOV AL,8
OUT DX,AL
MOV AL,1
OUT DX,AL
;开始设置中断向量表
MOV AX,0
MOV DS,AX
LEA AX,INT0
MOV DS:[4*8],AX
MOV AX,CS
MOV DS:[4*8+2],AX
PUSH CS ;开始获取数据段POP DS
CALL DELAY
MOV DX,Z8279
MOV AL,LEDMOD
OUT DX,AL
MOV AL,LEDFEQ
OUT DX,AL
MOV CX,06H
XZ: MOV DX,D8279
MOV AL,00H
OUT DX,AL
LOOP XZ
MOV DX,D8279
MOV AL,5eH
OUT DX,AL
MOV DX,D8279
MOV AL,77H
OUT DX,AL ;以上为写(AD )
NOP
STI
ABC:
HLT
JMP ABC
INT0:
MOV DX,208H
MOV AL,0 ;假输出(启动转换)
OUT DX,AL
CALL DELAY IN AL,DX
;调用延迟
;
MOV CL,04H
;
ROR AL,CL
;
AND AL,0FH
MOV CL,05H
MUL CL
MOV CL,0FFH
DIV CL
PUSH AX
MOV DX,Z8279
MOV AL,81H
OUT DX,AL
POP AX
LEA BX,LEC
XLAT
MOV DX,D8279
OUT DX,AL
CALL DELAY
;将 AL 中内容写到数码管上
MOV AL,AH MOV CL,0AH MUL CL MOV CL,0FFH DIV CL
PUSH AX MOV DX,Z8279 MOV AL,80H
第 19 页(共 23 页)
OUT DX,AL POP AX LEA BX,LED XLAT MOV DX,D8279 OUT DX,AL MOV DX,220H MOV AL,20H OUT DX,AL
;将 AL 中内容写到数码管上
IRET
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH LEC DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH
DELAY PROC NEAR PUSH CX MOV CX,01F00H LOOP $ POP CX RET DELAY ENDP
CODE ENDS END START
长江大学工程技术学院课设报告指导教师评阅意见
第 20 页(共 23 页)
报告成绩: 指导教师签名:
年月日
第 21 页(共 23 页)
。