首页资源分类编程语言其他 > 微机原理课程设计实验报告

微机原理课程设计实验报告

已有 445005个资源

下载专区

文档信息举报收藏

标    签:微机原理课程设计

分    享:

文档简介

《微机原理》是一门专业基础课程,它的主要内容包括微型计算机体系结构、8086微处理器和指令系统、汇编语言设计以及微型计算机各个组成部分介绍等内容。本文献是其课程设计的报告模板。

文档预览

 数据采集系统三(中断法) 一、实验目的 进一步掌握微机原理知识,了解微机在实时采集过程中的应用,学习、掌握编程和程序调试方法。 二、实验内容 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所示。 图4-3-2 数据采集三主程序流程图 图4-3-4 键盘扫描程序流程图 六、心得体会 通过一学期的学习,我发现汇编语言与我之前所学过的C++完全不同,汇编语言是从计算机内部结构出发,立足于CPU存储结构进行编程,更加基础,深入。 为了顺利完成课程设计,在进行编程之前,我把中断控制器8259、并行控制8255、时钟发生器8254以及A/D转换0809和D/A转换0832的工作原理以及工作方式进行了深入的回顾与理解。 结合以前80X86实验内容,我完成了课程设计的编程。接下来是上机调试,经过汇编链接,有几个小问题,经过检查顺利排除。程序已经可以生成.EXE文件执行了,但是转动电位器,屏幕上现实IN0和IN1的值但是关系不正确。后来经过仔细研究IN0经转换后的数字量应该进行的变换,调整了程序,终于实现了功能。 验收时,老师让我们修改源程序与试验箱上的接线。这对我来说也是一次挑战,我根据自己的理解,修改了源程序与接线,编译链接之后,实现了转动电位器,在不同电压范围内发出不同频率声音的功能。也顺利通过了老师的验收。 通过这次课程设计,自己对编程解决问题不是那么恐惧了,相反还有了很大的兴趣。我发现,当我们把汇编语言当成一种工具,而不是一门考试时,就能更加好的掌握它。 七、源程序 CRLF MACRO ;宏定义回车换行 MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH INT 21H ENDM ;ADC0809 端口设置 ADCIN0 EQU 3000H ;ADC0809端口地址,通道IN0 ADCIN1 EQU 3004H ;ADC0809端口地址,通道IN1 ;8255 端口设置 PA55 EQU 3020H ;8255的A口地址 PB55 EQU 3024H ;8255的B口地址 PC55 EQU 3028H ;8255的C口地址 CTR55 EQU 302CH ;8255的控制寄存器地址 ;DAC0832 端口设置 DAC EQU 3040H ;DAC0832端口地址 ;8254 端口设置 TIMER0 EQU 3060H ;计数器0端口地址 TIMER1 EQU 3064H ;计数器1端口地址 TIMER2 EQU 3068H ;计数器2端口地址 CTR54 EQU 306CH ;控制寄存器端口地址 ;8259 端口地址 INTR_IVADD EQU 01C8H ;INTR 对应的中断矢量地址 INTR_OCW1 EQU 0A1H ;INTR 对应PC机内部8259的OCW1地址 INTR_OCW2 EQU 0A0H ;INTR 对应PC机内部8259的OCW2地址 INTR_IM EQU 0FBH ;INTR 对应的中断屏蔽字 Y7 EQU 30E0H ;片选8259端口地址 MY59_ICW1 EQU Y7+00H ;系统中8259ICW1端口地址 MY59_ICW2 EQU Y7+04H ;系统中8259ICW2端口地址 MY59_ICW3 EQU Y7+04H ;系统中8259ICW3端口地址 MY59_ICW4 EQU Y7+04H ;系统中8259ICW4端口地址 MY59_OCW1 EQU Y7+04H ;系统中8259OCW1端口地址 MY59_OCW2 EQU Y7+00H ;系统中8259OCW2端口地址 MY59_OCW3 EQU Y7+00H ;系统中8259OCW3端口地址 ;------------------------------------------------- STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT FLAG DB ? ;标志位 IN0M DB ? ;保存IN0值 IN1M DB ? ;保存IN1值 TS DB 02H TP DB ? WUI DB 33H TEN DB 0AH RESULT DB 3 DUP (0) ;存十进制结果 MES0 DB '*********************************',0DH,0AH, DB '*-----DATA COLECTION SYSTEM-----*',0DH,0AH, DB '*********************************',0DH,0AH,'$' MES1 DB '*-----COLECTION IS DOING--------*',0DH,0AH,'$' MES2 DB 'IN0 colected value = $' MES3 DB ' IN1 value(hex)= $' 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 CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES0 ;显示提示信息 MOV AH,9 INT 21H MOV DX,OFFSET MES1 ;显示提示信息 MOV AH,9 INT 21H CLI MOV AX,0000H MOV ES,AX MOV DI,INTR_IVADD MOV AX,ES:[DI] MOV IP_BAK,AX ;保 存 原 中 断 入 口 偏 移 地 址 MOV AX,OFFSET MYINT ;设 置 当 前 中 断 入 口 偏 移 地 址 MOV ES:[DI],AX ADD DI,2 MOV AX,ES:[DI] MOV CS_BAK,AX ;保 存 原 中 断 入 口 段 地 址 MOV AX,SEG MYINT ;设 置 当 前 中 断 入 口 段 地 址 MOV ES:[DI],AX MOV DX,INTR_OCW1 IN AL,DX MOV IM_BAK,AL ;保 存 原 中 断 屏 蔽 字 AND AL,INTR_IM ;允许PC机内部8259的IR2中断 OUT DX,AL ;---8259初始化--- MOV DX,MY59_ICW1 ;ICW1 MOV AL,12H ;边 沿 触 发,单片,ICW4 OUT DX,AL MOV DX,MY59_ICW2 MOV AL,08H OUT DX,AL MOV DX,MY59_ICW4 MOV AL,01H OUT DX,AL MOV DX,MY59_OCW3 MOV AL,0AH OUT DX,AL MOV DX,MY59_OCW1 MOV AL,0FCH ;打开IR0 OUT DX,AL ;---8254初始化-- MOV DX,CTR54 MOV AL,00010110B ;计数器0初始化,方式3 OUT DX,AL MOV DX,TIMER0 ;计数器0初值=3 MOV AL,3 OUT DX,AL STI MAIN: MOV DX,ADCIN0 ;启动0809IN0 OUT DX,AL MOV FLAG,0FFH CALL TRANS ;IN0按 要 求 变 换 后,送0832 CALL DIPLAY ;数 码 管 显 示 调 用 MOV DX,OFFSET MES2 ;显 示 提 示 信 息 MOV AH,9 INT 21H MOV AL,IN0M ;显示IN1的值 MOV BL,AL AND AL,0F0H MOV CL,4 ROR AL,CL CALL CRT1 MOV AL,BL AND AL,0FH CALL CRT1 CALL DELAY ;CRLF MOV DX,OFFSET MES3 ;显 示 提 示 信 息 MOV AH,9 INT 21H MOV AL,IN1M ;显示IN1的值 MOV BL,AL AND AL,0F0H MOV CL,4 ROR AL,CL CALL CRT1 MOV AL,BL AND AL,0FH CALL CRT1 MOV DL,0DH INT 21H CALL DELAY ;CRLF MOV DL,0FFH ;判 断 有 键 按 下 否 MOV AH,6 INT 21H JZ MAIN QUIT: CLI MOV AX,0000H MOV ES,AX MOV DI,INTR_IVADD MOV AX,IP_BAK MOV ES:[DI],AX ADD DI,2 MOV AX,CS_BAK MOV ES:[DI],AX MOV DX,INTR_OCW1 MOV AL,IM_BAK OUT DX,AL STI MOV AX,4C00H ;返回DOS INT 21H MYINT PROC NEAR ;中 断 服 务 程 序 PUSH AX PUSH CX PUSH DX CLI MOV AL,FLAG CMP AL,0FFH JE IN0S MOV AL,00H MOV DX,ADCIN1 ;读IN1 IN AL,DX MOV IN1M,AL ;保存IN1 JMP IEND IN0S: MOV DX,ADCIN0 ;保存IN0 IN AL,DX MOV IN0M,AL AND AX,00FFH DIV TS ;AL/2 MOV TP,80H SUB TP,AL MOV AL,TP MOV DX,DAC ;启动0832 OUT DX,AL MOV DX,ADCIN1 ;启动0809 IN1 OUT DX,AL MOV FLAG,0 IEND: MOV DX,INTR_OCW2 ;向PC机内部8259发送中断结束命令 MOV AL,20H OUT DX,AL MOV AL,20H OUT 20H,AL POP DX POP CX POP AX STI IRET MYINT ENDP DIPLAY PROC ;数码管显示程序 PUSH AX MOV BX,00H MOV AL,80H ;PA,PC口输出 MOV DX,CTR55 OUT DX,AL MOV CL,00000001B MOV SI,OFFSET RESULT DIS: MOV BX,[SI] AND BX,000FH MOV AL,DCTBL[BX] ;段选 CMP CL,00000001B JNE POINT ADD AL,80H ;个位小数点 POINT: MOV DX,PB55 OUT DX,AL MOV DX,PA55 ;位选 MOV AL,CL OUT DX,AL INC SI ROL CL,1 CALL DELAY CALL DELAY CMP CL,00001000B JNE DIS POP AX RET DIPLAY ENDP CRT1 PROC ;在屏幕上显示一位16进制字符 ADD AL,30H CMP AL,39H JBE D0 ADD AL,7 D0: MOV DL,AL MOV AH,2 INT 21H RET CRT1 ENDP TRANS PROC ;量纲转化 PUSH AX PUSH DX MOV SI,OFFSET RESULT MOV AL,IN0M AND AX,00FFH DIV WUI MOV [SI],AL ;个位 MOV AL,AH AND AX,00FFH MUL TEN ;余数*10=>AX DIV WUI INC SI MOV [SI],AL ;十分位 MOV AL,AH AND AX,00FFH MUL TEN DIV WUI INC SI CMP DX,25 JB P ADD AL,1 ;四舍五入 p: MOV [SI],AL ;百分位 POP DX POP AX RET TRANS ENDP DELAY PROC NEAR ;延时 PUSH CX MOV CX,0FFFFH LOOP $ POP CX RET DELAY ENDP CODE ENDS END START

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高员外,我们会尽快处理。