微信原理课设报告.docx

上传人:b****7 文档编号:9630391 上传时间:2023-02-05 格式:DOCX 页数:19 大小:68.68KB
下载 相关 举报
微信原理课设报告.docx_第1页
第1页 / 共19页
微信原理课设报告.docx_第2页
第2页 / 共19页
微信原理课设报告.docx_第3页
第3页 / 共19页
微信原理课设报告.docx_第4页
第4页 / 共19页
微信原理课设报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

微信原理课设报告.docx

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

微信原理课设报告.docx

微信原理课设报告

微机原理课程设计报告

数据采集(中断法)

学院:

电子信息工程学院

专业:

信息工程

姓名学号:

同实验者:

完成日期:

2011年6月21日

 

一、课设目的:

进一步掌握微机原理知识,了解微机在实时采集过程中的应用,学习、掌握编程和程序调试方法。

二、课设内容和要求:

用中断法,将ADC0809通道0外接0~5V电压,转换成数字量后,在七段LED数码管上,以小数点后两位(几十毫伏)的精度,显示其模拟电压的十进值;0809通道0的数字量以线性控制方式送DAC0832输出,当通道0的电压为5V时,0832的OUT为0V;当通道0的电压为0时,0832的OUT为2.5V。

此模拟电压再送到ADC0809通道1,转换后的数字量在CRT上以十六进制显示。

ADC0809的CLK脉冲,由定时器8254的OUT0提供;ADC0809的EOC信号,用作8259中断请求信号。

要有较好的人机对话界面;控制程序的运行。

三、硬件设计

因采用了PC机和微机实验箱,硬件电路设计相对比较简单,主要利用微机实验箱上的8255并行口、ADC0809、DAC0832、七段LED数码管单元、8254定时/计数器、74LS574输出接口、电位器等单元电路,就构成了数据采集系统,硬件电原理框图4-3-1所示。

四、软件设计

本设计通过软件编程,实现模/数转换器0809分别对IN00-5V直流电压的采样,和经0832线性控制后输出电压的IN1采样,IN0的值转换成十进制后,在七段数码管上显示;IN1的值在显示器上显示。

CPU根据IN0的值,使八位发光二极管根据题目的要求,指示相应的范围。

1、设计思想

数据采集系统分成六个功能模块,分别是主程序模块、量纲转换模块、数码管显示模块、中断服务子程序模块。

(1)主程序模块

根据题目要求,采用中断方式实现数据采集,因此可把读取IN0的值并保存,和此数字量经线性控制后送给0832输出,作为0809IN1的模拟电压和IN1的启动、读取以及IN0的BCD码转换,放在中断服务子程序模块中完成。

所以在主程序模块上主要实现启动0809IN0、显示模块的调用、和中断结束部分程序。

(2)量纲转换模块

量纲转换模块在中断服务程序内完成,只要将IN0的数字量分别除以51,商存入显示IN0的个位存储单元;余数乘以十,再除以51,商存入十分位存储单元;余数再乘以十,除以51,若余数大于25,则商加1,小于25则舍去,这样就达到四舍五入的精度,再把商存入百分位存储单元;以供七段数码管显示时调用,BCD码转换模块可参考图10所示的流程图。

(3)数码管显示模块

数码管显示模块比较简单,自编程序可参考图1-6所示的流程图,也可参考实验8255并行口中的显示模块,应注意的是在显示个位时,要加上小数点的显示,这可以在查表获取个位段码后,再加上80H来实现,注意每一位显示后要适当延迟时间。

(4)中断服务子程序模块

考虑到0832的输出是0809IN1的输入,因此,为防止在执行中断服务子程序时,二次进入中断服务子程序,故在进入中断服务子程序后,应关闭中断,而在退出中断前开中断,以便下次中断进入。

中断服务子程序模块主要完成对IN0数据的读取和保存,对IN1的启动和读取,对IN0数据的BCD转换等任务。

2.参考流程图:

数据采集三主程序流程图如图4-3-2所示;中断服务子程序如图4-3-3所示。

五.附加功能及实现说明

小键盘控制主菜单转向

硬件部分增加两条连线:

