《微机原理课程设计总结(共13页).doc》由会员分享,可在线阅读,更多相关《微机原理课程设计总结(共13页).doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 微机原理课程设计 数据采集系统(中断法)一、 课设目的:进一步掌握微机原理知识,了解微机在实时采集数据的应用,学习掌握编程和程序调试的方法。二、 课设内容和要求:用中断法将ADC0809通道0外接05V电压,转换成数字量后,在七段数码管LED上显示。以小数点后两位表示精度,显示模拟电压的十进制;0809通道0的数字量以线性控制方式DAC0832输出,当通道0的电压为5V时,0832的OUT为0V当通道0的电压为0时,0832的OUT为2.5V;此模拟电压再送到ADC0809通道1,转换后的数字量在CRT上以十六进制显示。ADC0809的采样脉冲CLK由定时器8254
2、的OUT0提供;ADC0809的EOC信号用作8259中断请求信号。三、 总体设计:1)、ADC0809的IN0采集电位器05V电压,IN1采集0832输出的模拟量。2)、DAC0832将ADC0809的IN0数字量重新转换成模拟量输出3)、8259用于检测ADC0809转换是否结束和向CPU发送INTR信号4)8255为七段LED数码管显示提供驱动信息5)、七段LED数码管显示ADC0809的IN0的值6)8254提供ADC0809的采样时钟脉冲。四、硬件设计:因采用PC机和微机实验箱,硬件电路设计相对比较简单,主要利用微机实验箱上的8255并行口,ADC0809,DAC0832,七段数码管
3、LED,8254定时/计数器,74LS574输出接口,电位器等单元(图1:数据采集系统硬件连接示意图)六、软件设计:本设计通过软件编程,实现模/数转换,0809分别对IN0 05V直流电压的采样和经线性控制后输出电压IN1采样,IN0的值转换成十进制后,在七段数码管LED上显示IN1的值。CPU根据IN0的值,使八位二极管根据课设要求指示相应的范围。1、设计思想:数据采集系统分成四个功能模块分别是主程序模块、量纲转换模块、数码管显示模块、中断服务子程序模块。(1)主程序模块:根据课设要求采用中断方式采集数据,因此可把读取IN0的值保存和数字量经线性控制后送给0832输出,作为0809IN1的模
4、拟电压和IN1的启动,读取以及IN0的BCD码转换,放在中断服务子程序模块中完成。在主程序模块上主要实现启动0809的IN0、显示模块的调用、和中断结束部分程序。(2)量纲转换模块:量纲转换模块在中断服务子程序内完成,只有将IN0的数字量分别除以51,商存在显示IN0的个位存储单元;余数乘以十,再除以51,商存入十分位存储单元;余数再乘以十,除以51,若余数大于25则商加一,小于25则舍去。这样就实现了四舍五入的精度,再把商存入百分位存储单元;以供七段数码管显示调用。(3)数码管显示模块:数码管显示模块相对简单,主要在显示个位是加上小数点的显示,可以通过查表获取个位断码后再加上80H来实现(4
5、)中断服务子程序:考虑到0832的输出时0809IN1的输入,因此,为防止在执行中断服务子程序时二次进入中断服务子程序中,故在进入中断服务子程序后关中断,而在退出中断服务子程序前开中断以便下次进入中断服务子程序。中断服务子程序模块主要完成对IN0数据的读取和保存,对IN1的启动和读取,对IN0数据的BCD转换等任务。2、参考流程:中断子程序和主程序流程图保护现场;CLIFLAG=0FFH?读IN1的值,保存读IN0的值,保存IN0的值按要求变换后,送0832输出启动IN1FLAG=0发送中断结束命令恢复现场;STI返回主程序图2:中断服务子程序流程图图3 数据采集系统主程序流程图专心-专注-专
6、业;微机原理课设CRLF MACRO ;宏定义回车,换行 MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH INT 21H ENDM Y0 EQU 3000HY1 EQU 3020HY2 EQU 3040HY3 EQU 3060HY7 EQU 30E0HPA55 EQU Y1+00H*4 ;8255A口地址PB55 EQU Y1+01H*4 ;8255B口地址PCTL EQU Y1+03H*4 ;8255控制寄存器地址AD0 EQU Y0 ;ADC0809端口IN0地址AD1 EQU Y0+10H ;ADC0809端口IN1地址INTR_IVADD EQU 01
7、C8H ;INTR对应的中断矢量地址INTR_OCW1 EQU 0A1H ;INTR对应PC机内部8259的OCW1地址INTR_OCW2 EQU 0A0H ;INTR对应PC机内部8259的OCW2地址INTR_IM EQU 0FEH ;INTR对应的中断屏蔽字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端口地址
8、MY8259_OCW1 EQU Y7+04H ;实验系统中8259的OCW1端口地址MY8259_OCW2 EQU Y7+00H ;实验系统中8259的OCW2端口地址MY8259_OCW3 EQU Y7+00H ;实验系统中8259的OCW3端口地址TIMER0 EQU 3060H ;Y3+00H*4 8254计数器0端口地址TCTL EQU 306CH ;Y3+03H*4 8254控制字端口地址DATASEGMENTMES0DB SIGNAL GATHERING PRORGRAM,0DH,0AH,0DH,0AH DB #,0DH,0AH,0DH,0AH DB PRESS 1 TO STAR
9、T GATHERING !,0DH,0AH,0DH,0AH DB PRESS 2 TO EXIT TO DOS !,0DH,0AH,0DH,0AH DB #,0DH,0AH,0DH,0AH,$ MES1 DB The value of IN1 is: $CS_BAK DW ?IP_BAK DW ?IM_BAK DB ?FLAG DB ?GW DB ? ;保存个位SF DB ? ;保存十分位BF DB ? ;保存百分位IN0 DB ?IN1 DB ?DCTBLDB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DB 77H,7CH,39H,5EH,79H,71H
10、DATA ENDS STAC SEGMENT PARA STACK DW 256 DUP(0)STAC ENDSCODE SEGMENT ASSUME CS:CODE,SS:STAC,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA DX,MES0 MOV AH,9 INT 21HLOP1: MOV DL,0FFH ;测试键盘输入MOVAH,6 INT 21H JZ LOP1 CMP AL,1 JZ MAIN CMP AL,2 JZ EXIT0 JMP STARTEXIT0: JMP EXIT;主程序模块MAIN: CLI ;关中断 MOV AX,0000H MO
11、V 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原中断屏
12、蔽字 MOV IM_BAK,AL AND AL,0FBH OUT DX,AL MOV DX,MY8259_ICW1 MOV AL,13H OUT DX,AL MOV DX,MY8259_ICW2 MOV AL,08H OUT DX,AL MOV DX,MY8259_ICW4 MOV AL,01H OUT DX,AL MOV DX,MY8259_OCW3 MOV AL,0AH OUT DX,AL MOV DX,MY8259_OCW1 MOV AL,0FEH ;打开IR0屏蔽位 OUT DX,AL ;8254初始化 MOV DX,TCTL MOV AL,16H ;计数器0方式3读低8位二进制计数
13、,若为方式2亦可,MOV AL,14H OUT DX,AL MOV DX,TIMER0 MOV AL,4 OUT DX,AL;8255初始化 MOV AL,80H ;A输出、B输出,方式0 MOV DX,PCTL ;8255控制字 OUT DX,AL STI ;开中断 ;启动0809 IN0 LOP2: MOV DX,AD0 ;启动0809IN0 OUT DX,AL CALL DELAY MOV AX,0FFH MOV FLAG,AL ;设标志符 CALL CHANGE ;调用量纲转换模块 LEA DX,MES1 MOV AH,9 INT 21H MOV DX,AD1 ;读IN1的值 IN A
14、L,DX NEG AL ;线性变换 SHR AL,1 MOV BL,AL AND AL,0F0H ;显示高位 MOV CL,4 ROR AL,CL CALL CRT1 MOV AL,BL ;显示低位 AND AL,0FH CALL CRT1 CRLF INT 21H MOV AH,1 ;判断是否有按键按下 INT 16H JZ LOP2 ;无按键继续循环,有则退出 ;退出模块 EXIT: CLI ;关中断 MOV AX,0000H MOV ES,AX MOV DI,INTR_IVADD ;恢复INTR原中断处理程序入口偏移地址 MOV AX,IP_BAK MOV ES:DI,AX ADD DI
15、,2 MOV AX,CS_BAK ;恢复INTR原中断处理程序入口段地址 MOV ES:DI,AX MOV DX,INTR_OCW1 MOV AL,IM_BAK ;恢复INTR原中断屏蔽寄存器的屏蔽字 OUT DX,AL STI ;开中断 MOV AX,4C00H ;退出系统 INT 21H;量纲转换模块CHANGEPROC MOV AL,IN0 XOR AH,AH MOV DL,51 MOV DH,10 DIV DL MOV GW,AL ;存个位 MOV AL,AH XOR AH,AH MUL DH DIV DL MOV SF,AL ;存十分位 MOV AL,AH XOR AH,AH MUL
16、 DH DIV DL CMP AH,25 JB LOP3 ADD AL,1LOP3: MOV BF,AL ;存百分位 CALL DISP ;调用数码显示模块 RET CHANGEENDP;数码显示模块DISP PROC MOV AL,GW XOR AH,AH MOV SI,AX LEA BX,DCTBL MOV AL,BX+SI ADD AL,80H MOV DX,3024H OUT DX,AL MOV DX,3020H MOV AL,01H OUT DX,AL CALL DELAY MOV AL,SF MOV SI,AX MOV AL,BX+SI MOV DX,3024H OUT DX,AL
17、 MOV DX,3020H MOV AL,02H OUT DX,AL CALL DELAY MOV AL,BF MOV SI,AX MOV AL,BX+SI MOV DX,PB55 OUT DX,AL MOV DX,PA55 MOV AL,04H OUT DX,AL CALL DELAY RETDISP ENDP ;中断服务子程序MYISR PROC NEAR PUSH AX ;保护现场 PUSH BX PUSH CX PUSH DX CLI ;关中断 CMP FLAG,0FFH JZ FLAG0 FLAG1: MOV DX,AD1 ;读IN1的值 IN AL,DX MOV IN1,AL JM
18、P INTEXITFLAG0: MOV DX,AD0 IN AL,DX MOV IN0,AL MOV DX,AD1 OUT DX,AL CALL DELAY MOV AX,0 MOV FLAG,ALINTEXIT:MOV DX,INTR_OCW2 ;发中断结束命令 MOV AL,20H OUT DX,AL MOV AL,20H OUT 20H,AL POP DX ;恢复现场 POP CX POP BX POP AX STI ;开中断 IRET ;返回主程序MYISR ENDP CRT1 PROC ;在屏幕上显示一位16进制字符 ADD AL,30H CMP AL,39H JBE D0 ADD
19、AL,7D0: MOV DL,AL MOV AH,2 INT 21H RETCRT1 ENDPDELAY PROC NEAR ;延时 PUSH CX MOV CX,0FFFFH LOOP $ POP CX RETDELAY ENDPCODE ENDS END START ;全程序终*课程硬件结束与软件编程源程序结束。课设答辩:提出的要求:1.断开0832数据端,CS端,out端,IN1为什么有输出?给出的答案:修改程序:主程序:LEA DX,MES1 MOV AH,9 INT 21H MOV AL,IN1 ;读IN1的值 MOV BL,AL AND AL,0F0H ;显示高位 MOV CL,4
20、 ROR AL,CL CALL CRT1 MOV AL,BL ;显示低位 AND AL,0FH CALL CRT1 CRLF LEA DX,MES2 MOV AH,9 INT 21H MOV AL,IN0 ;读IN0的值 MOV BL,AL AND AL,0F0H ;显示高位 MOV CL,4 ROR AL,CL CALL CRT1 MOV AL,BL ;显示低位 AND AL,0FH CALL CRT1 CRLF中断程序:MOV DX,AD0 IN AL,DX MOV IN0,AL NEG AL ADD AL,5 SHR AL,1 MOV DX,3040H OUT DX,AL MOV DX,
21、AD1 OUT DX,AL心得体会:通过对这程序的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在设计完成过程中通过和同学的交流,也增加了合作的技巧。通过查阅以下资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。 幸好平时做了很多实验,写了很多小程序。但这次是一个综合的程序,平时的很多程序都用到了。很多子程序的设计是固定的,因此可以直接从指导资料中调用,大多只需要修改几个参数就可以,这大大方便了我们的设计,为我们节省了很多的时间。在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,这是去找同学讨论一下,收获很大,可以使很多问题迎刃而解,直到问题最终解决。不可否认,本程序存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的工作也有指导作用。我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机原理课程上讲到的各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力。感谢老师的悉心指导。
限制150内