微机接口课设报告.docx

上传人:b****6 文档编号:8502755 上传时间:2023-01-31 格式:DOCX 页数:14 大小:94.96KB
下载 相关 举报
微机接口课设报告.docx_第1页
第1页 / 共14页
微机接口课设报告.docx_第2页
第2页 / 共14页
微机接口课设报告.docx_第3页
第3页 / 共14页
微机接口课设报告.docx_第4页
第4页 / 共14页
微机接口课设报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

微机接口课设报告.docx

《微机接口课设报告.docx》由会员分享,可在线阅读,更多相关《微机接口课设报告.docx(14页珍藏版)》请在冰豆网上搜索。

微机接口课设报告.docx

微机接口课设报告

江苏大学计算机学院

课程设计报告

课程名称微机原理与接口技术课程设计

实验学期2010至2011学年,第1学期

学生姓名龚科

专业班级计算机0802

学号3080602051

指导教师韩晓茹

开课系计算机科学系

 

《微机原理与接口技术》课程设计报告

实验题目:

数据采集

设计时间:

2010-01-03至2011-01-08

一、实验目的与要求

1.了解数据采集系统的组成

2.提高综合应用8259、0809、8255等接口芯片的能力

二、实验要求

对一路温度、一路压力信号进行巡回数据采集,并把A/D转换后的结果在实验机的数码管上显示出来。

采集到的数据超过规定的限制时,使发光二极管闪烁报警。

三、实验设备与环境

PD-32温度/压力实验平台;A/D、D/A模块;中断模块(8259A);

8255并行接口模块;74系列模块;TS。

 

四、设计正文

(1)硬件连线

本程序实现两路数据采集;一路采集温度信号,一路采集压力信号。

对每一路信号要连续采集8次,然后把8次A/D转化后的平均值显示在数码管上。

左边三位显示压力值,右边三位显示温度值。

●拨码开关:

将拨码开关sw2拨上。

表示将GAL20V8的地址输入A-5接至系统地址线A5;A-6接至系统地址线A6;A-7接至系统地址线A7。

●压力实验模块的“压力输出”端接至AD0809的输入端IN0,温度实验模块的“温度输出”端接至AD0809的输入端IN1。

把8255的B1口接至温度实验模块的“占空比输入”端。

●0809的EOC输出端与8259的IRQ0端相连,0809的CS连CS8(3E0H)

●8259的片选CS-1连地址输出CS6(3A0H),8259的INT1连总线输入INYR,8259模块的INT-A连总总线的INTA,8259的SP/1连+5V。

●8255并行模块下方的4个片选信号CS-1、CS-2、CS-3和CS-4分别与地址译码输出模块的对应引脚(实验箱中部的CS-1、CS-2、CS-3和CS-4)链接,最高位8255的B1接占空比输入和led灯,接led灯用于观察占空比是否有效,B7接led灯和蜂鸣器,C0接任意一开关作为启停键。

如按上述连线,则8255的A口、B口、C口和控制口地址分别为200H、204H、208H和20CH;8259的奇地址是3A8H,偶地址是3A0h。

注意:

在温度实验模块的“占空比输入”端如果长期加上高电平,三端稳压管U3和负载电阻长时间通电加热,温度过高容易引起器件烧坏。

(2)软件编程

数据段:

定义max,db类型,用于存放越界值;

定义Ygewei,db类型,用于存放压力值的个位;

定义yshiwei,db类型,用于存放压力值的十位;

定义ybaiwei,db类型,用于存放压力值的百位;

定义wgewei,db类型,用于存放温度值的个位;

定义Wshiwei,db类型,用于存放温度值的十位;

定义Wbaiwei,db类型,用于存放温度值的百位;

定义ybuff缓冲区,db类型,用于存放八次取样的压力值;

定义wbuff缓冲区,db类型,用于存放八次取样的温度值;

定义c,db类型,用于存放取样次数;

定义s8,db类型,除数8;

定义Afg,db类型,用于标志是否越界。

 

程序段:

●主程序模块

给变量赋初值,max赋0c8h,即最大越界值为200,c赋0h,s8赋8,afg赋00h,表示未出现越界;

对8255、8259初始化,四片8255初值由高到低为81808080h,然后将0ffffffff送入A口B口,使数码管熄灭,且占空比有效,报警器无效,将0c05060ah,使显示压力值的数码管和显示温度值的数码管显示颜色分别为绿色和红色;8259初始化icw1,icw2,icw3分别为13h、08h、05h;

设置中断向量,中断类型号位08h,中断服务程序名为pick;

设置中断屏蔽字为00h;

启动0809in0采集数据;

判断是否采集到有越界的数值;