8255的PC0-PC3端连接小键盘的Y1-Y4接口,8255的PC4-PC7端连接小键盘的X1-X4接口。

软件相应增加一个键盘扫描模块TESTKEY,用于在主程序运行之前调整主菜单转向。

当显示欢迎主菜单后,按“1”,转向主程序,按“2”,退出。

六.运行结果

程序正常运行跳出欢迎主菜单,通过小键盘选择“1”进入主程序运行。

当调整电平控制旋钮时,数码管前三位依次显示电平实际数值的个位(含小数点)、十分位和百分位。

同时显示屏不断显示当前0809通道1的输入模拟量值。

七.课设体会

经过几天的紧张编写和调试,我和同学终于成功实现了课程设计要求的全部功能,并在理解程序软硬件原理的基础上扩展了小键盘附加功能。

在刚接到课设要求任务时,我非常头大。

后来仔细的研究了6种芯片的理论知识,经过认真的看书,发现许多程序其实在先前的微机实验中都用过,很多代码和课设中所需有相似之处,所以一部分代码直接可以拿来使用。

但问题最难的部分在于把这些零散的一段段代码根据系统的要求组合在一起,特别是接口部分代码需要和硬件配合一起检查、调试,非常考验人的细心、耐心。

我们从数据采集的流程为主线,一步步检查软硬件,发现问题就两边同时检查,讨论修改。

为了便于调试、修改,代码的绝大部分关键地方都加了注释语句,一目了然。

每个模块都经过反复修改,特别是主程序和中断服务程序,虽然有流程图的辅助,但相关原理还是不太容易理解,后来和同学经过讨论和单步调试,清楚了程序运行过程中段寄存器等值的变化,思路渐渐清晰,程序也修改得更加流畅。

程序第一次运行时,数码管什么反应都没有,这让我们非常沮丧,后来耐下心来仔细检查连成一片的硬件,发现原来是8255芯片有一部分端口安装反了。

后来当功能最终实现时,我们都很兴奋,如释重负的感觉,并且很有成就感。

趁着一股子干劲,我们想添加一些附加功能,但由于能力有限,最终没能调出实现声音功能的附加功能,只是对照先前微机实验中有关小键盘的知识添加了小键盘的功能。

从不怎么懂到实现功能,再到自主增加功能,课程设计的过程就是强化基础知识,复习巩固实验,熟悉80X86软硬件环境的良好学习机会。

希望以后的课程安排中能多一些这样的实践环节,这才是我们收获最大的地方。

图4-3-1数据采集系统三电原理框图

 

图4-3-2数据采集三主程序流程图

 

 

;数据采集系统三(中断法)程序清单

CRLFMACRO

MOVAH,02H

MOVDL,0DH;显示回车

INT21H

ENDM

DATASEGMENT

MES0DB0DH,0AH,0DH,0AH,'*****************WELCOME*****************',0DH,0AH,0DH,0AH

DB0DH,0AH,0DH,0AH,'SIGNALGATHERINGPRORGRAM',0DH,0AH

DB0DH,0AH,0DH,0AH,'MADEBY040920108LiYuejiao&040920105WuHuan',0DH,0AH,0DH,0AH

DB'PRESS1TOSTARTPROGRAM',0DH,0AH,0DH,0AH

DB'PRESS2TOQUIT',0DH,0AH,0DH,0AH

DB'***********************************************',0DH,0AH,'$'

MES1DB'THEVALUEIS:

$',0DH,'$'

TABLE1DB11H,21H,41H,81H,12H,22H,42H,82H

DB14H,24H,44H,84H,18H,28H,48H,88H

MY8254EQU306CH;8254控制寄存器

MY82540EQU3060H;8254计数器0

INTR_IVADDEQU01C8H

IP_BAKDW?

CS_BAKDW?

IM_BAKDB?

INTR_OCW1EQU0A1H

INTR_OCW2EQU0A0H

IN1DB?

IN0DB?

FLAGDB?

KEYDB?

KEYCDB?

KEYRDB?

GWDB?

;个位存储单元

SFDB?

;十分位存储单元

BFDB?

;百分位存储单元

DCTBLDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

DB77H,7CH,39H,5EH,79H,71H

MY8259_ICW1EQU30E0H

