微机原理课程设计报告数据采集系统三中断法综述文档格式.docx
《微机原理课程设计报告数据采集系统三中断法综述文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计报告数据采集系统三中断法综述文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
量纲转换模块在中断服务程序内完成,只要将IN0的数字量分别除以51,商存入显示IN0的个位存储单元;
余数乘以十,再除以51,商存入十分位存储单元;
余数再乘以十,除以51,若余数大于25,则商加1,小于25则舍去,这样就达到四舍五入的精度,再把商存入百分位存储单元;
以供七段数码管显示时调用,BCD码转换模块可参考图10所示的流程图。
(4)数码管显示模块
数码管显示模块比较简单,自编程序可参考实验指导书图1-6所示的流程图,也可参考实验8255并行口中的显示模块,应注意的是在显示个位时,要加上小数点的显示,这可以在查表获取个位段码后,再加上80H来实现,注意每一位显示后要适当延迟时间。
(5)中断服务子程序模块
考虑到0832的输出是0809IN1的输入,因此,为防止在执行中断服务子程序时,二次进入中断服务子程序,故在进入中断服务子程序后,应关闭中断,而在退出中断前开中断,以便下次中断进入。
中断服务子程序模块主要完成对IN0数据的读取和保存,对IN1的启动和读取,对IN0数据的BCD转换等任务。
1、程序流程图
数据采集三主程序流程图如图4-3-2所示;
中断服务子程序如图4-3-3所示。
数码管显示子程序流程图如图3-4-7所示,键盘扫描流程图如图4-3-4所示。
图4-3-2数据采集三主程序流程图
图4-3-4键盘扫描程序流程图
六、试验所遇问题及解决方法
问题:
在转动电位器,始终没有反应,电路也检查多遍。
分析:
电路连接可能存在不稳定性,也有可能是机器有些损坏啥的。
解决方法:
换了个微机实验机器,然后把线路很稳定的连接,转动电位器终于出现正确的反应。
七、心得体会及建议
体会:
通过这次微机原理的课程设计,实验制作,让我了解了设计电路的程序,也让我了解了关于数据采集系统三(中断法)的原理和设计理念,加强了自身动手、思考和解决问题的能力。
在此次的数据采集设计过程中,我更进一步的熟悉了机箱的结构及掌握了各芯片的工作原理和其具体的使用方法,巩固和加强了课本知识。
认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。
通过课程设计,我真正领悟到了“苦中作乐”这词的真正含义,设计连接电路确实有些辛苦,但是还是很有乐趣的,当一个一个的问题被自己发现,然后自己一步一步的按照实验原理去解决问题,知道最后完全解决问题之后,一种难以言明的喜悦心情和成就感瞬间充斥整个大脑和身体,我想这也算是课程设计的乐趣所在了。
通过这次课程设计我还知道了,理论与实际相结合是和重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来才能更好的提高我们的能力,更好更全面地发展我们的各项能力,可以说,这次课程设计,我受益匪浅。
建议:
1.希望老师们能在上课期间增加必要的试验箱器件知识,同时在课外增加一些汇编语言在生活中应用的相关知识介绍,帮助学生提高工程意识,在后期学习当中有一种将知识运用于实践的思想。
2.希望老师可以提前布置和安排微机原理课设的任务,老师们也知道,一方面;
我们也可以多多准备一下,另一方面,随着期末考试的紧逼,后续课程的复习也是大家要付出很多时间的。
以上两点建议希望老师们能接纳,先谢谢老师了。
八、源程序
;
*************回车宏定义*********
CRLFMACRO
MOVDL,0DH
MOVAH,02H
INT21H;
宏定义了回车
ENDM
*********端口地址定义***********
Y0EQU3000H;
片选Y0对应的端口始地址,0809,0832
Y2EQU3040H;
片选Y2对应的端口始地址
IN1EQUY0+01H*4
ADCSEQUY0;
AD0809的端口地址
DACSEQUY2;
DAC0832的端口地址
Y3EQU3060H
TIMER0EQUY3+00H*4;
8254计数器0端口地址,8254
TIMER1EQUY3+01H*4;
8254计数器1端口地址
TIMER2EQUY3+02H*4;
8254计数器2端口地址
TCTLEQUY3+03H*4;
8254控制寄存器端口地址
Y1EQU3020H;
片选Y1对应的端口始地址,8255
PA55EQUY1+00H*4;
8255的A口地址
PB55EQUY1+01H*4;
8255的B口地址
PC55EQUY1+02H*4;
8255的C口地址
PCTLEQUY1+03H*4;
8255的控制寄存器地址
INTR_IVADDEQU01C8H;
INTR对应的中断矢量地址,8259
INTR_OCW1EQU0A1H;
INTR对应PC机内部8259的OCW1地址
INTR_OCW2EQU0A0H;
INTR对应PC机内部8259的OCW2地址
INTR_IMEQU0FBH;
INTR对应的中断屏蔽字
Y7EQU30E0H;
片选Y7对应的端口始地址
MY8259_ICW1EQUY7+00H;
实验系统中8259的ICW1端口地址
MY8259_ICW2EQUY7+04H;
实验系统中8259的ICW2端口地址
MY8259_ICW3EQUY7+04H;
实验系统中8259的ICW3端口地址
MY8259_ICW4EQUY7+04H;
实验系统中8259的ICW4端口地址
MY8259_OCW1EQUY7+04H;
实验系统中8259的OCW1端口地址
MY8259_OCW2EQUY7+00H;
实验系统中8259的OCW2端口地址
MY8259_OCW3EQUY7+00H;
实验系统中8259的OCW3端口地址
*********************************堆栈段定义****************************************
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
*********堆栈段定义*****************************************************************
DATASEGMENT
DCTBLDB3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh;
数码管的段码表
DB77h,7Ch,39h,5Eh,79h,71h,00H
NDB2
IN0INDB?
IN1OUTDB?
A3DB?
BDB3DUP(?
D1DB0AH
E1DB33H
FLAGDB?
MES4DB0DH,0AH,'
++++++WELCOMETOWEIJIYUANLIKESHE:
++++++'
0DH,0AH,'
$'
MES0DB0DH,0AH,'
********DATACOLECTIONSYSTEM********'
MES1DB0DH,0AH,'
------------ZUOZHE:
LIUJINGANDWANGZHIMING'
MESSDB0DH,'
PRESSANYKEYTOENDTHESYSTEM!
'
0DH,0AH,0DH,0AH,'
MES2DB0DH,'
IN1OUTDATA:
$'
0DH,'
CS_BAKDW?
;
保存INTR原中断处理程序入口段地址的变量
IP_BAKDW?
保存INTR原中断处理程序入口偏移地址的变量
IM_BAKDB?
保存INTR原中断屏蔽字的变量
DATAENDS
*********代码段定义***********
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK1,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,10000000B;
8255初始
MOVDX,PCTL
OUTDX,AL
MOVDX,OFFSETMES4
MOVAH,9;
显示MES4
INT21H
MOVDX,OFFSETMES0
显示MES0
MOVDX,OFFSETMES1
显示MES1
INT21H
MOVDX,OFFSETMESS
显示MESS
CLI;
8259初始
MOVAX,0000H
MOVES,AX;
替换INTR的中断矢量
MOVDI,INTR_IVADD;
保存INTR原中断处理程序入口偏移地址
MOVAX,ES:
[DI]
MOVIP_BAK,AX
MOVAX,OFFSETMYISR;
设置当前中断处理程序入口偏移地址
MOVES:
[DI],AX
ADDDI,2
[DI];
保存INTR原中断处理程序入口段地址
MOVCS_BAK,AX
MOVAX,SEGMYISR;
设置当前中断处理程序入口段地址
[DI],AX
MOVDX,INTR_OCW1;
设置中断屏蔽寄存器,打开INTR的屏蔽位
INAL,DX;
保存INTR原中断屏蔽字
MOVIM_BAK,AL
ANDAL,INTR_IM;
允许PC机内部8259的IR2中断
OUTDX,AL
MOVDX,MY8259_ICW1;
初始化实验系统中8259的ICW1
MOVAL,13H;
边沿触发、单片8259、需要ICW4
MOVDX,MY8259_ICW2
MOVAL,08H;
初始化实验系统中8259的ICW2
MOVDX,MY8259_ICW4;
初始化实验系统中8259的ICW4
MOVAL,01H;
非自动结束EOI
MOVDX,MY8259_OCW3
MOVAL,0AH
OUTDX,AL
MOVDX,MY8259_OCW1;
初始化实验系统中8259的OCW1
MOVAL,0FCH;
打开IR0的屏蔽位
OUTDX,AL
MOVDX,TCTL;
8254初始
MOVAL,17H
MOVDX,TIMER0;
MOVAL,2
OUTDX,AL
STI
S33:
MOVAL,0
MOVDX,ADCS;
启动0809IN0
MOVFLAG,0FFH
CALLDISPINT0
MOVDX,OFFSETMES2
显示MES2
MOVAL,IN1OUT
CALLDISPINT1
MOVDL,0FFH
MOVAH,6
INT21H
JZS33
QUIT:
CLI
MOVAX,0000H;
恢复INTR原中断矢量
MOVES,AX
恢复INTR原中断处理程序入口偏移地址
MOVAX,IP_BAK
MOVAX,CS_BAK;
恢复INTR原中断处理程序入口段地址
MOVDX,INTR_OCW1
MOVAL,IM_BAK;
恢复INTR原中断屏蔽寄存器的屏蔽字
EXIT:
MOVAH,4CH;
返回到DOS
INT21H
***********************数码管显示INT1****************************
DISPINT1PROC
PUSHAX
MOVBL,AL;
屏幕显示
ANDAL,0F0H
MOVCL,4;
显示高位
RORAL,CL
CALLCRT1
MOVAL,BL
ANDAL,0FH;
显示低位
CRLF
POPAX
RET
DISPINT1ENDP
CRT1PROC
ADDAL,30H
CMPAL,39H
JBED0
ADDAL,7;
在屏幕上显示一位16进制字符
D0:
MOVDL,AL
MOVAH,2
INT21H
RET
CRT1ENDP
***********************数码管显示INT0****************************
DISPINT0PROC
PUSHDS
MOVAL,IN0IN;
转换IN0个位十分位百分位
MOVAH,0
DIVE1
MOVSI,OFFSETB
MOV[SI],AL
MOVAL,AH
MULD1
INCSI
CMPAH,19H
JNBES11
MOVAL,0
JMPS2
S11:
INCAL
S2:
MOV[SI],AL
MOVCL,8;
从最左边开始显示
MOVSI,OFFSETB
MOVAL,[SI]
LEABX,DCTBL
XLAT;
输出段码
ADDAL,80H
MOVDX,PB55
MOVDX,PA55
MOVAL,CL;
输出位码
CALLDELAY
INCSI;
段码地址+1
ROLCL,1;
位码向左移1位
XLAT
CALLDELAY
MOVAL,[SI]
CALLDELAY;
输出三位码
MOVSI,OFFSETB
MOVAL,[SI]
CMPAL,2
JBA2
MOVDX,PC55
MOVAL,0FFH
JMPG3
A2:
MOVDX,PC55
MOVAL,00H
8254计数器1控制蜂鸣器
MOVAL,77H
MOVDX,TIMER1;
MOVAL,00
MOVAL,01
G3:
POPAX
POPDS
DISPINT0ENDP
MYISRPROCNEAR;
中断处理程序MYISR
PUSHAX
PUSHDX
关中断
INAL,DX
ANDAL,03H
CMPAL,01H
JEIROISR
JMPOVER
IROISR:
CMPFLAG,0FFH
JES
MOVDX,IN1
MOVIN1OUT,AL;
A2为IN1AD后的值
S:
MOVDX,ADCS
INAL,DX
MOVIN0IN,AL;
A1为IN0
MOVAH,0
DIVN;
IN0AD后线性转换给0832的值
NEGAL
ADDAL,80H
MOVBL,AL
CMPBL,40H
JBSS1
SUBBL,4
SS1:
MOVAL,BL
MOVA3,AL
MOVDX,DACS
MOVDX,IN1;
启动IN1
MOVAL,0
MOVFLAG,AL
OVER:
MOVDX,INTR_OCW2;
向PC机内部8259发送中断结束命令
MOVAL,20H
OUT20H,AL
STI
POPDX
POPAX
IRET
MYISRENDP
DELAYPROCNEAR;
延时
PUSHCX
MOVCX,0FFFFH
LOOP$
POPCX
DELAYENDP
CODEENDS
ENDSTART