计算平均值并显示结果;

判断是否继续,关闭则暂停,开启则继续。

 

●中断程序模块

关中断;

判断是否已采满8次,是直接跳至结束中断部分,否继续执行;

判断是否已采到越界值,是直接跳至结束中断部分,否继续执行;

采入压力值;

判断是否越界,是置afg为0ffh,直接跳至结束中断部分,否继续执行;

将采样值存入ybuff;

启动0809in1;

延时;

采入温度值;

判断是否越界,是置afg为0ffh,直接跳至结束中断部分,否继续执行;

将采样值存入wbuff;

启动0809in0;

发中断结束信号;

开中断;

 

流程图:

●中断服务程序流程图:

●主程序流程图

主要程序代码:

.486p

datasegmentat0use16

org1000h

maxdb?

ygeweidb?

yshiweidb?

ybaiweidb?

wgeweidb?

wshiweidb?

wbaiweidb?

ybuffdb8dup(?

wbuffdb8dup(?

cdb?

s8db?

afgdb?

dataends

codesegmentuse16

assumeds:

data,cs:

code

org1600h

beg:

jmpstart

sevencoddb0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,

80h,90h,88h,83h,0c6h,0a1h,86h,8eh

start:

movax,data

movds,ax

cli

movmax,0c8h

movc,0h

movs8,8

movafg,00h

moveax,81808080h;8255初始化

movdx,20ch;控制口方式字左三片80h,右一片81h

outdx,eax

moveax,0ffffffffh

movdx,200h

outdx,eax;a口灭灯

;moveax,0ffffffffh

movdx,204h

outdx,eax;b口熄灭,输出占空比,led灭

moveax,0c05060ah

movdx,208h

outdx,eax

moval,13h;8259初始化icw1

movdx,3a0h

outdx,al

calldelayin1

moval,08h;icw2

movdx,3a8h

outdx,al

calldelayin1

movax,05h;icw4

outdx,al

calldelayin1

movax,offsetpick;中断向量设置,08h号中断

movbx,20h

mov[bx],ax

movax,segpick

mov[bx+2],ax

moval,00h;中断屏蔽字

movdx,3a8H

outdx,al

movdx,3e0h;启动0809in0口开始

outdx,al

next:

sti

calldelayint

cli

cmpafg,0ffh

jewarn1

leabx,ybuff

xorax,ax

movcx,8

addby:

addal,[bx]

adcah,0

incbx

loopaddby

movcl,8

divcl;平均值在al中

movah,0h

movcl,10

divcl

movygewei,ah

movah,0h

divcl

movyshiwei,ah;换码

leabx,sevencod

movybaiwei,al

moval,ygewei

xlat

movygewei,al

moval,yshiwei

xlat

movyshiwei,al

moval,ybaiwei

xlat

movybaiwei,al

leabx,wbuff

xorax,ax

movcx,8

addbw:

addal,[bx]

adcah,0

incbx

loopaddbw

movcl,8

divcl;平均值在al中

movah,0h

movcl,10

divcl

movwgewei,ah

movah,0h

divcl

movwshiwei,ah

movwbaiwei,al

leabx,sevencod

moval,wgewei;换码

xlat

movwgewei,al

moval,wshiwei

xlat

movwshiwei,al

moval,wbaiwei

xlat

movwbaiwei,al

movdx,200h;输出结果

moval,ybaiwei

outdx,al

movdx,201h

moval,ygewei

outdx,al

movdx,202h

moval,wshiwei

outdx,al

movdx,204h

moval,yshiwei

outdx,al

movdx,205h

moval,wbaiwei

outdx,al

movdx,206h

moval,wgewei

outdx,al

moval,0

in55c:

movdx,207h

moval,0f0h;占空比输入无效;灭灯

outdx,al

movdx,20bh

inal,dx

cmpal,00h

jein55c

moval,0ffh;占空比输入有效;灭灯

movdx,207h

outdx,al

movafg,00h

movc,0

jmpnext

warn1:

movdx,207h;输出报警

moval,00h

outdx,al;占空比输入无效;亮灯

movdx,20bh

in55cn:

inal,dx

cmpal,0fh

jein55cn

jmpin55c

pickproc

cli

cmpc,8

jenend

cmpafg,0ffh

jeincc

movdx,3e0h

inal,dx

cmpal,max

jbsavby

movafg,0ffh

jmpincc

savby:

movybuff[bx],al

movdx,3e4h

outdx,al

calldelayin1

inal,dx

cmpal,max

jbsavbw

movafg,0ffh

jmpincc

savbw:

movwbuff[bx],al

incbx

movdx,3e0h

outdx,al

incc:

incc

nend:

moval,20h;发中断结束信号

movdx,3a0h

outdx,al

sti

iret

pickendp

delayin1proc

pushdx

pushax

pushcx

movcx,200h

loop$

popcx

popax

popdx

ret

delayin1endp

delayintproc

pushdx

pushax

pushcx

movcx,0h

loop$

popcx

popax

popdx

ret

delayintendp

codeends

endbeg

 

(3)测试结果与分析

1.关闭启停键,运行程序,占空比输入等亮起,表示无效,数码管显示为000和000;

2.打开启停键,温度值显示为173,表示此时采集到的温度值为173,随时间的推移,温度值逐渐增大,用手摸一下热敏电阻下方的三端稳压管U3,可以感觉到其温度上升;

3.不久之后,温度上升至199便不再上升,此时两个同时led灯亮起,蜂鸣器鸣叫报警,此时说明检测到温度超过允许的最大值,且自动使占空比输入无效;

4.关闭启停键,报警灯熄灭,蜂鸣器停止鸣叫,占空比输入等亮,表示无效;

5.过几分钟后,启动启停键,占空比输入灯熄灭,表示有效,数码管显示温度值为187并逐渐上升,表明重新加热,温度测试完毕;

6.按压压力感应器,数码管压力显示部分数值随手的按压力度增大而减小;

7.用力按压压力感应器,使其结果超过200,数码管显示数值停留在199,此时报警led灯亮起,蜂鸣器鸣叫报警,此时说明检测到压力超过允许的最大值;

8.松开手,关闭启停键,报警灯熄灭,蜂鸣器停止鸣叫;

9.启动启停键,压力显示数值回到000,继续按压压力感应器,显示数值重新开始变化,压力测试完毕。

结果表明,程序运行正确且满足实验要求。

五、课设小结

报告的最后,我来总结一下我的这次微机原理与接口技术课程设计。

课设最初,我像很多同学一样,想图个简单,寒假也可以早点回去,弄个电子钟得了,反正电脑里有源代码,只要看懂并且自己测试成功便可以了。

可是,强烈的自我责任感告诉我,坚决不能浪费一个这样好的锻炼自我能力的机会,我问自己:

“抄人家的程序有意思么?

!

一点挑战性都没有。

”于是,我毅然决定修改实验题目,做数据采集。

正式课设的前一两天,感觉非常迷茫,看了实验指导书的介绍,以及书上我认为存在一定问题的流程图,脑子里乱七八糟,完全无从下手去编程。

首先最重要的一点是不能抽象的思考出程序运行的整个过程,特别是中断服务程序在何时应该被调入,哪些工作应该由主程序做,哪些由中断服务程序完成。

于是,我根据自己对实验要求的理解,一步一步的画出了我自己的流程图,也就是上面的流程图的雏形。

根据流程图编写出了程序。

在这过程中,遇到了一些问题。

令我印象最为深刻的是决定如何采样。

因为0809采样有两路信号,发中断请求却是一个口,这样要在中断服务无程序中判断采样是那一路数据,以及下次启动0809的那一路数据进行转换,这样就比较麻烦。

在做数据采集的同学之间,,我们也讨论过这个问题,有同学的想法是一次中断程序完成一次所有数据的采集,即16个数据,这样的做法我的想法是已经失去了采用中断的意义了。

于是,我的做法是,一次采两个数据,每一路一个,进八次中断完成一整次采集。

另一个印象比较深刻的问题是如何控制输出报警信息以及占空比输入和控制开关键,即设置启停键。

由于我所用到显示的数码管只需六个,即用到了3片8255,于是我便想到用最后一片来完成以上功能,B下口输出占空比,B上口输出报警,C下口设为启停键输入。

完成编程后的在运行过程中,遇到的第一个问题是在求平均数时出现了除发错误,经过检查时被除数计算错误,数值太大导致除法溢出。

在检查与改正的过程中,我不知不觉中又复习了一遍算数运算过程。

所以说,课设的过程也是是一个学习的过程,更是一个复习的过程。

你说我怎么能放弃这么好的一个过程呢!

之后进行的调试就比较顺利了,由于有了流程图,编写出的程序严格地按照流程图运行,因此运行结果也不会错得太离谱。

这次课设,首先,我感到很欣慰,因为我选择了自己完成课设,并且达到了目的。

其次,我感到很高兴,因为通过这次课设,不管是在理论学习上还是在实践应用上,我的能力都得到了进一步的提高,这些都是以后在职场上拼杀的本钱!

有了这些,我才能在职场中脱颖而出!

最后,感谢老师给我们安排这次机会,让我们得到成长!

 

计算机0802龚科

2011年1月8日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1