MY8259_ICW2EQU30E4H

MY8259_ICW3EQU30E4H

MY8259_ICW4EQU30E4H

MY8259_OCW1EQU30E4H

MY8259_OCW2EQU30E0H

MY8259_OCW3EQU30E0H

DATAENDS

STACK1SEGMENTSTACK

DW256DUP(0)

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK1,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEADX,MES0

MOVAH,09

INT21H

LOP1:

CALLTESTKEY

CMPKEY,01H

JZA

CMPKEY,02H

JZB

JMPLOP1

;MOVAH,01H;读键盘输入值

;INT21H

;CMPAL,31H;如果输入为1则跳转

;JZA

;CMPAL,32H;如果为2则返回dos

;JZEXIT2

B:

MOVAH,4CH

INT21H

TESTKEYPROC;反转法小键盘子程序

KEY0:

MOVAL,81H;8255的控制字,PC0-3入,PC4-7出

MOVDX,302CH

OUTDX,AL

MOVAL,0;读行值

MOVDX,3028H

OUTDX,AL

INAL,DX

ANDAL,0FH;屏蔽列值后保存

MOVKEYC,AL

KEY1:

MOVAL,88H;8255的控制字,PC0-3出,PC4-7入

MOVDX,302CH

OUTDX,AL

MOVAL,0;读列值

MOVDX,3028H

OUTDX,AL

INAL,DX

ANDAL,0F0H;读列值,屏蔽行值后合并取反

ORAL,KEYC

NOTAL

CMPAL,0;无键按下退出子程序

JZKEYEND

MOVSI,OFFSETTABLE1

MOVCX,16

MOVDL,00H

KEY2:

CMPAL,[SI]

JZKEY3

INCSI

INCDL

DECCX

JZKEYEND

JMPKEY2

KEY3:

MOVKEY,DL;送键值到KEY

KEYEND:

RET

TESTKEYENDP

A:

CLI

LEADX,MES1

MOVAH,09

INT21H

MOVAX,0000H;替换INTR的中断矢量

MOVES,AX

MOVDI,INTR_IVADD

MOVAX,ES:

[DI]

MOVIP_BAK,AX;保存INTR原中断处理程序入口偏移地址

MOVAX,OFFSETMYISR

MOVES:

[DI],AX;设置当前中断处理程序入口偏移地址

ADDDI,2

MOVAX,ES:

[DI]

MOVCS_BAK,AX;保存INTR原中断处理程序入口段地址

MOVAX,SEGMYISR

MOVES:

[DI],AX;设置当前中断处理程序入口段地址

MOVDX,INTR_OCW1;设置中断屏蔽寄存器,打开INTR的屏蔽位

INAL,DX

MOVIM_BAK,AL;保存INTR原中断屏蔽字

ANDAL,0FBH;允许IR2

OUTDX,AL

MOVDX,MY8259_ICW1;初始化实验系统中8259的ICW1

MOVAL,13H;边沿触发、单片8259、需要ICW4

OUTDX,AL

MOVDX,MY8259_ICW2;初始化实验系统中8259的ICW2

MOVAL,08H

OUTDX,AL

MOVDX,MY8259_ICW4;初始化实验系统中8259的ICW4

MOVAL,01H;非自动结束EOI

OUTDX,AL

MOVDX,MY8259_OCW3;向8259的OCW3发送读取IRR命令

MOVAL,0AH

OUTDX,AL

MOVDX,MY8259_OCW1;初始化实验系统中8259的OCW1

MOVAL,0FEH;打开IR0的屏蔽位

OUTDX,AL

MOVDX,MY8254;8254初始化

MOVAL,16H;8254控制字,通道0低位读写方式3二进制

OUTDX,AL

MOVDX,MY82540

MOVAL,4;8254给0809时钟信号

OUTDX,AL

MOVDX,302CH;8255控制字,A口输出位码,B口输出段码

MOVAL,80H

OUTDX,AL

STI

WAIT1:

MOVDX,3000H;启动0809的IN0

OUTDX,AL

CALLDELAY;延时,不是给0809处理的时间,而是让LED和屏幕显示延时

MOVAL,1

MOVFLAG,AL

