当前位置:文档之家› 微机原理课程设计总结

微机原理课程设计总结

微机原理课程设计数据采集系统(中断法)一、课设目的:进一步掌握微机原理知识,了解微机在实时采集数据的应用,学习掌握编程和程序调试的方法。

二、课设内容和要求:用中断法将ADC0809通道0外接0—5V电压,转换成数字量后,在七段数码管LED上显示。

以小数点后两位表示精度,显示模拟电压的十进制;0809通道0的数字量以线性控制方式DAC0832输出,当通道0的电压为5V时,0832的OUT为0V当通道0的电压为0时,0832的OUT为2.5V;此模拟电压再送到ADC0809通道1,转换后的数字量在CRT上以十六进制显示。

ADC0809的采样脉冲CLK由定时器8254的OUT0提供;ADC0809的EOC信号用作8259中断请求信号。

三、总体设计:1)、ADC0809的IN0采集电位器0—5V电压,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,七段数码管LED,8254定时/计数器,74LS574输出接口,电位器等单元(图1:数据采集系统硬件连接示意图)六、软件设计:本设计通过软件编程,实现模/数转换,0809分别对IN0 0—5V直流电压的采样和经线性控制后输出电压IN1采样,IN0的值转换成十进制后,在七段数码管LED上显示IN1的值。

CPU根据IN0的值,使八位二极管根据课设要求指示相应的范围。

1、设计思想:数据采集系统分成四个功能模块分别是主程序模块、量纲转换模块、数码管显示模块、中断服务子程序模块。

(1)主程序模块:根据课设要求采用中断方式采集数据,因此可把读取IN0的值保存和数字量经线性控制后送给0832输出,作为0809IN1的模拟电压和IN1的启动,读取以及IN0的BCD码转换,放在中断服务子程序模块中完成。

在主程序模块上主要实现启动0809的IN0、显示模块的调用、和中断结束部分程序。

(2)量纲转换模块:量纲转换模块在中断服务子程序内完成,只有将IN0的数字量分别除以51,商存在显示IN0的个位存储单元;余数乘以十,再除以51,商存入十分位存储单元;余数再乘以十,除以51,若余数大于25则商加一,小于25则舍去。

这样就实现了四舍五入的精度,再把商存入百分位存储单元;以供七段数码管显示调用。

(3)数码管显示模块:数码管显示模块相对简单,主要在显示个位是加上小数点的显示,可以通过查表获取个位断码后再加上80H 来实现(4)中断服务子程序:考虑到0832的输出时0809IN1的输入,因此,为防止在执行中断服务子程序时二次进入中断服务子程序中,故在进入中断服务子程序后关中断,而在退出中断服务子程序前开中断以便下次进入中断服务子程序。

中断服务子程序模块主要完成对IN0数据的读取和保存,对IN1的启动和读取,对IN0数据的BCD转换等任务。

