微机原理课程设计—数据采集系统(查询法)一、课设目的进一步掌握微机原理只是,了解危机在实时采集过程中的应用,学习、掌握编程和程序调试方法。二、课设内容用查询法,将ADC0809通道0外接0~5V电压,转换成数字量后,在七段LED数码管上,以小数点后两位(几十毫伏)的精度,显示其模拟电压的十进值;0809~道0的数字量以线性控制方式送DAC0832输出,当通道O的电压为5V时,0832的OUT为0v,当通道O的电压为0时,0832的OUT为2.5V;此模拟电压再送到ADC0809通道1,转换后的数字量在CRT上以十六进制显示;通道0的数字量经74LS574输出到八位LED上,且以一定的要求,点亮LED指示灯。调整电位器,用示波器或三用表观察0832的变化,观察七段LED数码管数值的变化,观察LED灯的变化,ADC0809的CLK脉冲,由定时器8254的OUT0提供;ADC0809的EOC信号,用8255的PC0检测;74LS574外接的LED灯变化如下:若电压值小于0.5V,则最低位(DO)’LED灯亮,若电压值大于4.5V,则最高位LED灯亮,若电压值在0.5V~4.5V,则八位LED灯由低向高变化亮,且高位LED灯亮时低位灯全亮。要有较好的人机对话界面;控制程序的运行。三、硬件设计1、电原理框图见附件12、电原理框图工作过程的简要说明(1)、ADC0809的INO采集电位器0—5V电压,INl采集0832输出的模拟量。(2)、DAC0832将ADC0809的INO数字量后重新转换成模拟量输出。(3)、8255用于检测ADC0809转换是否,为七段LED数码管显示提供显示驱动信息。(4)、七段LED数码管显示ADC0809的INO的值。(5)、74LS574驱动八位发光二极管,使它们按要求点亮:来指示当前采样值的范围。(6)、8254提供ADC0809的采样时钟脉冲。(7)、74LSl38译码器为各芯片提供地址信息。四、软件设计首先进行程序初始化显示提示信息,判断是否有键按下,按下1则继续往下执行,按下2则退出。首先对8254进行初始化选择工作方式及赋初值,然后启动0809的IN0,接着初始化8255,并检测PA7的状态检测转换是否,否继续检测直至EOC为1,然后读采样值并保存,将其经线性转换后送0832,启动0809的IN1,然后重新对8255初始化及检测PA7的EOC状态端口,直至为1,读IN1的采样值并保存,将读出值经线性转换后送往CRT显示,然后将保存的INO采样值进行量纲转换,调用数码显示子程序。然后对保存的IN0采样值进行比较,若小于0.48V,74574只驱动最低位,最低位亮,若大于4.49则只有最高位亮,在中间值依次点亮一位,如大于0.48V小于1.15V则最低两位亮,在1.15V至1.82V间低三位亮,在1.82至2.48间低三位亮等。在0.48和4.49间选择六个值依次控制选择点亮LED灯.最后判断主键盘是否有键按下,有结束,无重新回到启动0809的IN0程序段。最后列写数码管显示的子程序、CRT显示子程序、延时子程序。1、主程序流图见附录22、程序DATASEGMENTMES1DB'PRESS1TOBEGIN!',0DH,0AHDB'PRESS2TOQUIT!',0DH,0AH,0DH,0AH,'$'MES2DB'IN1DATA=','$'MES3DB0DH,0AH,'$'K0DB?K1DB?SDB3DUP(?)DCTBL1DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3EHDCTBL2DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0DFHS1DB01HS2DB80HDATAENDSSTACK1SEGMENTPARASTACK'STACK'DB256DUP(?)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,MES1MOVAH,9INT21HLOP1:MOVDL,0FFHMOVAH,6INT21HJZLOP1CMPAL,'1'JZDACMPAL,'2'JZEXIT1JMPSTARTDA:MOVAL,36H;8254初始化MOVDX,306CHOUTDX,ALMOVAL,00H;8254赋初值MOVDX,3060HOUTDX,ALMOVAL,01HMOVDX,3060HOUTDX,ALBE:MOVAL,00H;启动0809的IN0MOVDX,3000HOUTDX,ALL1:MOVAL,90H;8255初始化MOVDX,302CHOUTDX,ALMOVDX,3020H;8255的PA7检测EOC状态INAL,DXTESTAL,80HJZL1MOVDX,3000H;读0809采样值INAL,DXMOVK0,AL;保存0809采样值MOVAL,K0;线性控制方式转换电压,计算公式-1/2(X-5)SUBAL,0FFHRORAL,1NEGALMOVK1,ALMOVDX,30E0H;把IN0计算值送给0832OUTDX,ALMOVAL,10H;启动0809的IN1MOVDX,3004HOUTDX,ALL2:MOVAL,90H;8255PA7检测EOC状态MOVDX,302CHOUTDX,ALMOVDX,3020HINAL,DXTESTAL,80HJZL2NEXT:MOVDX,3004H;读IN1采样值INAL,DXMOVAL,7FHMOVBL,K0SHRBL,1SUBAL,BLMOVK1,AL;保存IN1LEADX,MES2MOVAH,9INT21HJMPDEEXIT1:JMPEXITDE:MOVAL,K1;CRT显示IN1的值MOVBL,ALANDAL,0F0HMOVCL,4RORAL,CLCALLCRT1MOVAL,BLANDAL,0FHCALLCRT1MOVDL,0DHMOVAH,2INT21HMOVAL,K0;量纲转换MOVAH,00HMOVBL,51DIVBLLEASI,SMOV[SI],ALINCSIMOVAL,AHMOVBL,10MULBLMOVBL,51DIVBLMOV[SI],ALINCSIMOVAL,AHMOVBL,10MULBLMOVBL,51DIVBLCMPAH,25JAL3JMPL4L3:ADDAL,1L4:MOV[SI],ALCALLDISPMOVAL,K0CMPAL,19HJBL5CMPAL,3BHJBL6CMPAL,5DHJBL7CMPAL,7FHJBL8CMPAL,0A1HJBL9CMPAL,0C3HJBL10CMPAL,0E6HJBL11MOVDX,3080HMOVAL,80HOUTDX,ALJMPL12L5:MOVDX,3080HMOVAL,01HOUTDX,ALJMPL12L6:MOVDX,3080HMOVAL,00000011BOUTDX,ALJMPL12L7:MOVDX,3080HMOVAL,00000111BOUTDX,ALCALLDELAYJMPEXIT0L8:MOVDX,3080HMOVAL,00001111BOUTDX,ALJMPL12L9:MOVDX,3080HMOVAL,00011111BOUTDX,ALJMPL12L10:MOVDX,3080HMOVAL,00111111BOUTDX,ALJMPL12L11:MOVDX,3080HMOVAL,01111111BOUTDX,ALL12:CALLDELAYEXIT0:MOVDL,0FFHMOVAH,6INT21HJNZEXITJMPBEEXIT:MOVAH,4CHINT21HDISPPROCNEARPUSHDSPUSHCXPUSHDXPUSHAXPUSHBXMOVAL,10000000B;8255初始化MOVDX,302CHOUTDX,ALDIS1:MOVSI,OFFSETS;七段数码管显示IN0转换为十进制后的个位、十分位、百分位的值MOVAL,[SI];显示个位LEABX,DCTBL2XLATMOVDX,3024HOUTDX,ALMOVAL,000001000BMOVDX,3020HOUTDX,ALCALLDELAYINCSIMOVAL,[SI];显示十分位LEABX,DCTBL1XLATMOVDX,3024HOUTDX,ALMOVAH,000010000BMOVAL,AHMOVDX,3020HOUTDX,ALCALLDELAYINCSIMOVAL,[SI];显示百分位LEABX,DCTBL1XLATMOVDX,3024HOUTDX,ALMOVAL,100000BMOVDX,3020HOUTDX,ALCALLDELAYPOPBXPOPAXPOPDXPOPCXPOPDSRETDISPENDPCRT1PROC;CRT显示子程序PUSHAXPUSHDXADDAL,30HCMPAL,39HJBED0ADDAL,7D0:MOVDL,ALMOVAH,2INT21HPOPDXPOPAXRETCRT1ENDPDELAYPROCNEAR;DELAY子程序PUSHCXPUSHBXMOVBX,18HDEL1:MOVCX,0FFFFHLOOP$DECBXJNZDEL1POPBXPOPCXRETDELAYENDPCODEENDSENDSTART五、编程和调试中遇到的问题刚开始的时候LED数码管不亮,经检查发现是插线一端接错位置,改正后数码管亮,但发现调整电位器时,八位发光二极管的点亮次序与预计值不同,且LED数码管还会不停闪动。经检查发现是排线接触不良,对可能接触不良的排线进行排查更换,最终LED和发光二极管正常显示。编译时,程序报错AddressOutofRange,即跳转时超程。在程序中间位置加入中继跳转,同时在程序顺序运行时命令其跳过“中继跳转”指令运行。六、运行结果1.运行程序后,屏幕输出2.按键盘‘1’后,屏幕显示7段数码管显示5.00;LED灯最高位点亮3.旋动电位器直至极限位置,屏幕显示7段数码管显示0.00;LED灯最低位点亮PRESS1TOBEGIN!PRESS2TOQUIT!PRESS1TOBEGIN!PRESS2TOQUIT!IN1DATA=00PRESS1TOBEGIN!PRESS2TOQUITIN1DATA=7F附录1:电原理框图附录2:主程序流程图初始化显示提示信息8254初始化启动0809IN0结束EOC=1?读IN0采样值并保存IN0值计算后送0832启动0809IN1IN00.5V点亮最低位LEDIN04.5V按要求点亮LED点亮最高位LED主键盘有键按下吗?NYNYNYYNNY读IN1采样值并保存IN1值送CRT显示IN0值量纲转换调用数码管显示子程序EOC=1?