logo资料库

X86 数据采集系统三(中断法) 报告及代码.doc

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
课程设计三 数据采集系统三(中断法)
微机原理实验课程设计 数据采集系统三(中断法) 班级: 姓名: 学号: 年月日 实验室
课程设计三 数据采集系统三(中断法) 一、课设目的:进一步掌握微机原理知识,了解微机在实时采集过程中的应用,学 习、掌握编程和程序调试方法。 二、仪器设备:微机,微机接口实验箱,示波器,三用表等。 三、课设内容和要求: 用中断法,将 ADC 0809 通道 0 外接 0 ~ 5V 电压,转换成数字量后,在七段 LED 数 码 管 上 , 以 小 数 点 后 两 位 ( 几 十 毫 伏 ) 的 精 度 , 显 示 其 模 拟 电 压 的 十 进 值 ; 0809 通道 0 的数字量以线性控制方式送 DAC0832 输出,当通道 0 的电压为 5V 时,0832 的 OUT 为 0V, 当通道 0 的电压为 0 时,0832 的 OUT 为 2.5V;此模拟电压再送到 ADC 0809 通道 1, 转换后的数字量在 CRT 上以十六进制显示。 ADC 0809 的 CLK 脉冲,由定时器 8254 的 OUT0 提供;ADC 0809 的 EOC 信号,用作 8259 中断请求信号。 要有较好的人机对话界面;控制程序的运行, 四、总体设计 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 所示。
1 2 3 4 XD0-XD7 D0-D7 /Y2 XIOW XD0-XD7 XIOW XIOR XA2 XA3 /Y3 XD0-XD7 XIOW XIOR /Y0 XD0-XD7 XIOW XIOR INTR /Y7 XD0-XD7 XIOW XIOR XA2 XA3 /Y1 XA5 XA6 XA7 0832 0832 8254 0809 8259 8255 74138 CS WR D0-D7 WR RD A0 A1 CS D0-D7 WR RD CS D0-D7 WR RD INTR CS D0-D7 WR RD A0 A1 CS A B C /G D C B A Rfe Iout1 2 Iout2 3 4 A 1 LM324 GATE0 1 1 +5V 6 5 1.8432MHZ 4 B 7 LM324 1 1 OUT CLK0 OUT0 CLK A B C IN0 IN1 EOC IR0 A0 XA2 XA3 XA4 10K +5V A2 PA0-PA5 L1-L6 数码管 键盘单元 PB0-PB7 A,B-G,Dp /Y0 /Y1 /Y2 /Y3 /Y4 /Y5 /Y6 /Y7 图 4-3-1 数据采集系统三电原理框图 Title 1 2 Size B Date: File: Number Revision 8-Jan-2011 Sheet of D:\protel 99se\Library\Sch\sy.ddbDrawn By: 3 4 D C B A
六、软件设计 本设计通过软件编程,实现模/数转换器 0809 分别对 IN0 0-5V 直流电压的采样,和经 0832 线性控制后输出电压的 IN1 采样,IN0 的值转换成十进制后,在七段数码管上显示; IN1 的值在显示器上显示。CPU 根据 IN0 的值,使八位发光二极管根据题目的要求,指示相应的 范围。 1、设计思想 数据采集系统分成六个功能模块,分别是主程序模块、量纲转换模块、数码管显示模块、 中断服务子程序模块。 (1)主程序模块 根据题目要求,采用中断方式实现数据采集,因此可把读取 IN0 的值并保存,和此数字 量经线性控制后送给 0832 输出, 作为 0809 IN1 的模拟电压和 IN1 的启动、读取以及 IN0 的 BCD 码转换, 放在中断服务子程序模块中完成。所以,在主程序模块上主要实现启动 0809 IN0、显示模块的调用、和中断结束部分程序。 (2) 量纲转换模块 量纲转换模块在中断服务程序内完成,只要将 IN0 的数字量分别除以 51, 商存入显示 IN0 的个位存储单元; 余数乘以十,再除以 51, 商存入十分位存储单元; 余数再乘以十,除 以 51, 若余数大于 25,则商加 1, 小于 25 则舍去, 这样就达到四舍五入的精度, 再把商存 入百分位存储单元; 以供七段数码管显示时调用,BCD 码转换模块可参考图 10 所示的流程 图。 (3) 数码管显示模块 数码管显示模块比较简单,自编程序可参考图 1-6 所示的流程图,也可参考实验 8255 并行口中的显示模块,应注意的是在显示个位时, 要加上小数点的显示,这可以在查表获取 个位段码后,再加上 80H 来实现,注意每一位显示后要适当延迟时间。 (4) 中断服务子程序模块 考虑到 0832 的输出是 0809 IN1 的输入,因此,为防止在执行中断服务子程序时,二次 进入中断服务子程序, 故在进入中断服务子程序后,应关闭中断,而在退出中断前开中断,以 便下次中断进入。中断服务子程序模块主要完成对 IN0 数据的读取和保存,对 IN1 的启动 和读取,对 IN0 数据的 BCD 转换等任务。 2. 参考流程图: 数据采集三主程序流程图如图 4-3-2 所示; 中断服务子程序如图 4-3-3 所示。数码管显示 子程序流程图如图 3-4-7 所示,
初 始 化 显示提示信息 关中断 保存原中断向量表内容 设置新的中断向量表 保存原中断屏蔽寄存器值 允许 IRQ2 中断 8254 初始化 开中断 启动 0809 IN0 FLAG=0FFH IN0 值量纲转换后送显存 调用数码管显示子程序 将 IN1 的值进行 ASCII 码转换 显示器显示 IN1 的值 有键按下吗? Y 恢复原中断屏蔽寄存器值 恢复原中断向量表内容 结 束 N 图 4-3-2 数据采集三主程序流程图 保护现场 ; 关中断 FLAG=0FFH ? Y 读 IN0 值, 保存 N 读 IN1 值, 保存
七、运行结果 数码管显示:0.01~5.01; 对应 CRT 显示:IN0=00~FF; IN1=83~00; 结果符合设计要求。 八、心得体会 在本次微机原理课程设计中,实践了多种外围芯片协同工作的综合系统,使自己对 80X86 系统硬件原理的认识,特别是接口地址及控制字的认识有了进一步提高。软件部分利 用中断法编程的方法,在掌握的基础上加深了对中断法的理解。 一直来,都感觉微机是实验课程非常有趣,它把课程上“纸上谈兵”式的理论讲解与分 析,变为真切的机器执行过程,可以看到各个寄存器的值随着一条条语句的执行而变化,内 存单元里的数据也在程序的指挥下被 CPU 调用和改变。最欢乐的是看见自己编的代码运行 后,实现了自己设定的功能,跑马灯,霓虹灯,虽然简单,却也是在好多次的失败与修改之 后才成功的。 本次课设开始时计划我主要是负责硬件连接。这种按照书本线路图连线的事是难不住我 的,虽然有很多线需要连接,但是经过我的合理安排,不到四十分钟线路连接就完成了,乍
一看乱乱的,但其中有我自己安排的条里,逐一检查了一遍也很快。之后,按老师写在黑板 上的方法进行硬件的自检,结果正确,硬件连接顺利完成。之后,便参与到软件编程的工作 中。这次的软件语言是要求完全由我们自己编写的,书本给出了程序的流程图,我与同伴尹 佳事先也写了程序,但第一次编译后得到的是 27 个错误的结果。逐一修改,发现有好些是 单纯语法上的错误,于是果断决定把微机原理课本上第三、四章的指令系统重新复习了一次。 修改完之后,编译是没有错误了,但执行之后,LED 数码管毫无反应,CRT 也不显示任何值, 分析原因是程序没有进入中断。纠结了半天,最后在多方讨教后发现是中断入口地址写错了, 修改了之后,顺利进入了中断程序。之后的调试便都是一些小问题的修改了。 通过这次微机原理课程设计,复习了整个微机课程及平时实验所学的大部分内容,加深 了对微机 80X86 系统软硬件的认识,使自己的动手编程能力得到了很大的提高。 感谢老师的指导! 九、代码 ;ADC0809 端口设置 ADCIN0 ADCIN1 EQU EQU ;8255 端口设置 EQU EQU EQU EQU PA55 PB55 PC55 CTR55 3000H ;ADC0809 端口地址,通道 IN0 3004H ;ADC0809 端口地址,通道 IN1 3020H ;8255 的 A 口地址 3024H ;8255 的 B 口地址 3028H ;8255 的 C 口地址 302CH ;8255 的控制寄存器地址 ;DAC0832 端口设置 EQU DAC 3040H ;DAC0832 端口地址 TIMER0 TIMER1 TIMER2 CTR54 ;8254 端口设置 EQU EQU EQU EQU ;8259 端口地址 3060H ;计数器 0 端口地址 3064H ;计数器 1 端口地址 3068H ;计数器 2 端口地址 306CH ;控制寄存器端口地址 ;INTR 对应 PC 机内部 8259 的 OCW1 地址 ;INTR 对应 PC 机内部 8259 的 OCW2 地址 ;INTR 对应的中断屏蔽字 INTR_IVADD EQU 01C8H ;INTR 对应的中断矢量地址 EQU 0A1H INTR_OCW1 EQU 0A0H INTR_OCW2 EQU 0FBH INTR_IM EQU 30E0H ;片选 8259 端口地址 Y7 EQU Y7+00H ;系统中 8259ICW1 端口地址 MY59_ICW1 EQU Y7+04H ;系统中 8259ICW2 端口地址 MY59_ICW2 EQU Y7+04H ;系统中 8259ICW3 端口地址 MY59_ICW3 EQU Y7+04H ;系统中 8259ICW4 端口地址 MY59_ICW4 EQU Y7+04H ;系统中 8259OCW1 端口地址 MY59_OCW1 MY59_OCW2 EQU Y7+00H ;系统中 8259OCW2 端口地址 MY59_OCW3 EQU Y7+00H ;系统中 8259OCW3 端口地址
;------------------------------------------------- STACK1 SEGMENT DW 256 DUP(?) STACK ;标志位 ;保存 IN0 值 ;保存 IN1 值 STACK1 ENDS DATA SEGMENT FLAG DB ? IN0M DB ? IN1M DB ? TS TP WUI TEN RESULT DB 3 DUP (0) DB 'PRESS MES0 DB 'IN0= MES2 $' MES3 DB ' DB 02H DB ? DB 33H DB 0AH ;存十进制结果 ANY KEY TO EXIT!','$' IN1= $' DCTBL DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07H,7Fh,6Fh;数码管的段码表 CS_BAK DW ? IP_BAK DW ? IM_BAK DB ? DATA ENDS CODE ;保存原中断处理程序入口段地址 ;保存原中断处理程序入口偏移地址 ;保存原中断屏蔽字的变量 SEGMENT ASSUME START: MOV MOV CLI MOV MOV MOV MOV MOV MOV MOV ADD MOV MOV MOV MOV MOV IN MOV AND CS:CODE,DS:DATA,SS:STACK1 AX,DATA DS,AX AX,0000H ES,AX DI,INTR_IVADD AX,ES:[DI] IP_BAK,AX ;保存原中断入口偏移地址+ AX,OFFSET MYINT ;设置当前中断入口偏移地址 ES:[DI],AX DI,2 AX,ES:[DI] CS_BAK,AX ;保存原中断入口段地址 AX,SEG MYINT ;设置当前中断入口段地址 ES:[DI],AX DX,INTR_OCW1 AL,DX IM_BAK,AL ;保存原中断屏蔽字 AL,INTR_IM ;允许 PC 机内部 8259 的 IR2 中断
分享到:
收藏