2、参考流程:中断子程序和主程序流程图图2:中断服务子程序流程图图3 数据采集系统主程序流程图;微机原理课设CRLF MACRO ;宏定义回车,换行MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHINT 21HENDMY0 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_IV ADD EQU 01C8H ;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端口地址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控制字端口地址DATA SEGMENTMES0 DB ' SIGNAL GATHERINGPRORGRAM',0DH,0AH,0DH,0AHDB'##################################### ######',0DH,0AH,0DH,0AHDB ' PRESS 1 TO START GA THERING !',0DH,0AH,0DH,0AH DB ' PRESS 2 TO EXIT TO DOS !',0DH,0AH,0DH,0AHDB'##################################### ######',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 ?DCTBL DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH, 6FHDB77H,7CH,39H,5EH,79H,71HDA TA ENDSSTAC SEGMENT PARA STACKDW 256 DUP(0)STAC ENDSCODE SEGMENTASSUMECS:CODE,SS:STAC,DS:DA TASTART: MOV AX,DATAMOV DS,AXLEA DX,MES0MOV AH,9INT 21HLOP1: MOV DL,0FFH ;测试键盘输入MOV AH,6INT 21HJZ LOP1CMP AL,'1'JZ MAINCMP AL,'2'JZ EXIT0JMP STARTEXIT0: JMP EXIT;主程序模块MAIN: CLI ;关中断MOV AX, 0000HMOV ES,AX ;替换INTR的中断矢量MOV DI,INTR_IV ADD ;保存INTR原中断处理程序入口偏移地址MOV AX, ES:[DI]MOV IP_BAK,AXMOV AX, OFFSET MYISR ;设置当前中断处理程序入口偏移地址MOV ES:[DI],AXADD DI, 2MOV AX,ES:[DI] ;保存INTR原中断处理程序入口段地址MOV CS_BAK,AXMOV AX, SEGMYISR ;设置当前中断处理程序入口段地址MOV ES:[DI],AXMOV DX,INTR_OCW1 ;设置中断屏蔽寄存器,打开INTR的屏蔽位IN AL, DX ;保存INTR原中断屏蔽字MOV IM_BAK,ALAND AL,0FBHOUT DX,ALMOV DX,MY8259_ICW1MOV AL,13HOUT DX,ALMOV DX,MY8259_ICW2MOV AL,08HOUT DX,ALMOV DX,MY8259_ICW4MOV AL,01HOUT DX,ALMOV DX,MY8259_OCW3MOV AL,0AHOUT DX,ALMOV DX,MY8259_OCW1MOVAL,0FEH ;打开IR0屏蔽位OUT DX,AL;8254初始化MOV DX,TCTLMOV AL,16H ;计数器0方式3读低8位二进制计数,若为方式2亦可,"MOV AL,14H"OUT DX,ALMOV DX,TIMER0MOV AL,4OUT DX,AL;8255初始化MOV AL,80H ;A输出、B输出,方式0MOVDX,PCTL ;8255控制字OUT DX,ALSTI ;开中断;启动0809 IN0LOP2: MOV DX,AD0 ;启动0809IN0OUT DX,ALCALL DELAYMOV AX,0FFHMOV FLAG,AL ;设标志符CALL CHANGE ;调用量纲转换模块LEA DX,MES1MOV AH,9INT 21HMOV DX,AD1 ;读IN1的值IN AL,DXNEG AL ;线性变换SHR AL,1MOV BL,ALAND AL,0F0H ;显示高位MOV CL,4ROR AL,CLCALL CRT1MOV AL,BL ;显示低位AND AL,0FHCALL CRT1CRLFINT 21HMOV AH,1 ;判断是否有按键按下INT 16HJZ LOP2 ;无按键继续循环,有则退出;退出模块EXIT: CLI ;关中断MOV AX,0000HMOV ES,AXMOVDI,INTR_IV ADD ;恢复INTR原中断处理程序入口偏移地址MOV AX,IP_BAKMOV ES:[DI],AXADD DI,2MOV AX,CS_BAK ;恢复INTR原中断处理程序入口段地址MOV ES:[DI],AXMOV DX,INTR_OCW1MOVAL,IM_BAK ;恢复INTR原中断屏蔽寄存器的屏蔽字OUT DX,ALSTI ;开中断MOV AX,4C00H ;退出系统INT 21H;量纲转换模块CHANGE PROCMOV AL,IN0XOR AH,AHMOV DL,51MOV DH,10DIV DLMOV GW,AL ;存个位MOV AL,AHXOR AH,AHMUL DHDIV DLMOV SF,AL ;存十分位MOV AL,AHXOR AH,AHMUL DHDIV DLCMP AH,25JB LOP3ADD AL,1LOP3:MOV BF,AL ;存百分位CALL DISP ;调用数码显示模块RETCHANGE ENDP;数码显示模块DISP PROCMOV AL,GWXOR AH,AHMOV SI,AXLEA BX,DCTBLMOV AL,[BX+SI]ADD AL,80HMOV DX,3024HOUT DX,ALMOV DX,3020HMOV AL,01HOUT DX,ALCALL DELAYMOV AL,SFMOV SI,AXMOV AL,[BX+SI]MOV DX,3024HOUT DX,ALMOV DX,3020HMOV AL,02HOUT DX,ALCALL DELAYMOV AL,BFMOV SI,AXMOV AL,[BX+SI]MOV DX,PB55OUT DX,ALMOV DX,PA55MOV AL,04HOUT DX,ALCALL DELAYRETDISP ENDP;中断服务子程序MYISR PROC NEARPUSH AX ;保护现场PUSH BXPUSH CXPUSH DXCLI ;关中断CMP FLAG,0FFHJZ FLAG0FLAG1: MOV DX,AD1 ;读IN1的值IN AL,DXMOV IN1,ALJMP INTEXITFLAG0:MOV DX,AD0IN AL,DXMOV IN0,ALMOV DX,AD1OUT DX,ALCALL DELAYMOV AX,0MOV FLAG,ALINTEXIT:MOV DX,INTR_OCW2 ;发中断结束命令MOV AL,20HOUT DX,ALMOV AL,20HOUT 20H,ALPOP DX ;恢复现场POP CXPOP BXPOP AXSTI ;开中断IRET ;返回主程序MYISR ENDP CRT1 PROC ;在屏幕上显示一位16进制字符ADD AL,30HCMP AL,39HJBE D0ADD AL,7D0: MOV DL,ALMOV AH,2INT 21HRETCRT1 ENDPDELAY PROC NEAR ;延时PUSH CXMOV CX,0FFFFHLOOP $POP CXRETDELAY ENDPCODE ENDSEND START ;全程序终*************************************课程硬件结束与软件编程源程序结束。

相关主题