CALLLEDDISP

MOVAH,2

MOVBH,0

MOVDH,27

MOVDL,26

INT10H;确定光标的位置

MOVAL,IN1;通道1的值给AL

MOVBL,AL

ANDAL,0F0H;取AL的高四位,先显示高四位(16进制)

MOVCL,4

RORAL,CL;AL高四位移到低四位

CALLCRT1

MOVAL,BL

ANDAL,0FH;显示低位

CALLCRT1;调用屏幕显示子程序,显示单个16字符

CRLF

INT21H

MOVAH,1

INT16H

LOP2:

CALLTESTKEY;若按KEY2,则退出程序

CMPKEY,02H

JZQUIT

JMPWAIT1

JZWAIT1

QUIT:

CLI;关中断,恢复原来INTR中断参数

MOVAX,0000H;恢复INTR原中断矢量

MOVES,AX

MOVDI,INTR_IVADD

MOVAX,IP_BAK;恢复INTR原中断处理程序入口偏移地址

MOVES:

[DI],AX

ADDDI,2

MOVAX,CS_BAK;恢复INTR原中断处理程序入口段地址

MOVES:

[DI],AX

MOVDX,INTR_OCW1

MOVAL,IM_BAK;恢复INTR原中断屏蔽寄存器的屏蔽字

OUTDX,AL

STI;开中断

MOVAX,4C00H

INT21H

MYISRPROCNEAR;中断服务程序

PUSHAX

PUSHBX

PUSHCX

PUSHDX

CLI

CMPFLAG,1;比较标识符

JZPART1

CALLDELAY

MOVDX,3000H

INAL,DX;读IN1的值

MOVIN1,AL

JMPEXIT1

PART1:

MOVDX,3000H;读IN0值,保存在IN0中

INAL,DX

MOVIN0,AL

NEGAL

SHRAL,1;线性转换

MOVDX,3040H

OUTDX,AL;启动0832,将线性变换后的数字量送给0832

MOVDX,3004H;从IN1端口读IN1值,并保存

OUTDX,AL;启动IN1

CALLDELAY

MOVAX,0

MOVFLAG,AL

EXIT1:

MOVDX,INTR_OCW2;发中断结束命令

MOVAL,20H

OUTDX,AL

MOVAL,20H

OUT20H,AL

POPDX

POPCX

POPBX

POPAX

STI

IRET

MYISRENDP

CRT1PROC;在屏幕上显示16进制数值

ADDAL,30H

CMPAL,39H

JBED0

ADDAL,7

D0:

MOVDL,AL

MOVAH,2

INT21H

RET

CRT1ENDP

LEDDISPPROC;数码管显示,实现小数点精确计算

MOVAL,IN0

XORAH,AH

MOVDL,51

MOVDH,10

DIVDL

MOVGW,AL

XCHGAH,AL

XORAH,AH

MULDH

DIVDL

MOVSF,AL

XCHGAH,AL

XORAH,AH

MULDH

DIVDL

CMPAH,25

JBEXIT

ADDAL,1

EXIT:

MOVBF,AL

CALLDISP

RET

LEDDISPENDP

DISPPROC

MOVAL,GW;显示个位

XORAH,AH

MOVSI,AX

LEABX,DCTBL

MOVAL,[BX+SI]

ADDAL,80H

MOVDX,3024H

OUTDX,AL

MOVDX,3020H

MOVAL,01H

OUTDX,AL

CALLDELAY

MOVAL,SF;显示十分位

MOVSI,AX

MOVAL,[BX+SI]

MOVDX,3024H

OUTDX,AL

MOVDX,3020H

MOVAL,02H

OUTDX,AL

CALLDELAY

MOVAL,BF;显示百分位

MOVSI,AX

MOVAL,[BX+SI]

MOVDX,3024H

OUTDX,AL

MOVDX,3020H

MOVAL,04H

OUTDX,AL

CALLDELAY

RET

DISPENDP

DELAYPROCNEAR;延迟子程序

PUSHCX

MOVCX,0FFFFH

LOOP$

POPCX

RET

DELAYENDP

CODEENDS

ENDSTART

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

当前位置:首页 > 小学教育 > 其它课程

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

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