版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
...wd......wd......wd...实验报告一:I/0地址译码和简单并行接口——实验一&实验二实验目的掌握I/O地址译码电路的工作原理;掌握简单并行接口的工作原理及使用方法。实验原理及内容a)I/0地址译码1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。例如:执行下面两条指令MOVDX,2A0HOUTDX,AL〔或INAL,DX〕Y4输出一个负脉冲,执行下面两条指令MOVDX,2A8HOUTDX,AL〔或INAL,DX〕Y5输出一个负脉冲。利用这个负脉冲控制L7闪烁发光〔亮、灭、亮、灭、……〕,时间间隔通过软件延时实现。2、接线:Y4/IO地址接CLK/D触发器Y5/IO地址接CD/D触发器D/D触发器接SD/D触发器接+5VQ/D触发器接L7〔LED灯〕或逻辑笔b)简单并行接口1、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门〞)。74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。3、按下面图4-2-2简单并行输入接口电路图连接电路(74LS244插通用插座,74LS32用实验台上的“或门〞)。74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出K0~K7,8个数据输出端分别接数据总线D0~D7。4、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这个ASCⅡ码,并将其对应字母在屏幕上显示出来。5、接线:1〕输出按图4-2-1接线〔图中虚线为实验所需接线,74LS32为实验台逻辑或门〕2〕输入按图4-2-2接线〔图中虚线为实验所需接线,74LS32为实验台逻辑或门〕硬件连线图I/O地址译码2.简单并行接口软件程序流程图I\O地址译码简单并行接口源程序I\O地址译码STACKSEGMENTSTACK'STACK'DB100DUP(?)STACKENDSDATASEGMENTDATAENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATASTART:MOVAX,DATAMOVDS,AXLOP:MOVDX,2A0H OUTDX,AL;点亮灯 CALLDELAY;延时 MOVDX,2A8H OUTDX,AL;熄灭灯 CALLDELAY JMPLOPCODEENDSENDSTARTDELAYPROCNEAR;延时子程序PUSHCXPUSHBXMOVBX,250;250×65535LP2:MOVCX,0FFFFHLP1:LOOPLP1DECBXJNZLP2POPBXPOPCXRETDELAYENDP2、简单并行接口电路STACKSEGMENTSTACK'STACK'DB100DUP(?)STACKENDSDATASEGMENTDATAENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATASTART:MOVAX,DATAMOVDS,AXLOP:MOVAH,01H INT21H CMPAL,1BH;检查是否按下退出esc键 JZENDING MOVDX,2A8H;将ascii码输出 OUTDX,AL JMPLOPENDING:MOVAL,0OUTDX,ALMOVAX,4C00HINT21HCODEENDSENDSTART实验总结在这三次实验中出现的问题以及相应的解决方法如下:实验一:因为对D触发器的特性有些遗忘,在编写程序时犯了不少错误,最终通过请教助教解决了一些疑问,从而顺利写出了代码。实验二:实验二的程序逻辑比照简单,但连线比照多,在实验过程中,也屡次连错了线,通过检查纠正了连线错误,也很快完成了实验。实验收获与心得体会这次实验是第一次用汇编语言控制接口,因为理论课尚未讲到相关内容,做实验时,上手地比照慢。通过实验一实验二,熟练了对IN、OUT指令的使用,对接口有了初步认识。同时通过研究译码电路,对“地址〞也有了进一步的认识。实验报告二:可编程并行接口8255的应用——实验三&实验四&实验五实验目的通过实验,掌握8255工作于方式0以及设置A口为输出口,C口为输入口的方法。、掌握数码管显示数字的原理。掌握8255控制键盘及显示电路的根本功能及编程方法;掌握一般键盘和显示电路的工作原理。实验原理及内容a)实验三1、实验电路如图4-3-1,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。2、编程从8255C口输入数据,再从A口输出。3、接线:PC7~PC0/8255接K7~K0/逻辑电平开关PA7~PA0/8255接L7~L0/LED显示CS/8255接Y1/IO地址b)实验四1、静态显示:按4-4-1连接好电路,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~dp相连,位码驱动输入端S0、S1、S2、S3接PC0、PC1、PC2、PC3,编程在数码管显示自己的学号的后四位。〔或编程在数码管上循环显示“00-99〞,位码驱动输入端S0、S1接PC0、PC1;S2、S3接地。〕2、接线:PA7~PA0/8255接dp~a/LED数码管PC3~PC0/8255接S3~S0/LED数码管CS/8255接Y1/IO地址C〕实验五1、编程:使得在小键盘上每按一个健,4位数码管上显示出相应字符,它们的对应关系如下:2、接线:PC7~PC0/8255接行3~列0/4X4键盘PA7~PA0/8255接dp~a/LED数码管CS/8255接Y1/IO地址PB3~PCB/8255接S3~S0/LED数码管〔或哪位数码管要显示则位选S接+5V即高电平,不想显示的数码管S接GND即低电平〕硬件连线图实验三实验四实验五软件流程图实验三实验四实验五源程序实验三STACKSEGMENTSTACK'STACK'DB100DUP(?)STACKENDSDATASEGMENTDATAENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATASTART:MOVAX,DATAMOVDS,AX MOVAL,10001001B;A口输出C口输入,工作方式为00 MOVDX,28BH;控制端口地址 OUTDX,AL;8255初始化,写入工作方式控制字LOP:MOVDX,28AH;将开关状态读入INAL,DXMOVDX,288H;讲状态输出到A口OUTDX,AL MOVAH,0BH;检测键盘状态 INT21HCMPAL,0FFH;如果键盘上有输入则停顿程序 JZENDING JMPLOPENDING:MOVAL,0MOVDX,288HOUTDX,ALMOVAX,4C00HINT21HCODEENDSENDSTART实验四STACKSEGMENTSTACK'STACK'DB100DUP(?)STACKENDSDATASEGMENTDATAENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATASTART:MOVAX,DATAMOVDS,AX MOVAL,10000000B MOVDX,28BH OUTDX,AL;8255初始化LOP:MOVAL,3FH;将0的段码输出给A口 MOVDX,288H OUTDX,AL MOVAL,08H;输出位码给C口 MOVDX,28AH OUTDX,AL CALLDELAY;延时程序 MOVAL,06H;将1的段码输出的A口 MOVDX,288H OUTDX,AL MOVAL,04H;输出选通位码 MOVDX,28AH OUTDX,AL CALLDELAY MOVAL,7FH;将8的段码输出的A口 MOVDX,288H OUTDX,AL MOVAL,02H;输出选通位码 MOVDX,28AH OUTDX,AL CALLDELAY MOVAL,06H;将8的段码输出的A口 MOVDX,288H OUTDX,AL MOVAL,01H;输出选通位码 MOVDX,28AH OUTDX,AL callDELAY MOVAH,0BH;检查键盘是否有输入 INT21H CMPAL,0ffh JZENDING;有则退出 JMPLOPENDING:MOVAL,00HMOVDX,28AHOUTDX,ALMOVAX,4C00HINT21HDELAYPROCNEARPUSHCXPUSHBX MOVBX,005H;250×65535LP2:MOVCX,0fFFFHLP1:LOOPLP1DECBXJNZLP2POPBXPOPCXRETDELAYENDPCODEENDSENDSTART实验五STACKSEGMENTSTACK'STACK'DB100DUP(?)STACKENDSDATASEGMENTKEYVALUEDB71H,7CH,07H,4FH;键盘值对应的段码表,LINE0DB79H,77H,7DH,5BH;LINE1DB5EH,6FH,6DH,06H;LINE2DB39H,7FH,66H,3FH;LINE3ROWDB0EFH,0DFH,0BFH,7FHDATAENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATASTART:MOVAX,DATAMOVDS,AX MOVAL,10000001B;C口高4位接键盘行输出,低4位列输入,A口输出 MOVDX,28BH OUTDX,AL LEABX,KEYVALUE MOVSI,0SCANROW:MOVAL,ROW[SI];扫描行 MOVDX,28AH OUTDX,AL;输出行CALLDELAY;延迟消抖 INAL,DX;读取列 ANDAL,0FH CMPAL,0FH JZNEXT;此行无键按下 CMPAL,0EH JZLINE0;按下第0列的键 CMPAL,0DH JZLINE1;按下第1列的键 CMPAL,0BH JZLINE2;按下第2列的键 JMPLINE3NEXT:INCSICMPSI,4 JBNEXT1 MOVSI,0NEXT1:JMPSCANROWLINE0:MOVCL,[BX+SI+0];查表或许按下的键相应的输出段码JMPOUTPUTLINE1:MOVCL,[BX+SI+4]JMPOUTPUTLINE2:MOVCL,[BX+SI+8]JMPOUTPUTLINE3:MOVCL,[BX+SI+12]OUTPUT:CMPCL,3FH;检查是否是0,是0就退出JZENDING MOVAL,CL MOVDX,288H;传送段码给A口 OUTDX,AL MOVAL,01H;传送位码给B口 MOVDX,289H OUTDX,AL MOVSI,0 JMPSCANROW;继续扫描ENDING:MOVAL,00MOVDX,289HOUTDX,ALMOVAX,4C00HINT21HDELAYPROCNEARPUSHCXPUSHBX MOVBX,1;250×65535LP2:MOVCX,0FFFHLP1:LOOPLP1DECBXJNZLP2POPBXPOPCXRETDELAYENDPCODEENDSENDSTART实验总结在这三次实验中出现的问题以及相应的解决方法如下:实验三:一开场没法用开关控制LED的亮灭,程序一运行就直接退出了,检查代码发现自己的退出条件写错了,修改后就能正常工作了。实验四:四个数码管显示不正常,四个数字都没法稳定的显示,经过调整延时的大小,能够使后两个数码管正常显示,但前两个数码管不受控制,最后发现是前两个数码管坏了。实验五:按下的键与数码管中显示的图形不一样,经过检查代码和实验箱,发现代码中按键对应的段码表行列顺序与实验箱不一致,经过调整,解决了不一致的问题。实验收获与心得体会这三次实验都是围绕着8255并行接口做一些小的应用,其中实验三与实验四逻辑比照简单,实验五稍微难一点,因为理论课还未讲到接口局部,硬件实验需要自己自学接口电路,但从中收获了不少知识,大致明白了假设何使用一个接口芯片,学会了自己看手册,根据说明来编程使用接口电路,对地址有了更深刻的理解。代码都是实验前自己课下独立编写的,因此上实验室操作时比照顺利,但也遇到了一些小错误,但也都独立解决了,在这样的一个过程中,增强了自己的学习能力和独立解决问题的能力。实验报告三:可编程定时器/计数器〔8253/8254〕一、实验目的学习掌握8253用作定时器的编程原理;二、实验原理及内容〔1〕8253应用小结8253和8254都是可编程计数器,它们的引脚兼容,功能与使用方法一样。8254是8253的改进型。1.8253初始化使用8253前,要进展初始化编程。初始化编程的步骤是:①向控制存放器端口写入控制字对使用的计数器规定其使用方式等。②向使用的计数器端口写入计数初值。2.8253控制字D7D6=00:使用0号计数器,D7D6=01:使用1号计数器D7D6=10:使用2号计数器,D7D6=11:无效D5D4=00:锁存当前计数值D5D4=01:只写低8位〔高8位为0〕,读出时只读低8位D5D4=10:只写高8位〔低8位为0〕,读出时只读高8位D5D4=11:先读/写低8位,后读/写高8位计数值D3D2D1=000:选择方式0,D3D2D1=001:选择方式1D3D2D1=X10:选择方式2,D3D2D1=X11:选择方式3D3D2D1=100:选择方式4,D3D2D1=101:选择方式5D0=0:计数初值为二进制,D0=1:计数初值为BCD码数〔2〕实验电路1、按图4-8-1虚线连接电路2、接线:CS/8253接Y0/IO地址GATE0/8253接+5VCLK0/8253接1M时钟OUT0/8253接喇叭或蜂鸣器〔3〕实验内容1.完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。2.扩展局部:利用小键盘实现弹琴功能,并显示弹奏的乐谱。注意:8253输入频率应小于2MHz。三、硬件连线图四、软件流程图1、主程序流程放音子程序流程弹琴子程序流程五、源程序STACKSEGMENTSTACK'STACK'DB100DUP(?)STACKENDSDATASEGMENTINPUTINFODB0AH,0DH,'Pleasechoosemode:1isplayingmusic;2isspieling',0AH,0DHDB'$'ERROR_INFODB0AH,0DH,'illegalinput,pleaseinputagain!',0AH,0DH,'$'TONEDW3906,3472,3125,2932,2604,2347,2083;音调1-7计数初始值TIMEDW1000H,1000H,1000H,2000H,2000H,4000H,4000H;持续时间DUANMADB06H,5BH,4FH,66H,6DH,7DH,07H;与乐谱所对应的数码管段码KEYVALUEDB71H,7CH,07H,4FH;键盘值对应的段码表,LINE0DB79H,77H,7DH,5BH;LINE1DB5EH,6FH,6DH,06H;LINE2DB39H,7FH,66H,3FH;LINE3TUNEKDW0,0,2083,3125DW0,0,2347,3472 DW0,0,2604,3906 DW0,0,2932,0ROWDB0EFH,0DFH,0BFH,7FHDATAENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATASTART:MOVAX,DATAMOVDS,AX MOVAL,10000001B;8255初始化;C口高4位接键盘行输出,低4位列输入,A口输出 MOVDX,28BH OUTDX,ALMOVAL,00110110B;8253初始化,工作方式3,使用计时器0 MOVDX,283H OUTDX,ALBEGIN:MOVAH,09H;输入提醒,选择放音或弹琴模式或者退出程序 LEADX,INPUTINFO INT21HMOVAH,01HINT21H CMPAL,'1' JZPLAY_MUSIC CMPAL,'2' JZSPIELING CMPAL,1BH JZENDING JMPINPUT_ERROR;输入检错INPUT_ERROR:MOVAH,09H LEADX,ERROR_INFOINT21H JMPBEGIN PLAY_MUSIC:CALLPLAYMUSICJMPBEGINSPIELING:CALLSPIELINGP JMPBEGINENDING:MOVAX,4C00HINT21H PLAYMUSICPROCPUSHSI;保护现场数据PUSHDIPUSHAXPUSHBXPUSHCXPUSHDXLEASI,TONE;音调表LEADI,TIME ;每一个音调持续时间表LEABX,DUANMA;段码表 MOVCX,7;循环控制变量赋值LOP1:MOVAX,[SI];计数器赋值MOVDX,280H;计时器0的地址 OUTDX,AL;先写入低八位,再写入高八位 MOVAL,AH OUTDX,AL INCSI INCSI MOVAL,[BX];在数码管上显示乐谱 MOVDX,288H;8255A口地址 OUTDX,AL INCBX MOVAL,01H;传送位码给B口 MOVDX,289H OUTDX,AL MOVAX,[DI];延迟,AX为入口参数 CALLDELAY INCDI INCDI MOVAH,0BH;检测键盘是否有输入,有则跳出 INT21H CMPAL,0FFH JZPOUT LOOPLOP1LEASI,TONELEADI,TIME LEABX,DUANMA MOVCX,7;重新循环 JMPLOP1POUT:POPDXPOPCX POPBX POPAX POPDI POPSI RET PLAYMUSICENDPSPIELINGPPROCPUSHAX PUSHBX PUSHCX PUSHDX PUSHBP PUSHSI PUSHDI LEABX,KEYVALUELEABP,TUNEK MOVSI,2;只扫描2,3行〔01234567〕SCANROW:MOVAL,ROW[SI];扫描行 MOVDX,28AH OUTDX,AL;输出行PUSHAXMOVAX,1CALLDELAY;延迟消抖POPAX INAL,DX;读取列 ANDAL,0FH CMPAL,0FH JZNEXT;此行无键按下 CMPAL,0EH JZLINE0 CMPAL,0DH JZLINE1 CMPAL,0BH JZLINE2 JMPLINE3NEXT:MOVAL,36H;键盘弹起,对8253重新初始化,是蜂鸣器停顿发音MOVDX,283H OUTDX,ALINCSICMPSI,4 JBNEXT1 MOVSI,2NEXT1:JMPSCANROWLINE0:MOVCL,[BX+SI+0];查表MOVDI,SISHLDI,1MOVAX,DS:[BP+DI+0]JMPOUTPUTLINE1:MOVCL,[BX+SI+4]MOVDI,SI SHLDI,1MOVAX,DS:[BP+DI+8]JMPOUTPUTLINE2:MOVCL,[BX+SI+8]MOVDI,SI SHLDI,1MOVAX,DS:[BP+DI+16]JMPOUTPUTLINE3:MOVCL,[BX+SI+12]MOVDI,SI SHLDI,1MOVAX,DS:[BP+DI+24]OUTPUT:CMPCL,3FH;检查是否是0,是0就退出JZENDSP MOVDX,280H;输出数据给计数器 OUTDX,AL MOVAL,AH OUTDX,AL MOVAL,CL;数码管显示乐谱 MOVDX,288H;传送段码给A口 OUTDX,AL MOVAL,01H;传送位码给B口 MOVDX,289H OUTDX,AL JMPSCANROW;继续扫描ENDSP:POPDIPOPSI POPBP POPDX POPCX POPBX POPAXRETSPIELINGPENDP DELAYPROCNEARPUSHCXPUSHAX ;MOVAX,1;250×65535LP2:MOVCX,08FFHLP1:LOOPLP1DECAXJNZLP2POPAXPOPCXRETDELAYENDPCODEENDSENDSTART六、实验总结在本次实验中主要出现了如下问题:延迟函数没处理好,在本次实验中,我将弹琴功能和放音功能写在同一个程序中,两个局部都需要使用到延迟函数,在放音子程序中,延迟函数起到控制音调持续时间长短的作用,在弹琴功能中,延迟函数主要起键盘消抖的作用。不同的作用所要求的延迟时间长短不一样,一开场没注意到这个问题,导致放出来的音乐很刺耳。七、实验收获与心得体会本次实验主要内容是使用8254定时器来播放音乐,经过前几次实验,自己对接口电路的使用越来越熟练,按照手册对接口电路进展初始化和读写即可。实验过程也并不是一帆风顺,出现了一些错误,通过解决代码中的错误,我的调试能力得到了很大的锻炼,也变得更加有耐心去解决一些问题。实验报告四:串行通讯8251实验目的1、了解串行通讯的根本原理。2、掌握串行接口芯片8251的工作原理和编程方法。实验原理及内容1、按图4-16-1连接好电路,(8251插通用插座)其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。2、编程:从键盘输入一个字符,将其ASCII码加1后发送出去,再接收回来在屏幕上显示,〔或将内存制定区域内存放的一批数据通过8251A的TXD发送出去,然后从RXD接收回来,并在屏幕上或数码管上显示出来。〕实现自发自收。3、接线:CLK0/8254接1M时钟GATE0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度产学研合作项目研发成果转化与知识产权保护协议4篇
- 2024版软件源码授权保密协议范本
- 二手房私人交易协议模板2024版B版
- 2025年度新能源电池研发与采购安装合同范本3篇
- 2025年度厂房修建与绿色建筑节能检测服务合同4篇
- 2025年度智慧城市建设规划与实施合同4篇
- 2025年度地理信息数据库建设测绘合同4篇
- 2025年度企业培训中心场地租赁及课程开发服务合同3篇
- 二零二五年度传统烟酒品牌传承保护协议
- 二零二五年度研学旅行安全保障及责任划分合同
- 银行2025年纪检工作计划
- 2024-2024年上海市高考英语试题及答案
- 注射泵管理规范及工作原理
- 山东省济南市2023-2024学年高二上学期期末考试化学试题 附答案
- 大唐电厂采购合同范例
- 国潮风中国风2025蛇年大吉蛇年模板
- GB/T 18724-2024印刷技术印刷品与印刷油墨耐各种试剂性的测定
- IEC 62368-1标准解读-中文
- 15J403-1-楼梯栏杆栏板(一)
- 2024年中考语文名句名篇默写分类汇编(解析版全国)
- 新煤矿防治水细则解读
评论
0/150
提交评论