《汇编语言+微型计算机》课程设计实验报告.docx
《《汇编语言+微型计算机》课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《《汇编语言+微型计算机》课程设计实验报告.docx(17页珍藏版)》请在冰点文库上搜索。
《汇编语言+微型计算机》课程设计实验报告
长江大学工程技术学院《汇编+微机》课程设计报告
ﻩﻩ
数据采集系统的设计与调试
学生姓名:
袁春云学号:
200960720ﻩ序号:
25
专业班级:
计本60901
指导老师:
李华贵许建国
报告日期:
2011年9月10日
ﻩﻩﻩ
一.课程设计题目:
数据采集系统的设计与测试
利用《汇编语言+微型计算机》课程中所学的可编程接口芯片8253、8255A、ADC0809和微机内部的中断控制器8259A设计一个数据采集系统,并且编程与调试。
二.设计目的
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. 4.7Ω电位器一端接+5V,一端接地,调节电位器得到变化的模拟电压,该电压接至ADC0809的某一通道输入端(如IN0),ADC0809的时钟为(500MHz),由8253对面包板上的时钟1MHz或2MHz分频后得到,8253的端口地址200H~207H。
2.用8253定时输出信后启动ADC0809转换,ADC0809完成一次转换时间大约为120us,将ADC0809的EOC引脚信号作为中断信号,若转换结束则进入中断服务程序。
在中断服务程序中读入模数转换结果,并发送至二极管显示。
3.8255A端口地址:
208H~20FH。
4.译码电路由74LS138提供。
四.硬件组成及工作原理
图1—框架总图
1.数据显示模块:
数据显示模块是由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—8255A连接图
2.中断管理模块
中断管理模块主要74LS138来完成,74LS138为3-8译码器,可以产生8片选,但是在这个程序中只要用四个片选,即200-207、208-20F、210-217、218-21F。
74LS138其工作原理如下:
当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平。
可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。
同时,中断管理模块需要做的工作有设置中断向量。
在对中断进行设置的时候可以对中断类型号进行修改。
其实中断类型号的设置在对8259进行初始化的时候就完成了。
3.数据采集模块
数据采集模块是用ADC0809来完成的,通过ADC0809来进行模数转换,ADC0809所采集的模拟信号转换为数字信号。
这个模块是用来对数据进行采集、处理、转换的部分。
在这个模块里我们要注意的是如何去处理在设计过程中该怎样去处理送入软件里面的信号的频率,我们在实验中ADC0809所接入的频率为0.25MHZ,但是也可以去使用0.5MHZ的这样一个频率,因为是8253的
ADC0809是模/数转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
IN3连接一个滑动电阻器,通过该电阻器改变电阻得到不同的电压值,经过数据采集并转换后通过LED显示得到结果
图3——ADC0809连接图
4.定时模块
8253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
8253可编程计数器/定时器,内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
工作原理:
8253具有3个独立的计数通道,采用减1计数方式。
在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。
当计数脉冲是已知周期的时钟信号时,计数就成为定时。
图4——8253A连接图
五. 软件框图
1.主程序流程图
将8259A、8255A、8253初始化后,通过开始中断、等待中断来进行数据传输
8259的初始化
设置中断向量
8255初始化
8253初始化
开中断
等待中断
图5--主程序流程图
2.中断服务程序
启动摸/数转换,对数据进行转换,然后通过8255A输出。
返回开中断来进行循环。
启动A/D转换
设定延时时间为200us
读数据结果
处理、从8255输出
开中断、中断返回
图6——中断服务器程序结构
六.主要程序的编写与分析
1.8259初始化(210H~217H)
由于系统中使用单片8259,所以初始化时不需要ICW3,即只需要初始化ICW1,ICW2和ICW4代码如下:
moval,13hﻩ;设置ICW1初始化命令字(00011011)
movdx,210h
out dx,alﻩ;将ICW1输出到偶地址端口
mov al,8ﻩﻩﻩ;ICW2中断类型号基值(8)
movdx,211h
out dx,alﻩ;将ICW2输出到奇地址端口
ﻩmov al,1ﻩ;ICW4
ﻩﻩout dx,al
2.设置中断向量
因为每4个字节存放一个中断服务程序的入口地址,且4个单元的低地址称为向量地址,其值为对应的中断类型号乘以4。
ﻩﻩCLIﻩﻩ;关中断
ﻩmovax,0000h
ﻩmov ds,ax
ﻩﻩleaax,INT0ﻩﻩ;intO中断首地址
ﻩmov ds:
[4*8],ax
ﻩﻩmovax,csﻩ;中断向量指针
ﻩmovds:
[4*8+2],axﻩ;设中断地址
3.8255初始化(218H-21FH)
A口地址为218H,B口地址为219H,C口地址为21AH,控制口地址为21BH,将对应的控制码写入控制口即可完成初始化。
ﻭ ;8255a初始化
ﻩmov dx,21bH
ﻩmoval,8aH ﻩﻩ;端口A和C低输出,端口B和C高输入
outdx,al
4.8253初始化(200H-207H)
定时器0地址为200H,定时器1地址为201H,定时器2地址为202H,8253控制口地址为203H,将相应的控制字和初始值填入8253即可完成初始化。
ﻩ;8253初始化
;f=1mhz,t=1us
ﻩﻩmovdx,203H
ﻩmov al,00110110Bﻩ;选择计数器0,先低后高
ﻩoutdx,alﻩ;送计数方式控制字
ﻩmovdx,200Hﻩ;选择计数器
ﻩmovax,60000
ﻩoutdx,al ﻩ;先送低八位
ﻩmoval,ah
out dx,al;后送高八位
ﻩﻩ
5.中断服务程序
首先关闭中断,然后对ADC0809进行清零操作,然后调用延时程序为了等待A/D转换完成,然后将转换结果传送到AL寄存器,然后将AL寄存器的值传递到8255的A端口通过74LS245将转换结果传送到LED灯上。
ﻩINT0Procnear
ﻩmovdx,208H ;adc0809地址->dx
moval,0
outdx,alﻩ
calldelay ﻩ;调用延时子程
inal,dx
;输出8255
mov dx,218H
outdx,al
;结束中断
movdx,210H
moval,20H
out dx,al
sti ;开中断
iret ﻩ;中断返回
INT0endp
6.延时子程序的设定ﻭ通过延时,以等待ADC0809完成A/D转换(100us)。
DELAY Proc nearﻭ PUSHCXﻭ MOV CX,0F0FH
LOOP $ﻩ;CX<-CX-1
POPCX
RETﻩﻩ;从子程序返回ﻭ DELAYendp
七.调试环境及方法
1.运行hk88te这两个软件进行绘图和调试。
其运行环境如下图所示:
图7——运行环境
2.进行编译。
3.将试验箱与电脑连接好后先进行串口测试。
其图如下:
图8——串口测试
1.串口测试通过后就是编译并链接,其图如下:
图9——编译并连接
4.最后是进行全速运行,得出结果。
图10——全速运行
八.调试过程及结果
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随意放置,实验可以正常运行。
结果:
在初始化时必须将8259A放在最前面。
九.体会与心得
通过本次的课程设计,让我学到了一些东西。
同时,通过在这个过程中遇到了问题,接着去解决问题。
我从中真明白了一些知识。
在课程设计的开头主要的是对各种软件的初始化的编程,其实在这些看是简单的初始化中,也是需要一定的知识的。
就如对8259A的初始化而言,在这中间就需要去特别的注意设置初始化命令字、设置中断类型号这两点,这就需要我们明白8259A的工作方式是通过初始化命令字(ICW1-ICW4)和操作命令字(OCW1-OCW3)来设置。
同时以及明白命令字和操作命令字的初始化编程。
在课设中最常说的就是8255软件的输入输出端口的设置。
如果说开始为A输入,B输出的方式。
如果需要改为A输出,B输入的方式。
该怎样去改,在课设中进过与老师、同学的讨论我知道的该如何的去修改。
在修改的过程中需要修改8255A中的控制字进行修改以及在输出的地方进行修改。
在课设中还遇到的问题就是在进行测试的时候。
最开始的时候出现的问题是所有的二极管全亮,但是转动滑动变阻器后没有出现二极管出现依次的亮和熄灭。
进过多电路连线的检查发现是有两根线连反了。
但是实验后任然不行。
接着用老师的方法进行调试,发现有方波产生。
这说明可能是模数转换器出现了故障,为了确定问题的所在,然后将MOVDX,218H/INAL,DX/MOVDX,219H/OUTDX,AL这段代码加入中断服务程序中看结果是不是一半的灯亮,一半的熄灭。
然而结果不是的,在将终端服务程序屏蔽的时候出现了上述的结果。
于是说明是终端服务程序的问题。
然后经过老师的修改就好了。
在本次课程设计中我最大的收获就是明白了几种硬件的初始化编程的方法以及对汇编语言的一些的了解。
十.程序清单
STACK SEGMENT PARA STACK'STACK'
ﻩDB128dup(?
)
STACKENDS
CODE SEGMENTPARAPUBLIC'CODE'
ASSUMECS:
CODE,SS:
STACK,DS:
CODE
;对8259初始化
START:
MOVAL,00011011B ;设置ICW1初始化命令字
MOVDX,210H ;设置输出端口的偶地址
OUTDX,AL ;将ICW1输出到偶地址端口
MOVAL,8 ;设置中断类型号为8
MOV DX,211H ;设置输出端口的奇地址
OUT DX,AL ;将ICW2输出到奇地址端口
MOVAL, ;ICW4初始化,"1"表示用于8位以上的微机
OUTDX,AL ;将ICW4输出到奇地址端口
;设置中断向量表
CLI ;关中断
MOVAX,0000H ;初始化DS
MOVDS,AX
LEAAX,INT0 ;中断服务首地址
MOVDS:
[4*8],AX ;取偏移地址,将IP存入
MOV AX,SEGINT0 ;SEG为伪指令,表示取出INT0的偏移地址
MOVDS:
[4*8+2],AX ;取偏移地址,将cs存入
;对8255初始化(218H-21FH),从A端口输入,从B端口输出
MOVDX,21BH;8255A控制端口地址
MOVAL,10010000B
OUTDX,AL ;送到控制端口
MOVDX,218H
INAL,DX
MOVDX,219H
OUTDX,AL
;8253初始化(200H~207H)
ﻩ;f=500KMHZ,时间间隔t=10ms
ﻩ MOV DX,203H;控制端口地址给DX
ﻩMOVAL,8AHﻩ;计数器0
OUT DX,AL
MOVAX,50000ﻩﻩ
MOV DX,200H
ﻩ OUT DX,AL;先送低8位
ﻩMOVAL,AH
OUTDX,AL ;后送高8位
STI;开中断ﻩ
ﻩ ABC:
HLT;等待中断
JMPABC
ﻩ
;中断服务程序
ﻩ INT0ProcNEAR ;定义过程NEAR
MOVDX,208H ;ADC0809的地址->DX
ﻩ MOV AL,0 ;初始化一个低电平
ﻩ OUTDX,AL
CALLDELAY;调用延时子程序
ﻩ IN AL,DXﻩﻩﻩ;读转换结果->AL中
ﻩﻩ;输出
ﻩ MOVDX,218Hﻩ
OUTDX,ALﻩ
;自动结束中断
ﻩ MOVDX,210H
MOVAL,20H
ﻩOUT DX,AL
ﻩ STI ﻩﻩﻩ;开中断
ﻩ IRETﻩ;中断返回
ﻩINT0endp
ﻩDELAYProc near
PUSHCX
ﻩ MOV CX,0F00Hﻩ
ﻩ LOOP$ ﻩﻩ;CX<-CX-1
;这条指令
ﻩ POPCXﻩﻩ;出栈
ﻩRET ﻩ;从子程序返回
DELAYendp;子程序结束
CODE ENDS ﻩﻩ;代码段结束
END STARTﻩﻩ;结束汇编
指导教师评语:
报告成绩:
指导教师签名:
年月 日