微机原理及接口技术实验报告学院:信息工程学院专业班级:通信0801姓名:学号:实验一多位十进制数相加实验一.实验目的1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。2.掌握数据传送和算术运算指令的用法。二.实验内容将两个多位十制数28056,47193相加,并显示加数,被加数,和。要求加数和被加数均以ASCII码形式各自顺序存放在DATAl和DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)。三.程序流程图NY显示加数和被加数计数值5--CX加数和被加数由ASCⅡ码表示转化为十六进制清除最低位进位执行ADC带进位相加AAA调整结果送被加数存储区调整偏移量显示加数和被加数将十六进制结果转化为ASCⅡ码表示的数字CX-1=0开始四.参考程序SHOWMACROBMOVDL,BMOVAH,02HINT21HENDMDATASEGMENTDATA1DB33H,39H,31H,37H,34HDATA2DB36H,35H,30H,38H,32HDATA3DB'__',0DH,0AH,'$'DATAENDSSTACKSEGMENTSTACKSTADB20DUP(?)TOPEQULENGTHSTASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVSI,OFFSETDATA2MOVBX,05SHOW20HCALLDISPLSHOW0DHSHOW0AHMOVSI,OFFSETDATA1MOVBX,05SHOW2BHCALLDISPLSHOW0DHSHOW0AHMOVCL,7S1:SHOW2DHLOOPS1显示结果结束SHOW0DHSHOW0AHMOVSI,OFFSETDATA1MOVDI,OFFSETDATA2CALLADDAMOVSI,OFFSETDATA1MOVBX,05SHOW20HCALLDISPLMOVAX,4C00HINT21HDISPLPROCNEARDS1:SHOW[SI+BX-1]DECBXJNZDS1RETDISPLENDPADDAPROCNEARMOVDX,SIMOVBP,DIMOVBX,05AD1:SUBBYTEPTR[SI+BX-1],30HSUBBYTEPTR[DI+BX-1],30HDECBXJNZAD1MOVSI,DXMOVDI,BPMOVCX,05CLCAD2:MOVAL,[SI]MOVBL,[DI]ADCAL,BLAAAMOV[SI],ALINCSIINCDILOOPAD2MOVSI,DXMOVDI,BPMOVBX,05AD3:ADDBYTEPTR[SI+BX-1],30HADDBYTEPTR[DI+BX-1],30HDECBXJNZAD3RETADDAENDPCODEENDSENDSTART四.实验过程进入DOS环境,进入E盘MASM子目录,键入:E:回车CD:MASM回车EDIT*.ASM回车(*为程序名)打开编辑窗口将汇编语言源程序输入对源程序进行汇编链接,执行并调试可执行文件六.思考题不改变数据段DATA1和DATA2的内容,如何将加数与被加数分别由28056和47193变成65082和39174,并且相加答:源程序不变将DATA1DB33H,39H,31H,37H,34HDATA2DB36H,35H,30H,38H,32H后加上DATA4DB37H,34H,31H,39H,33HDATA5DB32H,38H,30H,35H,36H并将全部DATA1和DATA2全部改成DATA4和DATA5就可以实现七、实验感想:通过本实验,基本学会了数据传送和算术运算指令的用法,熟悉了DOS环境,并且对微机原理及接口技术这门课程有了更深的了解和认识。实验二统计数据个数实验一.实验目的掌握将多位十六进制数转换成多位十进制数ASCII码的方法二.实验内容统计内存数组中大于0和小于0的元素个数,并将统计结果分别存放在LRESULT和HRESULT变量中,并显示个数三.程序流程图YNY数组元素个数----CL比较SI指向数组首地址LERSULT+1SI+1----SI显示正元素个数显示提示信息是正数?开始结束CL-1=0?HERSULT+1显示负元素个数四.参考程序DATASEGMENTARYDB1,3,-1,2,6,-9,-5,7,8,1,3,8,-6,8,-9,-7,2,4,-3,-3DB-4,7,7,8,3,1,3,6,8,5,5,6,4,5,7,-4,2,4,5,-7,5,4DB2,5,7,8,8,8,7,6,-5,4,3,2,1,-1,2,2,3,-4,5,6,7N=$-ARYLRESULTDW0HRESULTDW0TJJGDB'STATISTICSRESULT:',0DH,0AH,'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXSHOWMACROBPUSHDXPUSHAXMOVAH,02HINT21HPOPAXPOPDXENDMXORCX,CXMOVCX,NLEASI,ARYLOP:MOVAL,[SI]CMPAL,0JNSPLUSINCLRESULTJMPCONTPLUS:INCHRESULTCONT:INCSILOOPLOPLEADX,TJJGMOVAH,09HINT21HSHOW'+'MOVAX,HRESULTCALLDISPLSHOW0DHSHOW0AHSHOW'-'MOVAX,LRESULTCALLDISPLMOVAX,4C00HINT21HDISPLPROCPUSHDXPUSHAXMOVCX,10MOVDX,00HMOVBX,00HDIVCXMOVBX,DXADDAL,30HDISPL1:MOVDL,ALMOVAH,02HINT21HMOVDL,BLADDDL,30HMOVAH,02HINT21HPOPAXPOPDXRETDISPLENDPCODEENDSENDSTART五.实验过程进入E盘的MASM子目录,打开编辑窗口将汇编语言源程序输入,对源程序进行汇编链接,执行并调试可执行文件六.思考题试分析程序中语句“MOVCX,N”执行后,赋给CX寄存器的值是多少?答:赋给CX的值是63七、实验感想:通过本实验,基本学会了数据传送和算术运算指令的用法及将多位十六进制数转换为多位十进制数ASCII码得方法,熟悉了DOS环境,并且对微机原理及接口技术这门课程有了更深的了解和认识。实验三直流电机测速实验一.实验目的:1.掌握8254的工作原理和编程方法2.了解光电开关的使用方法,掌握用光电传感器测量电机转速的方法二.实验内容光电测速的基本电路由光电传感器、计数器和定时器组成。测量时在被测电机主轴上固定一个圆盘,圆盘的边缘上打上小孔。传感器的红外发射端和接收端装在圆盘的两测,电机带动圆盘转到有孔的位置时,红外光通过,红外接收管导通,输出低电平。红外光被挡住时接收管截止,输出高电平。用计数器记录在一定时间内传感器发出的脉冲个数就可以计算出电机转速。三.线路连接接线方法:8254计数器/定时器0和2作为定时器,确定测速时间,定时器0的CLK0接1MHZ脉冲频率,OUT0作为定时器2的输入,与CLK2相连,输出OUT2与8255的PA0端相连。GATE0、GATE2均接+5V,8254计数器/定时器1作为计数器,输入CLK1与直流电机计数端相连,GATE1与8255的PC0相连。电机DJ端与+5V~0V模拟开关SW1相连。四.编程提示8254计数器/定时器1作为计数器,记录脉冲个数,计数器/定时器0和2作为定时器,组成10~60秒定时器,测量脉冲个数,算出电机每分钟的转速并显示在屏幕上。8255的PA0根据OUT2的开始和结束时间,通过PC0向8254计数器/定时器1发出开始和停止计数信号。五.流程图直流电机测速实验接线图288H~28FH280H~287HPA0PC0CSOUT0GATE0CLK0OUT1GATE1CLK1OUT2GATE2CLK2CS直流电机DJ计数+5VSW11MHz+5V+5V82558254六.参考程序DATASEGMENTIOPORTEQU0D880H-0280HIO8255KEQUIOPORT+283HIO8255AEQUIOPORT+280HIO8255CEQUIOPORT+282HIO8254KEQUIOPORT+28BHIO82542EQUIOPORT+28AHIO82541EQUIOPORT+289HIO82540EQUIOPORT+288HMESSDB'STRIKEANYKEY,RETURNTODOS!',0AH,0DH,'$'COUDB0COU1DB0COUNT1DB0COUNT2DB0COUNT3DB0COUNT4DB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESSMOVAH,09HINT21HMOVDX,IO8254KMOVAL,36HOUTDX,ALMOVDX,IO82540MOVAX,50000OUTDX,ALNOPNOPMOVAL,AHOUTDX,ALMOVDX,IO8255KMOVAL,90HOUTDX,ALMOVDX,IO8255CMOVAL,00OUTDX,ALLL:MOVAH,01HINT16HJNZQUIT1MOVDX,IO8254KMOVAL,70HOUTDX,ALMOVDX,IO82541MOVAL,0FFHOUTDX,ALNOPNOPOUTDX,ALMOVDX,IO8254KMOVAL,90HOUTDX,ALMOVDX,IO82542MOVAL,100OUTDX,ALMOVDX,IO8255CMOVAL,01HOUTDX,ALJMPA0QUIT1:JMPQUITA0:MOVDX,IO8255AA1:INAL,DXANDAL,01HJZA1MOVDX,IO8255CMOVAL,00HOUTDX,ALMOVDX,IO8254KMOVAL,70HOUTDX,ALMOVDX,IO82541INAL,DXMOVBL,ALINAL,DXMOVBH,ALMOVAX,0FFFFHSUBAX,BXCALLDISPMOVDL,0DHMOVAH,02INT21HMOVDL,0AHMOVAH,02INT21HJMPLLDISPPROCNEARMOVDX,0000HMOVCX,03E8HDIVCXMOVCOUNT1,ALMOVAX,DXMOVCL,64HDIVCLMOVCOUNT2,ALMOVAL,AHMOVAH,00HMOVCL,10DIVCLMOVCOUNT3,ALMOVCOUNT4,AHMOVAL,COUNT1CALLDISP1MOVAL,COUNT2CALLDISP1MOVAL,COUNT3CALLDISP1MOVAL,COUNT4CALLDISP1RETDISPENDPDISP1PROCNEARANDAL,0FHCMPAL,09HJLENUMADDAL,07HNUM:ADDAL,30HMOVDL,ALMOVAH,02INT21HRETDISP1ENDPQUIT:MOVAH,4CHINT21HCODEENDSENDSTART七.实验结果八.思考题关闭电机后,为什么8254计数不为0?答:关闭电机后,但主机未断电,计数值锁存在锁存器中,所以读数会一直为锁存器的值,8254计数不会显示0九.实验感想通过本实验,基本掌握了8254的工作原理和编程方法,了解了光电开关,掌握了用光电传感器测量电机转速的方法。同时,也进一步提高了自己实践动手的能力,熟悉了DOS环境,并且对微机原理及接口技术这门课程有了更深的了解和认识。实验四十字路口红绿灯闪烁实验一.实验目的通过对红、绿、黄灯的控制,熟练掌握8255A接口芯片的编程方法。二.实验内