资源描述
课程设计报告纸
微机原理课程设计
课设题目:数据采集系统三(中断法)
实验者姓名:
实验者学号:
学院:
数据采集系统三(中断法)
一、实验目的
进一步掌握微机原理知识,了解微机在实时采集过程中的应用,学习、掌握编程和程序调试方法。
二、实验内容
1、用中断法,将ADC 0809通道0外接0 ~ 5V电压,转换成数字量后,在七段LED数码管上,以小数点后两位(几十毫伏)的精度,显示其模拟电压的十进值;0809通道0的数字量以线性控制方式送DAC0832输出,当通道0的电压为5V时,0832的OUT为0V, 当通道0的电压为0时,0832的OUT为2.5V;此模拟电压再送到ADC 0809通道1,转换后的数字量在CRT上以十六进制显示。
2、ADC 0809 的CLK 脉冲,由定时器8254的OUT0提供;ADC 0809的EOC信号,用作8259中断请求信号。
3、要有较好的人机对话界面;控制程序的运行。
三、总体设计
1 、ADC 0809的IN0采集电位器0 — 5V电压,IN1采集0832输出的模拟量。
2 、DAC 0832将ADC 0809的IN0数字量后重新转换成模拟量输出。
3、8259用于检测ADC 0809转换是否结束和向CPU发送INTR信号
4、 8255为七段LED数码管显示提供显示驱动信息。
5、七段LED数码管显示ADC 0809的IN0的值。
6、8254提供ADC 0809的采样时钟脉冲。
7、有良好的人—机对话界面。系统运行时,显示主菜单,开始数据采集, 在数据采集时, 主键盘有键按下, 退出返回DOD系统。
四、硬件设计
因采用了PC机和微机实验箱, 硬件电路设计相对比较简单, 主要利用微机实验箱上的8255并行口、ADC 0809、DAC 0832、七段LED数码管单元、8254定时/计数器、74LS574输出接口、电位器等单元电路, 就构成了数据采集系统, 硬件电原理框图4-3-1所示。
五、软件设计
本设计通过软件编程,实现模/数转换器0809分别对IN0 0-5V直流电压的采样,和经0832线性控制后输出电压的IN1采样,IN0的值转换成十进制后,在七段数码管上显示; IN1的值在显示器上显示。CPU 根据IN0的值,使八位发光二极管根据题目的要求,指示相应的范围。
1、设计思想
数据采集系统分成四个功能模块,分别是主程序模块、量纲转换模块、数码管显示模块、中断服务子程序模块。
(1)主程序模块
根据题目要求,采用中断方式实现数据采集,因此可把读取IN0的值并保存,和此数字量经线性控制后送给0832输出, 作为0809 IN1的模拟电压和IN1的启动、读取以及IN0的BCD码转换, 放在中断服务子程序模块中完成。所以,在主程序模块上主要实现启动0809 IN0、显示模块的调用、和中断结束部分程序。
(2) 键盘扫描模块
设置键盘扫描模块,采用行列反转发,先PC4-PC7输出低电平,然后读入PC0-PC3.再让PC0-PC3输出低电平,读入PC4-PC7.合并扫描值,获得按键值。
(3) 量纲转换模块
量纲转换模块在中断服务程序内完成,只要将IN0的数字量分别除以51, 商存入显示IN0的个位存储单元; 余数乘以十,再除以51, 商存入十分位存储单元; 余数再乘以十,除以51, 若余数大于25,则商加1, 小于25则舍去, 这样就达到四舍五入的精度, 再把商存入百分位存储单元; 以供七段数码管显示时调用,BCD码转换模块可参考图10所示的流程图。
(4) 数码管显示模块
数码管显示模块比较简单,自编程序可参考实验指导书图1-6所示的流程图,也可参考实验8255并行口中的显示模块,应注意的是在显示个位时, 要加上小数点的显示,这可以在查表获取个位段码后,再加上80H来实现,注意每一位显示后要适当延迟时间。
(5) 中断服务子程序模块
考虑到0832的输出是0809 IN1的输入,因此,为防止在执行中断服务子程序时,二次进入中断服务子程序, 故在进入中断服务子程序后,应关闭中断,而在退出中断前开中断,以便下次中断进入。中断服务子程序模块主要完成对IN0数据的读取和保存,对IN1的启动和读取,对IN0数据的BCD转换等任务。
1、 程序流程图
数据采集三主程序流程图如图4-3-2所示; 中断服务子程序如图4-3-3所示。数码管显示子程序流程图如图3-4-7所示,键盘扫描流程图如图 4-3-4所示。
Y
N
初 始 化
显示提示信息
关中断
保存原中断向量表内容
设置新的中断向量表
保存原中断屏蔽寄存器值
允许IRQ2中断
8254初始化
开中断
启动0809 IN0
FLAG=0FFH
IN0值量纲转换后送显存
调用数码管显示子程序
将IN1的值进行ASCII码转换
显示器显示IN1的值
有键按下吗?
恢复原中断屏蔽寄存器值
恢复原中断向量表内容
结 束
图4-3-2 数据采集三主程序流程图
N
Y
图4-3-3 中断服务子程序流程图
读IN0值, 保存
IN0值按要求变换后,送0832输出
启动IN1
FLAG=0
读IN1值, 保存
发中断结束命令
返回主程序
恢复现场 ; 开中断
保护现场 ; 关中断
FLAG=01H ?
列值为0,读行值,屏蔽高四位后保存
行值为0,读列值,屏蔽低四位后保存
AL=合并行列后取反
AL=0?
Y
SI=键盘扫描码首址,CX=16,DL=0
N
AL=[SI]?
Y
N
键值=DL
键值缓冲区移位
DL+1,SI+1 CX-1
N
N
CX=0?
返回
图4-3-4 键盘扫描程序流程图
六、试验所遇问题及解决方法
问题:在转动电位器,始终没有反应,电路也检查多遍。
分析:电路连接可能存在不稳定性,也有可能是机器有些损坏啥的。
解决方法:换了个微机实验机器,然后把线路很稳定的连接,转动电位器终于出现正确的反应。
七、心得体会及建议
体会:通过这次微机原理的课程设计,实验制作,让我了解了设计电路的程序,也让我了解了关于数据采集系统三(中断法)的原理和设计理念,加强了自身动手、思考和解决问题的能力。在此次的数据采集设计过程中,我更进一步的熟悉了机箱的结构及掌握了各芯片的工作原理和其具体的使用方法,巩固和加强了课本知识。认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。
通过课程设计,我真正领悟到了“苦中作乐”这词的真正含义,设计连接电路确实有些辛苦,但是还是很有乐趣的,当一个一个的问题被自己发现,然后自己一步一步的按照实验原理去解决问题,知道最后完全解决问题之后,一种难以言明的喜悦心情和成就感瞬间充斥整个大脑和身体,我想这也算是课程设计的乐趣所在了。
通过这次课程设计我还知道了,理论与实际相结合是和重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来才能更好的提高我们的能力,更好更全面地发展我们的各项能力,可以说,这次课程设计,我受益匪浅。
建议:1.希望老师们能在上课期间增加必要的试验箱器件知识,同时在课外增加一些汇编语言在生活中应用的相关知识介绍,帮助学生提高工程意识,在后期学习当中有一种将知识运用于实践的思想。
2.希望老师可以提前布置和安排微机原理课设的任务,老师们也知道,一方面;我们也可以多多准备一下,另一方面,随着期末考试的紧逼,后续课程的复习也是大家要付出很多时间的。
以上两点建议希望老师们能接纳,先谢谢老师了。
八、源程序
;*************回车宏定义*********
CRLF MACRO
MOV DL, 0DH
MOV AH,02H
INT 21H ;宏定义了回车
ENDM
;*********端口地址定义***********
Y0 EQU 3000H ;片选Y0对应的端口始地址,0809,0832
Y2 EQU 3040H ;片选Y2对应的端口始地址
IN1 EQU Y0+01H*4
ADCS EQU Y0 ;AD0809的端口地址
DACS EQU Y2 ;DAC0832的端口地址
Y3 EQU 3060H
TIMER0 EQU Y3+00H*4 ;8254计数器0端口地址,8254
TIMER1 EQU Y3+01H*4 ;8254计数器1端口地址
TIMER2 EQU Y3+02H*4 ;8254计数器2端口地址
TCTL EQU Y3+03H*4 ;8254控制寄存器端口地址
Y1 EQU 3020H ;片选Y1对应的端口始地址,8255
PA55 EQU Y1+00H*4 ;8255的A口地址
PB55 EQU Y1+01H*4 ;8255的B口地址
PC55 EQU Y1+02H*4 ;8255的C口地址
PCTL EQU Y1+03H*4 ;8255的控制寄存器地址
INTR_IVADD EQU 01C8H ;INTR对应的中断矢量地址,8259
INTR_OCW1 EQU 0A1H ;INTR对应PC机内部8259的OCW1地址
INTR_OCW2 EQU 0A0H ;INTR对应PC机内部8259的OCW2地址
INTR_IM EQU 0FBH ;INTR对应的中断屏蔽字
Y7 EQU 30E0H ;片选Y7对应的端口始地址
MY8259_ICW1 EQU Y7+00H ;实验系统中8259的ICW1端口地址
MY8259_ICW2 EQU Y7+04H ;实验系统中8259的ICW2端口地址
MY8259_ICW3 EQU Y7+04H ;实验系统中8259的ICW3端口地址
MY8259_ICW4 EQU Y7+04H ;实验系统中8259的ICW4端口地址
MY8259_OCW1 EQU Y7+04H ;实验系统中8259的OCW1端口地址
MY8259_OCW2 EQU Y7+00H ;实验系统中8259的OCW2端口地址
MY8259_OCW3 EQU Y7+00H ;实验系统中8259的OCW3端口地址
;*********************************堆栈段定义****************************************
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
;*********堆栈段定义*****************************************************************
DATA SEGMENT
DCTBL DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh ;数码管的段码表
DB 77h,7Ch,39h,5Eh,79h,71h,00H
N DB 2
IN0IN DB ?
IN1OUT DB ?
A3 DB ?
B DB 3 DUP(?)
D1 DB 0AH
E1 DB 33H
FLAG DB ?
MES4 DB 0DH,0AH,'++++++ WELCOME TO WEI JI YUAN LI KE SHE: ++++++',0DH,0AH,'$'
MES0 DB 0DH,0AH,'******** DATA COLECTION SYSTEM ********',0DH,0AH,'$'
MES1 DB 0DH,0AH,'------------ ZUO ZHE :LIU JING AND WANG ZHI MING',0DH,0AH,'$'
MESS DB 0DH, 'PRESS ANY KEY TO END THE SYSTEM!',0DH,0AH,0DH, 0AH,'$'
MES2 DB 0DH, 'IN1OUT DATA : $',0DH,'$'
CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量
IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量
IM_BAK DB ? ;保存INTR原中断屏蔽字的变量
DATA ENDS
;*********代码段定义***********
CODE SEGMENT
ASSUME CS:CODE,SS:STACK1,DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV AL, 10000000B ;8255初始
MOV DX, PCTL
OUT DX, AL
MOV DX, OFFSET MES4
MOV AH, 9 ;显示MES4
INT 21H
MOV DX, OFFSET MES0
MOV AH, 9 ;显示MES0
INT 21H
MOV DX, OFFSET MES1
MOV AH, 9 ;显示MES1
INT 21H
MOV DX, OFFSET MESS
MOV AH, 9 ;显示MESS
INT 21H
CLI ; 8259初始
MOV AX, 0000H
MOV ES, AX ;替换INTR的中断矢量
MOV DI, INTR_IVADD ;保存INTR原中断处理程序入口偏移地址
MOV AX, ES:[DI]
MOV IP_BAK,AX
MOV AX, OFFSET MYISR ;设置当前中断处理程序入口偏移地址
MOV ES:[DI],AX
ADD DI, 2
MOV AX, ES:[DI] ;保存INTR原中断处理程序入口段地址
MOV CS_BAK,AX
MOV AX, SEG MYISR ;设置当前中断处理程序入口段地址
MOV ES:[DI],AX
MOV DX, INTR_OCW1 ;设置中断屏蔽寄存器,打开INTR的屏蔽位
IN AL, DX ;保存INTR原中断屏蔽字
MOV IM_BAK,AL
AND AL, INTR_IM ;允许PC机内部8259的IR2中断
OUT DX, AL
MOV DX, MY8259_ICW1 ; 初始化实验系统中8259的ICW1
MOV AL, 13H ;边沿触发、单片8259、需要ICW4
OUT DX, AL
MOV DX, MY8259_ICW2
MOV AL, 08H ;初始化实验系统中8259的ICW2
OUT DX, AL
MOV DX, MY8259_ICW4 ;初始化实验系统中8259的ICW4
MOV AL, 01H ;非自动结束EOI
OUT DX, AL
MOV DX,MY8259_OCW3
MOV AL, 0AH
OUT DX, AL
MOV DX, MY8259_OCW1 ;初始化实验系统中8259的OCW1
MOV AL, 0FCH ;打开IR0的屏蔽位
OUT DX, AL
MOV DX, TCTL ;8254初始
MOV AL, 17H
OUT DX, AL
MOV DX, TIMER0;
MOV AL,2
OUT DX,AL
STI
S33:
MOV AL, 0
MOV DX, ADCS ;启动0809 IN0
OUT DX, AL
MOV FLAG,0FFH
CALL DISPINT0
MOV DX, OFFSET MES2
MOV AH, 9 ;显示MES2
INT 21H
MOV AL,IN1OUT
CALL DISPINT1
MOV DL,0FFH
MOV AH,6
INT 21H
JZ S33
QUIT: CLI
MOV AX, 0000H ;恢复INTR原中断矢量
MOV ES, AX
MOV DI, INTR_IVADD ;恢复INTR原中断处理程序入口偏移地址
MOV AX, IP_BAK
MOV ES:[DI],AX
ADD DI, 2
MOV AX, CS_BAK ;恢复INTR原中断处理程序入口段地址
MOV ES:[DI],AX
MOV DX, INTR_OCW1
MOV AL, IM_BAK ;恢复INTR原中断屏蔽寄存器的屏蔽字
OUT DX, AL
STI
EXIT: MOV AH, 4CH ;返回到DOS
INT 21H
;***********************数码管显示INT1****************************
DISPINT1 PROC
PUSH AX
MOV BL,AL ; 屏幕显示
AND AL, 0F0H
MOV CL, 4 ; 显示高位
ROR AL, CL
CALL CRT1
MOV AL, BL
AND AL, 0FH ;显示低位
CALL CRT1
CRLF
POP AX
RET
DISPINT1 ENDP
CRT1 PROC
ADD AL, 30H
CMP AL, 39H
JBE D0
ADD AL, 7 ;在屏幕上显示一位16进制字符
D0: MOV DL, AL
MOV AH, 2
INT 21H
RET
CRT1 ENDP
;***********************数码管显示INT0****************************
DISPINT0 PROC
PUSH DS
PUSH AX
MOV AL,IN0IN ;转换IN0个位 十分位 百分位
MOV AH,0
DIV E1
MOV SI,OFFSET B
MOV [SI],AL
MOV AL,AH
MOV AH,0
MUL D1
DIV E1
INC SI
MOV [SI],AL
MOV AL,AH
MOV AH,0
MUL D1
DIV E1
INC SI
CMP AH,19H
JNBE S11
MOV AL,0
JMP S2
S11: INC AL
S2: MOV [SI],AL
MOV CL, 8 ;从最左边开始显示
MOV SI, OFFSET B
MOV AL, [SI]
LEA BX, DCTBL
XLAT ;输出段码
ADD AL,80H
MOV DX, PB55
OUT DX, AL
MOV DX, PA55
MOV AL, CL ;输出位码
OUT DX, AL
CALL DELAY
INC SI ;段码地址+1
ROL CL, 1 ;位码向左移1位
MOV AL, [SI]
LEA BX, DCTBL
XLAT
MOV DX, PB55
OUT DX, AL
MOV DX, PA55
MOV AL, CL ;输出位码
OUT DX, AL
CALL DELAY
INC SI ;段码地址+1
ROL CL, 1 ;位码向左移1位
MOV AL, [SI]
LEA BX, DCTBL
XLAT
MOV DX, PB55
OUT DX, AL
MOV DX, PA55
MOV AL, CL ;输出位码
OUT DX, AL
CALL DELAY ;输出三位码
MOV SI, OFFSET B
MOV AL,[SI]
CMP AL,2
JB A2
MOV DX, PC55
MOV AL, 0FFH
OUT DX, AL
JMP G3
A2:MOV DX, PC55
MOV AL, 00H
OUT DX, AL
MOV DX, TCTL ;8254计数器1控制蜂鸣器
MOV AL, 77H
OUT DX, AL
MOV DX, TIMER1;
MOV AL,00
OUT DX,AL
MOV AL,01
OUT DX,AL
G3: POP AX
POP DS
RET
DISPINT0 ENDP
MYISR PROC NEAR ;中断处理程序MYISR
PUSH AX
PUSH DX
CLI ;关中断
MOV DX,MY8259_OCW3
IN AL,DX
AND AL,03H
CMP AL,01H
JE IROISR
JMP OVER
IROISR:
CMP FLAG,0FFH
JE S
MOV DX,IN1
IN AL,DX
MOV IN1OUT,AL ; A2为IN1 AD后的值
JMP OVER
S: MOV DX,ADCS
IN AL, DX
MOV IN0IN, AL ; A1为IN0
MOV AH,0
DIV N ; IN0 AD后线性转换给0832的值
NEG AL
ADD AL,80H
MOV BL,AL
CMP BL,40H
JB SS1
SUB BL,4
SS1: MOV AL,BL
MOV A3,AL
MOV DX,DACS
OUT DX,AL
MOV DX,IN1 ; 启动IN1
OUT DX,AL
MOV AL,0
MOV FLAG,AL
OVER: MOV DX,INTR_OCW2 ; 向PC机内部8259发送中断结束命令
MOV AL, 20H
OUT DX, AL
MOV AL, 20H
OUT 20H, AL
STI
POP DX
POP AX
IRET
MYISR ENDP
DELAY PROC NEAR ;延时
PUSH CX
MOV CX, 0FFFFH
LOOP $
POP CX
RET
DELAY ENDP
CODE ENDS
END START
- 16 -
展开阅读全文