微信原理课设报告.docx
《微信原理课设报告.docx》由会员分享,可在线阅读,更多相关《微信原理课设报告.docx(19页珍藏版)》请在冰豆网上搜索。
微信原理课设报告
微机原理课程设计报告
数据采集(中断法)
学院:
电子信息工程学院
专业:
信息工程
姓名学号:
同实验者:
完成日期:
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