微机原理课程设计课设题目:数据采集系统三(中断法)实验者姓名:实验者学号:学院:数据采集系统三(中断法)一、实验目的进一步掌握微机原理知识,了解微机在实时采集过程中的应用,学习、掌握编程和程序调试方法。
二、实验内容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 并行口、ADC0809、DAC0832、七段LED数码管单元、8254定时/ 计数器、74LS574输出接口、电位器等单元电路, 就构成了数据采集系统, 硬件电原理框图4-3-1 所示。
1 2 3 4课程设计报告纸XD0-XD7 D0-D7 RfeD/Y2XIOWXD0-XD7XIOWCSWRD0-D7WR08320832Iout12Iout23GATE011441 6ABLM324 511+5V7LM324XIORXA2RDA0 8254 CLK01.8432MHZOUTXA3/Y3A1CSOUT0XD0-XD7 D0-D7 CLKXIOWXIORWRRD 0809ABCIN0X A2XA3XA410K+5VC/Y0 CS I N1 EOCXD0-XD7 D0-D7XIOW WR IR0XIOR RDINTR INTR8259A0 A2 /Y7 CSXD0-XD7 D0-D7XIOWXIORXA2 A0 8255 PA0-PA5 L1-L6数码管键盘单元B XA3 A1PB0-PB7 A,B-G,Dp /Y1 CSXA5 A /Y0XA6 B /Y1XA7 C74138 /Y2 /Y3 /Y4/G /Y5 /Y6 /Y7ATitleSize Number Revision五、软件设计本设计通过软件编程,实现模/ 数转换器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 所示。
初始化显示提示信息关中断保存原中断向量表内容设置新的中断向量表保存原中断屏蔽寄存器值允许IRQ2 中断8254 初始化开中断启动0809 IN0FLAG=0FFHIN0 值量纲转换后送显存调用数码管显示子程序将IN1 的值进行ASCII 码转换显示器显示IN1 的值N有键按下吗?Y恢复原中断屏蔽寄存器值恢复原中断向量表内容结束图4-3-2 数据采集三主程序流程图保护现场; 关中断YNFLAG=01H ?读IN0 值, 保存读IN1 值, 保存IN0 值按要求变换后,送0832 输出启动IN1FLAG=0发中断结束命令恢复现场; 开中断返回主程序图4-3-3 中断服务子程序流程图列值为0,读行值,屏蔽高四位后保存行值为0,读列值,屏蔽低四位后保存AL= 合并行列后取反AL=0 ?YSI=键盘扫描码首址,CX=16 ,DL=0NAL=[SI] ?N Y DL+1,SI+1键值=DLCX-1键值缓冲区移位N NCX=0 ?返回图4-3-4 键盘扫描程序流程图六、试验所遇问题及解决方法问题:在转动电位器,始终没有反应,电路也检查多遍。
分析:电路连接可能存在不稳定性,也有可能是机器有些损坏啥的。
解决方法:换了个微机实验机器,然后把线路很稳定的连接,转动电位器终于出现正确的反应。
七、心得体会及建议体会:通过这次微机原理的课程设计,实验制作,让我了解了设计电路的程序,也让我了解了关于数据采集系统三(中断法)的原理和设计理念,加强了自身动手、思考和解决问题的能力。
在此次的数据采集设计过程中,我更进一步的熟悉了机箱的结构及掌握了各芯片的工作原理和其具体的使用方法,巩固和加强了课本知识。
认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。
通过课程设计,我真正领悟到了“苦中作乐”这词的真正含义,设计连接电路确实有些辛苦,但是还是很有乐趣的,当一个一个的问题被自己发现,然后自己一步一步的按照实验原理去解决问题,知道最后完全解决问题之后,一种难以言明的喜悦心情和成就感瞬间充斥整个大脑和身体,我想这也算是课程设计的乐趣所在了。
通过这次课程设计我还知道了,理论与实际相结合是和重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来才能更好的提高我们的能力,更好更全面地发展我们的各项能力,可以说,这次课程设计,我受益匪浅。
建议:1.希望老师们能在上课期间增加必要的试验箱器件知识,同时在课外增加一些汇编语言在生活中应用的相关知识介绍,帮助学生提高工程意识,在后期学习当中有一种将知识运用于实践的思想。
2.希望老师可以提前布置和安排微机原理课设的任务,老师们也知道,一方面;我们也可以多多准备一下,另一方面,随着期末考试的紧逼,后续课程的复习也是大家要付出很多时间的。
以上两点建议希望老师们能接纳,先谢谢老师了。
八、源程序;************* 回车宏定义*********CRLF MACROMOV DL, 0DHMOV AH,02HINT 21H ; 宏定义了回车ENDM;********* 端口地址定义***********Y0 EQU 3000H ; 片选Y0 对应的端口始地址,0809,0832Y2 EQU 3040H ; 片选Y2 对应的端口始地址IN1 EQU Y0+01H*4ADCS EQU Y0 ;AD0809 的端口地址DACS EQU Y2 ;DAC0832 的端口地址Y3 EQU 3060HTIMER0 EQU Y3+00H*4 ;8254计数器0端口地址,8254TIMER1 EQU Y3+01H*4 ;8254计数器1端口地址TIMER2 EQU Y3+02H*4 ;8254计数器2端口地址TCTL EQU Y3+03H*4 ;8254 控制寄存器端口地址Y1 EQU 3020H ; 片选Y1 对应的端口始地址,8255PA55 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对应的中断矢量地址,8259INTR_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_OCW1EQU Y7+04H;实验系统中8259的OCW1端口地址MY8259_OCW2EQU Y7+00H;实验系统中8259的OCW2端口地址MY8259_OCW3EQU Y7+00H;实验系统中8259的OCW3端口地址;********************************* 堆栈段定义****************************************STACK1 SEGMENT S A T C KDW 256 DUP(?)STACK1 ENDS;********* 堆栈段定义*****************************************************************D A TA SEGMENTDCTBL DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh数,6F码h管的; 段码表DB 77h,7Ch,39h,5Eh,79h,71h,00HN DB 2IN0IN DB ?IN1OUT DB ?A3 DB ?B DB 3 DUP(?)D1 DB 0AHE1 DB 33HFLAG DB ?MES4 DB 0DH,0AH+,'+++++ WELCOMETO WEI J Y I UAN LI KE SHE: +++++,0+D'H,0AH,$''MES0 DB 0DH,0AH*,'******* DA T A COLECTION SYSTEM ********,'0DH,0AH$,''MES1 DB 0DH,0AH-,'----------- ZUO ZHE :LIU J I A N N G D WANG ZHI MI N G,0'DH,0AH,$''MESS DB 0DH, P'RESS ANYKEY T O ENDTHE SYSTEM,!0'DH,0AH,0DH, 0AH$','MES2 DB 0DH, 'IN1OUT D A TA : $',0DH,$''CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量IM_BAK DB ? ;保存INTR原中断屏蔽字的变量D A TA ENDS;********* 代码段定义***********CODE SEGMENTASSUME CS:CODE,SS:ASCTK1,DS:DATASTART: MOV AX, D A TAMOV DS, AXMOV AL, 10000000B ;8255初始MOV DX, PCTLOUT DX, ALMOV DX, OFFSETMES4MOV AH, 9 ; 显示MES4INT 21HMOV DX, OFFSETMES0MOV AH, 9 ; 显示MES0INT 21HMOV DX, OFFSETMES1MOV AH, 9 ; 显示MES1INT 21HMOV DX, OFFSETMESSMOV AH, 9 ; 显示MESSINT 21HCLI ; 8259 初始MOV AX, 0000HMOV ES, AX ; 替换INTR的中断矢量MOV DI, INTR_IVADD ; 保存INTR原中断处理程序入口偏移地址MOV AX, ES:[DI]MOV IP_BAK,AXMOV AX, OFFSETMYISR ;设置当前中断处理程序入口偏移地址MOV ES:[DI],AXADD DI, 2MOV AX, ES:[DI] ; 保存INTR原中断处理程序入口段地址MOV CS_BAK,AXMOV AX, SEG MYISR ;设置当前中断处理程序入口段地址MOV ES:[DI],AXMOV DX, INTR_OCW1 ;设置中断屏蔽寄存器,打开INTR的屏蔽位IN AL, DX ; 保存INTR原中断屏蔽字MOV IM_BAK,ALAND AL, INTR_IM ; 允许PC机内部8259的IR2中断OUT DX, ALMOV DX, MY8259_ICW1; 初始化实验系统中8259的ICW1 MOV AL, 13H ; 边沿触发、单片8259、需要ICW4 OUT DX, ALMOV DX, MY8259_ICW2MOV AL, 08H ; 初始化实验系统中8259的ICW2 OUT DX, ALMOV DX, MY8259_ICW4 ; 初始化实验系统中8259的ICW4 MOV AL, 01H ; 非自动结束EOIOUT DX, ALMOV DX,MY8259_OCW3MOV AL, 0AHOUT DX, A LMOV DX, MY8259_OCW1 ; 初始化实验系统中8259的OCW1MOV AL, 0FCH ; 打开IR0的屏蔽位OUT DX, ALMOV DX, TCTL ;8254 初始MOV AL, 17HOUT DX, A LMOV DX, TIMER0;MOV AL,2OUT DX,ALSTIS33:MOV AL, 0MOV DX, ADCS ;启动0809 IN0OUT DX, ALMOV FLAG ,0FFHCALL DISPINT0MOV DX, OFFSET M ES2MOV AH, 9 ; 显示MES2INT 21HMOV AL,IN1OUTCALL DISPINT1MOV DL,0FFHMOV AH,6INT 21HJZ S33QUIT: CLIMOV AX, 0000H ;恢复INTR原中断矢量MOV ES, AXMOV DI, INTR_IVADD ; 恢复INTR原中断处理程序入口偏移地址MOV AX, IP_BAKMOV ES:[DI],AXADD DI, 2MOV AX, CS_BAK ;恢复INTR原中断处理程序入口段地址MOV ES:[DI],AXMOV DX, INTR_OCW1MOV AL, IM_BAK ; 恢复INTR原中断屏蔽寄存器的屏蔽字OUT DX, ALSTIEXIT: MOV AH, 4CH ;返回到DOSINT 21H;*********************** 数码管显示INT1****************************DISPINT1 PROCPUSH AXMOV BL,AL ; 屏幕显示AND AL, 0F0HMOV CL, 4 ; 显示高位ROR AL, CLCALL CRT1MOV AL, BLAND AL, 0FH ; 显示低位CALL CRT1CRLFPOP AXRETDISPINT1 ENDPCRT1 PROCADD AL, 30HCMP AL, 39HJBE D0ADD AL, 7 ; 在屏幕上显示一位16进制字符D0: MOV DL, ALMOV AH, 2INT 21HRETCRT1 ENDP;*********************** 数码管显示INT0****************************DISPINT0 PROCPUSH DSPUSH AXMOV AL,IN0IN ; 转换IN0个位十分位百分位MOV AH,0DIV E1MOV SI,OFFSET BMOV [SI],ALMOV AL,AHMOV AH,0MUL D1DIV E1INC SIMOV [SI],ALMOV AL,AHMOV AH,0MUL D1DIV E1INC SICMP AH,19HJNBE S1 1MOV AL,0JMP S2S11: INC ALS2: MOV [SI],ALMOV CL, 8 ; 从最左边开始显示MOV SI, OFFSETBMOV AL, [SI]LEA BX, DCTBLXLA T ; 输出段码ADD AL,80HMOV DX, PB55OUT DX, ALMOV DX, PA55MOV AL, CL ; 输出位码OUT DX, ALCALL DELAYINC SI ; 段码地址+1ROL CL, 1 ; 位码向左移1 位MOV AL, [SI]LEA BX, DCTBLXLA TMOV DX, PB55OUT DX, ALMOV DX, PA55MOV AL, CL ; 输出位码OUT DX, ALCALL DELAYINC SI ; 段码地址+1ROL CL, 1 ; 位码向左移1 位MOV AL, [SI]LEA BX, DCTBLXLA TMOV DX, PB55OUT DX, ALMOV DX, PA55MOV AL, CL ; 输出位码OUT DX, ALCALL DELAY ; 输出三位码MOV SI, OFFSETBMOV A L,[SI]CMP AL,2JB A2MOV DX, PC55MOV AL, 0FFHOUT DX, ALJMP G3A2:MOV DX, PC55MOV AL, 00HOUT DX, ALMOV DX, TCTL ;8254计数器1 控制蜂鸣器MOV AL, 77HOUT DX, ALMOV DX, TIMER1;MOV AL,00OUT DX,ALMOV AL,01OUT DX,ALG3: POP AXPOP DSRETDISPINT0ENDPMYISR PROC NEAR ; 中断处理程序MYISR PUSH AXPUSH DXCLI ; 关中断MOV DX,MY8259_OCW3IN AL,DXAND AL,03HCMP AL,01HJE IROISRJMP OVERIROISR:CMP FLAG ,0FFHJE SMOV DX,IN1IN AL,DXMOV IN1OUT ,AL ; A2 为IN1AD 后的值JMP OVERS: MOV DX,ADCSIN AL, DXMOV IN0IN, AL ; A1 为IN0MOV AH,0DIV N ; IN0 AD 后线性转换给0832的值NEG ALADD AL,80HMOV BL,ALCMP BL,40HJB SS1SUB BL,4SS1: MOV AL,BLMOV A3,ALMOV DX,DACSOUT DX,ALMOV DX,IN1 ; 启动IN1OUT DX,ALMOV AL,0MOV FLAG ,ALOVER: MOV DX,INTR_OCW2 ; 向PC机内部8259发送中断结束命令MOV AL, 20HOUT DX, ALMOV AL, 20HOUT 20H, ALSTIPOP DXPOP AXIRETMYISR ENDPDELAY PROC NEAR ; 延时PUSH CXMOV CX, 0FFFFHLOOP $POP CXRETDELAY ENDPCODE ENDSEND ST ART。