微原硬件实验报告-北邮.doc_第1页
微原硬件实验报告-北邮.doc_第2页
微原硬件实验报告-北邮.doc_第3页
微原硬件实验报告-北邮.doc_第4页
微原硬件实验报告-北邮.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微原硬件实验报告实验一实验平台介绍及IO的使用一、实验目的1. 通过实验了解和熟悉实验台的结构,功能及使用方法。 2. 通过实验掌握直接使用 Debug 的 I、O 命令来读写 IO 端口。 3. 学会 Debug 的使用及编写汇编程序二、实验内容1. 学习使用 Debug 命令,并用 I、O 命令直接对端口进行读写操作, 2.用汇编语言编写跑马灯程序。(使用 EDIT 编辑工具)实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。 B.通过输出端口控制灯的工作状态(低电平灯亮)三、实验步骤1.实验板的 IO 端口地址为EEE0H在 Debug 下, I 是读命令。(即读输入端口的状态-拨码开关的状态) O 是写命令。(即向端口输出数据-通过发光管来查看) 进入 Debug 后, 读端口 拨动实验台上八位拨码开关 输入 I 端口地址回车 屏幕显示xx表示从端口读出的内容,即八位开关的状态 ON 是 0,OFF 是 1 写端口输入O端口地址xx (xx 表示要向端口输出的内容)回车查看实验台上的发光二极管状态,0 是灯亮,1 是灯灭。 2. 在 Debug 环境下,用 a 命令录入程序,用 g 命令运行CDebug -amovdx, 端口地址 moval,输出内容 outdx, al movah, 0bhint21h oral, al jz0100 int20h -g 运行查看结果 ,修改输出内容,再运行查看结果,分析该段程序的作用movah, 0bh int21h oral, al jz0100 int20h 3.利用 EDIT 工具编写汇编写跑马灯程序程序,实现功能:A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。B.通过输出端口控制灯的工作状态(低电平灯亮) CEDIT 文件名.asm录入程序 按 Alt 键 打开菜单 进行存盘或退出编译文件 CMASM 文件名.asm连接文件 CLINK 文件名.obj运行文件 或用 Debug 进行调试。四、程序流程图开始左移右移D7=0 ?D6=0 ?CX赋值亮LED调用延时结束N Y N Y 五、程序代码DATA SEGMENT LED DB 0EFH;跑马灯选通一个灯亮DATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FAR PUSH DS XOR AX,AX PUSH AX;程序结束返回DOS功能 MOV AX,DATA MOV DS,AX MOV DX,0EEE0H;实验板IO端口LOOP0: IN AL,DX MOV AH,AL AND AL,80H;低7位置零 XOR AL,80H;检测D7位 JZ LOOP4;D7为1时不执行程序 MOV AL,AH AND AL,40H XOR AL,40H JZ LOOP2;检测D6位,控制跑马灯方向 ROL LED,1;D6=0时左移 JMP LOOP3LOOP2: ROR LED,1;D6=1时右移LOOP3: AND AH,3FH;D7、D6置零 MOV CL,AH;低六位的数值赋给CX MOV CH,0 MOV AL,LED OUT DX,AL;点亮LED INC CXLOOP1: CALL DELAY LOOP LOOP1;通过调用延时循环次数实现跑马灯速度调节 JMP LOOP0LOOP4: RETF;再次检测START ENDPDELAY PROC;延时子程序,100000H次循环 PUSH CX;CX入栈保存 MOV CX,800HDELAY1: PUSH CX MOV CX,400HDELAY2: LOOP DELAY2 POP CX LOOP DELAY1;简单的循环嵌套 POP CX RETDELAY ENDPCODE ENDS END START六、思考题通过实验说明用debug 中的a命令录入实验中给出的小程序中,有些语句可以不写出“h”字符的原因。答:通过观察可以发现,编码时,凡是十六进制数据都是要加H的,而地址则不用。这是因为编译时所能识别的数据有多种,为了保证编译正常进行,必须要告诉编译器数据的类型。而地址只有默认的16进制形式,所以不需指定类型就能完成正确的编译,所以无须加H。而在DEBUG环境下,它的默认数据格式就是十六进制的,所以就不需要写出“H”字符;否则通不过编译。七、心得体会与收获在这次实验中,我们初步熟悉了在Debug环境下使用I/O命令,实现了对拨码开关状态的读取以及对发光二极管亮灭的控制,即初步尝试了对于微机接口的控制。通过控制发光二极管的亮与灭,结合相关程序的设计,我们实现了一个简单的跑马灯程序。结合查询拨码开关的状态,能够实现点亮发光二极管的方向、模式和速度的调整。这个跑马灯实验的程序使用的是简单的分支结构。这次实验的要点是对I/O接口译码电路的理解以及使用,通过在Debug环境下的I/O命令,我们测试了外设功能,这使我们了解了地址与端口的对应情况,从而明确了跑马灯程序编写的流程和注意事项。通过该译码电路实验,我掌握了地址译码电路的设计方法和实现原理,对硬件的I/O接口技术有了进一步的认识。这次实验也为以后的实验打下了基础,特别是,应先理解了译码电路的工作原理,然后才能进行编程。实验二 8255A并行接口应用一、实验目的:1掌握8255A 的功能及方式0、1的实现 2熟悉 8255A 与CPU的接口,以及传输数据的工作原理及编程方法。 3了解七段数码管显示数字的原理。 4掌握同时显示多位数字的技术。二、实验内容:在实验一的基础上学习 PIO 芯片(8255)编程应用,熟悉平台的主要内容。CS 用 Y0 (EE00H) (一) 简要说明: 在方式0(输入/输出)下,以A 口为输出口,B 口为输出口, A口接六个共阴极数码管的八位段码,高电平点亮数码管的某一段, B 口接数码管的位选(即要使哪个数码管亮),高电平选中某一位数码管点亮。8255A 中 A 端口地址 EE00H B 端口地址 EE01HC 端口地址 EE02H 控制地址 EE03H 八段数码管的显示规律及数码管的位选规律自己查找,可用实验一中,学过的I、O令来做。(二)6位数码管静态显示 在数码管电路上静态地显示6位学号,当主机键盘按下任意键时,停止显示,返回提示:该电路6个数码管的同名阳极段已经复接,当段选寄存器寄存了一个字型之后,6个数码管都有可能显示出相同的数字。如果要使6 个数码管“同时”显示不同字,必须采用扫描显示的方法,通过选位寄存器选择某一位数码管,显示其数字(对应为 1),然后关闭此数码管,再选择下一位数码管进行显示;如果在一秒钟内,每一位管都能显示30次以上,则人眼看到的是几位数码管同时在显示。 实验证明,在扫描显示过程中,每一位显示延迟1ms是最佳选择。 (三)6位数码管动态显示 要求在数码管电路16位数码管上按图3.2 所示的规律,动态显示字符串HELLO,当主机键盘按下任意键时结束。 图3.2 字符串动态显示示意图 提示: 本实验应在上面实验的基础上完成 在数据段,按下列规律设置12个字型码: MESG DB 0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0 POINT DW MESG POINT单元存放MESG单元的有效地址,程序取出POINT单元的内容BX,然后用BX地址取数送数码管电路,扫描显示6个字符。每过0.5s将POINT单元的内容加1,再将POINT单元的内容BX,。POINT 单元内容加 1,使字符串显示的首地址向高地址移动一个单元,从而使6位字符串向“左”移动一位,实现动态显示。 动态显示的速度可控制(快或慢),利用实验一读入端口的功能三、程序流图程序一:静态显示学号NEXT:CX、BX、SL初始化A口、B口输出段选位选信号结束位选左移INC BX ,DEC CX8255初始化键盘输入?开始CX=0?N Y Y N 程序二:动态显示HELLO开始8255初始化快速D0=1?慢速Y N 根据speed确定CATCOUNT、LEDCOUNT数值Call SLENCO依次点亮数码管Call ENCODE,确定LED段选,显示字符键盘输入?结束 Y N 四、程序代码程序一:DATA SEGMENT SHOWDB 0EDH,0FDH,0EDH,0F4H,39H,0F4H;080242COUNT EQU $-SHOW SL DB ?;8段数码管位选通信号DATA ENDSSTACK SEGMENT STACKSTACKDB 100H DUP(?)STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKDELAY PROC;延时子程序 PUSH CX MOV CX,800HDELAY1: PUSH CX MOV CX,400HDELAY2: LOOP DELAY2 POP CX LOOP DELAY1 POP CX RETDELAY ENDPSTART :MOV AX,DATAMOV DS,AX NEXT:MOV CX,COUNTLEA BX,SHOWMOV SL,01HAGAIN:MOV AL,80H;A口方式0输出,B口方式0输出MOV DX,0EE03HOUT DX,ALMOV AL,SLMOV DX,0EE01H;B口为数码管选通端口OUT DX,ALMOV AL,BXMOV DX,0EE00H;A口为8段数码管段选OUT DX,AL;依次显示学号数字MOV AL,00H MOV DX,0EE00HOUT DX,AL;熄灭数码管INC BXSHL SL,1;左移点亮数字位置LOOP AGAINMOV AH,0BH;检测键盘缓冲区INT 21HOR AL,ALJZ NEXTOK:MOV AH,4CHINT 21HCODE ENDSEND START程序二:DATA SEGMENTCOUNT DW ? ;时延计数SPDCOUNT DW 00H ;控速计数LEDCOUNT DB 00HCATCOUNT DB 00HTMP DB 00HLED DB ?SL DB 01H;数码管位选SPEED DW 0000HDATA ENDSSTACK SEGMENT STACK STACKDB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKDELAY1 PROC;延时子程序MOV COUNT,03FFHLOOP1: DEC COUNTJNZ LOOP1RETDELAY1 ENDPENCODE PROC ;根据LEDCOUNT的当前值,给变量LED赋值使其显示相应的字符;若要改变LED点亮的模式,改变ENCODE子程序中变量LED的赋值模式即可CMP LEDCOUNT,00HJA EN1MOV LED,00H ;BLANK _JMP NEXTEN1: CMP LEDCOUNT,01HJA EN2MOV LED,00H ;BLANK _JMP NEXTEN2:CMP LEDCOUNT,02HJA EN3MOV LED,00H ;BLANK _JMP NEXTEN3:CMP LEDCOUNT,03HJA EN4MOV LED,00H ;BLANK _JMP NEXTEN4:CMP LEDCOUNT,04HJA EN5MOV LED,00H ;BLANK _JMP NEXTEN5: CMP LEDCOUNT,05HJA EN6MOV LED,00H ;BLANK _JMP NEXTEN6: CMP LEDCOUNT,06H JA EN7 MOV LED,3DH ;HJMP NEXTEN7: CMP LEDCOUNT,07HJA EN8MOV LED,0DCH ;EJMP NEXTEN8: CMP LEDCOUNT,08HJA EN9MOV LED,8CH ;LJMP NEXTEN9:CMP LEDCOUNT,09HJA ENAMOV LED,8CH ;LJMP NEXTENA:CMP LEDCOUNT,0AHJA ENBMOV LED,0EDH ;OJMP NEXTBENB:MOV LED,00H ;BLANK _NEXTB: RETENCODE ENDP;根据当前CATCOUNT的值给SL赋值SENCO PROC CMP CATCOUNT,00HJA EB1MOV SL, 01HJMP NEXTEB1: CMP CATCOUNT,01HJA EB2MOV SL, 02HJMP NEXTEB2: CMP CATCOUNT,02HJA EB3MOV SL, 04HJMP NEXTEB3: CMP CATCOUNT,03HJA EB4MOV SL, 08HJMP NEXTEB4:CMP CATCOUNT,04HJA EB5MOV SL, 10HJMP NEXTEB5: MOV SL, 20HNEXT: RETSLENCO ENDPSTART:MOV AX, DATAMOV DS, AXMOV ES, AXMOV AL, 80H ;8255初始化MOV DX, 0EE03HOUT DX, AL;A口方式0输出,B口方式0输出,C口无关S1S:MOV DX,0EEE0H ;检测拨码开关状态IN AL, DX;若拨码开关最低位置位,则选择快速模式MOV SPEED,0FFFHAND AL, 01H ;未被置位则选择慢速模式JZ FL3MOV SPEED ,07FFH ;快速模式FL3:INC CATCOUNTCMP CATCOUNT,06H ;一轮是否显示完毕?JB FL1MOV CATCOUNT,00H ;CATCOUNT值回零INC SPDCOUNTMOV DX,SPEEDCMP SPDCOUNT,DX;根据速度选择JB FL1;控制改变SL的频率MOV SPDCOUNT,00HINC TMPCMP TMP,06HJB FL1MOV TMP,00HFL1: MOV DL,CATCOUNTADD DL,TMPMOV LEDCOUNT,DLCMP LEDCOUNT,0CHJB FL2SUB LEDCOUNT,0CHFL2: CALL SLENCO;依次点亮数码管MOV DX, 0EE01HMOV AL, SLOUT DX, ALCALL ENCODE;选择此数码管显示的字符MOV DX, 0EE00HMOV AL, LEDOUT DX, ALCALL DELAY1;调用延时子程序MOV AH, 0BH;检测键盘缓冲区INT 21HOR AL, ALJZ S1SMOV AX, 4C00HINT 21HCODE ENDSEND START五、心得体会与收获通过这次的实验,我对实验的硬件电路有了更进一步的了解,包括数码管显示电路,8255与CPU、外设的连接及编程,数码管段选连在一起,位选是独立开的,通过位选可以控制哪一个数码管亮,通过段选可以控制那个数码管显示什么,而由此引出的静态显示到动态显示更是一种实验思想,也让我们对以后的实验有了更大的期待和兴趣。实验三8253计数器/定时器的应用一、实验目的: 学习掌握8253用作定时器的编程原理; 二、实验内容完成一个音乐发生器,通过蜂鸣器放出音乐,并在数码管上显示乐谱。音符频率对照音符 1(do) 2(re) 3(mi) 4(fa) 5(so) 6(la) 7(si) i(do) 频率(Hz) 256 288 320 341 384 426 .6 480 512 三、电路测试与连接测试:在Debug状态下,用“O”命令测试8353的发生功能,3组通道工作是否正常。电路连接: 8253的CS接译码器输出Y1 其地址为EE20-EE27H8253的OUT接蜂鸣器的BELL端8253的门控信号GATE接+5V8253的CLK端接Q7(32KHz)清零复位电路中的T/C端接地(或接RESET端)注意:由于8253计数速率应小于2MHz,CLK0的输入信号必须由8MHz经393分频到小于2MHz后使用。393分频之后,Q0输出为4MHz,Q1输出为2MHzQ7输出32KHz。编程提示:18253控制端口地址为EE23H定时器0地址为EE20H定时器1地址为EE21H定时器2地址为EE22H2.定时器可工作在方式3下。四、程序流程图子程序发音:顺序结构写入分频初值屏幕显示乐谱延时调用RET主程序结构:开始8253初始化8255初始化发音子程序顺序调用键盘输入?结束Y N 五、程序代码DATA SEGMENTNUM dw 02fffh;延时大小DATA ENDSSTACK SEGMENT STACKSTACKDB 100H DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKDELAY PROC FAR;延时子程序PUSHFPUSH CXMOV CX,NUMLOOP1: PUSH CXMOV CX,NUMLOOP2: LOOP LOOP2POP CXLOOP LOOP1POP CXPOPFRETFDELAY ENDPsingdo proc far;音阶do的发声及显示子程序do:mov dx,0ee20h ;分频初值mov al,7Dh ;doout dx,alMOV DX,0EE00H MOV AL,21H ;显示1OUT DX,ALCALL DELAYretfsingdo endpsingre proc far;音阶re的发声及显示子程序re:mov dx,0ee20h mov al,6FH ;reout dx,alMOV DX,0EE00H MOV AL,0F4H ;2OUT DX,ALCALL DELAYretfsingre endpsingmi proc far;音阶mi的发声及显示子程序mi:mov dx,0ee20hmov al,64H ;miout dx,alMOV DX,0EE00HMOV AL,0F1H ;3OUT DX,ALCALL DELAYretfsingmi endpsingfa proc far;音阶fa的发声及显示子程序fa:mov dx,0ee20hmov al,5EH ;faout dx,alMOV DX,0EE00H MOV AL,39H ;4OUT DX,ALCALL DELAYretfsingfa endpsingso proc far;音阶so的发声及显示子程序so:mov dx,0ee20h mov al,53h ;soout dx,alMOV DX,0EE00H MOV AL,0D9H ;5CALL DELAYretfsingso endpsingla proc far;音阶la的发声及显示子程序la:mov dx,0ee20hmov al,4BH ;laout dx,alMOV DX,0EE00HMOV AL,0DDH ;6OUT DX,AL CALL DELAYretfsingla endpsingtiproc far;音阶ti的发声及显示子程序mov dx,0ee20h mov al,43H ;tiout dx,alMOV DX,0EE00H MOV AL,61H ;7OUT DX,ALCALL DELAY retfsingti endpsingdo2 proc far;音阶高音do的发声及显示子程序mov dx,0ee20h mov al,3fH ;high doout dx,alMOV DX,0EE00HMOV AL,23H ;1.OUT DX,ALCALL DELAYretfsingdo2 endpSTART PROC FARMOV AX,DATAMOV DS,AX INIT:mov dx,0ee23h ;8253初始化mov al,00010110B ;分频比小于255,mode3,二进制out dx,alMOV DX,0EE03H ;8255初始化A、B口均为方式0输出MOV AL,80HOUT DX,ALMOV DX,0EE01H ;设置数码管选通信号MOV AL,01HOUT DX,ALMOV DX,0EE00H ;显示清零MOV AL,00HOUT DX,ALcall singdocall singrecall singmicall singfacall singsocall singlacall singticall singdo2mov ah,0bh;检测键盘缓冲区int 21hOR AL,ALJNZ goonJMP INITgoon:mov ax,4c00h;返回DOSint 21hretSTART ENDPCODE ENDSEND START六、思考题写出8253计数初值、输入频率和输出频率的关系。答:输出频率 = 输入频率 / 8253计数分频七、心得体会与收获通过这次实验,我们学习了8253计数器的使用方法。8253的初始化,包括计数器的选择,计数初值的输入方式,计数初值的格式的设置。使用方式3来进行计数器的输出,作为分频器,据讲义上给出的各个音符的频率,以及8253计数器的输入频率,并通过公式:输出频率 = 输入频率 / 8253计数初值,计算各个音阶对应的计数初值。实际的编程中对于8253的控制字和初值设定需要按一定的步骤来逐步进行。8253的时钟信号是由500KHZ信号由8MHZ时钟经74LS393分频获得。通过本实验,我了解了8253的各种工作方式的特点,由8253的编程可以延伸出很多应用(函数发生器,计数器等等)。总之,这次实验加深了对8253结构与编程的理解。实验四 串行口 8251A实验一、实验目的 1了解串行通信的一般原理和8251A的工作原理 2初步了解RS232串行口标准及与TTL电路的连接方法; 3学会扩充8251A 的方法,并设计实现用8251A进行数据传输; 4掌握8251A 的编程方法。 二、实验内容: 自收自发:采用查询方式:将内存制定区域内存放的一批数据通过8251A的 TXD 发送出去,然后从RXD 接收回来,并在屏幕上或数码管上显示出来。如图 1连接线路,即: 18MHz 信号接分频器 74LS393 的 CLK 端(已接好) ,从 74LS393 的 Q4(250kHz)接8253的CLK;T/C 接地或接RESET2GATE接5V; 38253的OUT 和8251A的 TXC、RXC相连,作为发送时钟和接收时钟; 48251A 的CS和Y2相连,Y2地址为 EE40-EE47H; 58253的CS 和Y1相连,Y1地址为EE20-EE27H; 6用导线将TXD和 RXD相接,成为自发自收方式; 7CTS端必须为低电平(实验台中已接为低电平),8251A 才可想外发送信号,RTS、DTR、DSR 可不用。(但实验台中RTS、DTR、DSR均已接地)实验步骤: 1按原理图连接所需连线; 2在检测连线无误的情况下,方可开启电源。 3运行调试程序,发送数据被接收后应正确无误地显示出来。 提示:8251A数据口地址EE40H,控制口地址EE41H 8253控制口地址EE23H 8253通道0地址EE20H 8253通道1 地址EE21H 8253通道2地址EE22H三、程序流程图开始接收发送允许8253初始化 初值写入8251初始化方式控制字写入RxRDY=1?RECEIVEDISP键盘输入?TxRDY=1?SEND结束CX=0?Y Y Y N N Y N N 四、程序代码data segment;数据段num db 30h,31h,32h,33h ;0、1、2、3的ASCII码disp db 00hdata endsstack segment stack stackdb 100 dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackdelay proc farpushfpush cxmov cx,0FA0h ;4000次循环loop1: loop loop1pop cxpopfretfdelay endpstart proc farpu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论