《北京邮电大学微机原理与接口技术硬件实验报告》由会员分享,可在线阅读,更多相关《北京邮电大学微机原理与接口技术硬件实验报告(29页珍藏版)》请在金锄头文库上搜索。
1、1微原硬件实验报告班级:07118 班 学号:070547 班内序号:26 姓名:杨帆2实验一 熟悉实验环境及 IO 的使用一, 实验目的1. 通过实验了解和熟悉实验台的结构,功能及使用方法。 2. 通过实验掌握直接使用 Debug 的 I、O 命令来读写 IO 端口。 3. 学会 Debug 的使用及编写汇编程序二,实验内容1. 学习使用 Debug 命令,并用 I、O 命令直接对端口进行读写操作, 2.用汇编语言编写跑马灯程序。(使用 EDIT 编辑工具)实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。 B.通过输出端口控制灯的工作状态(低电平灯亮)三
2、,实验步骤1.实验板的 IO 端口地址为 EEE0H在 Debug 下 , I 是读命令。( 即读输入端口的状态- 拨码开关的状态 ) O 是写命令。(即向端口输出数据- 通过发光管来查看) 进入 Debug 后, 读端口 拨动实验台上八位拨码开关 输入 I 端口地址回车 屏幕显示 xx 表示从端口读出的内容,即八位开关的状态 ON 是 0,OFF 是 1 写端口输入 O 端口地址 xx (xx 表示要向端口输出的内容)回车查看实验台上的发光二极管状态,0 是灯亮,1 是灯灭。 2. 在 Debug 环境下,用 a 命令录入程序,用 g 命令运行CDebug -amov dx, 端口地址 mo
3、v al,输出内容 out dx, al 3mov ah, 0bhint 21h or al, al jz0100 int 20h -g 运行查看结果 ,修改输出内容 再运行查看结果 分析mov ah, 0bh int 21h or al, al jz0100 int 20h 该段程序的作用3.利用 EDIT 工具编写汇编写跑马灯程序程序 实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。B.通过输出端口控制灯的工作状态(低电平灯亮) CEDIT 文件名.asm录入程序 按 Alt 键 打开菜单 进行存盘或退出编译文件 CMASM 文件名 .asm连接文件
4、CLINK 文件名.obj运行文件 或用 Debug 进行调试。四,程序流程图4B e g i n点 亮 第 8 盏 灯调 用 延 时 子 程 序检 测 拨 码 开 关 状 态最 低 位 拨 码 开 关 被 打 开 ?向 右 依 次 点 亮 L E D 向 左 依 次 点 亮 L E D检 测 键 盘 缓 冲 区有 按 键 行 为 ?结 束 , 返 回 D O SN O Y E SN OY E S图表 1:实验 1 的程序流程图五,源程序代码DATA SEGMENT ;数据段BB DB 0FFH ;DATA ENDSSTACK SEGMENT PARA STACK STACK ;堆栈段DB 1
5、00 DUP(?)STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE, SS:STACK ,DS:DATABEGIN:MOV AX,DATAMOV DS,AX5MOV AX,STACKMOV SS,AXMOV BL,7FHBEG:MOV DX,0EEE0HMOV AL,BLOUT DX,AL ;点亮第 8 盏灯CALL COUNT ;延时MOV BL,ALIN AL,DXTEST AL,01H ;最低位拨码被按下?方向选择MOV AL,BLJZ RLRR: ROR AL,1 ;未按键,则向右点亮JMP R1RL:ROL AL,1 ;按下则向左点亮R1:MOV B
6、L,ALMOV AH,0BHINT 21H ;检查键盘缓冲区OR AL,ALJZ BEGMOV AX,4C00HINT 21HCOUNT PROC NEAR ;延时子程序PUSH AXMOV DX,0EEE0HIN AL,DX ;检测拨码状态MOV AH,0MOV BX,0ADD BX,AXPOP AXCOU1: MOV CX,0FFFFH6COU2: LOOP COU2COU3: DEC BX ;调速JNZ COU1RETCOUNT ENDPCODE ENDS END BEGIN六,思考题通过实验说明用 debug 中的 a 命令录入实验中给出的小程序中 ,有些语句可以不写出“h” 字符的原
7、因。通过观察可以发现,编码时,凡是十六进制数据都是要加 H 的,而地址则不用。这是因为编译时所能识别的数据有多种,为了保证编译正常进行,必须要告诉编译器数据的类型。而地址只有默认的16 进制形式,所以不需指定类型就能完成正确的编译,所以无须加H。 而在 DEBUG 环境下,它的默认数据格式就是十六进制的,所以就不需要写出“H”字符;否则通不过编译。七,实验收获和体会在这次实验中,我们初步熟悉了在 Debug 环境下使用 I/O 命令,实现了对拨码开关状态的读取以及对发光二极管亮灭的控制,即初步尝试了对于微机接口的控制。通过控制发光二极管的亮与灭,结合相关程序的设计,我们实现了一个简单的跑马灯程
8、序。结合查询拨码开关的状态,能够实现点亮发光二极管的方向、模式和速度的调整。这个跑马灯实验的程序使用的是简单的分支结构。这次实验的要点是对 I/O 接口译码电路的理解以及使用,通过在Debug 环境下的 I/O 命令,我们测试了外设功能,这使我们了解了地址与端口的对应情况,从而明确了跑马灯程序编写的流程和注意事项。通过该译码电路实验,我掌握了地址译码电路的设计方法和实现原理,对硬件的 I/O 接口技术有了进一步的认识。这次实验也为以后的实验打下了基础,特别是,应先理解了译码电路的工作原理,然后才能进行编程。7实验二 8255A 并行接口应用一, 实验目的1.掌握 8255A 的功能及方式 0、
9、1 的实现 2.熟悉 8255A 与 CPU 的接口 ,以及传输数据的工作原理及编程方法。 3.了解七段数码管显示数字的原理。 4.掌握同时显示多位数字的技术。二,实验内容在实验一的基础上学习 PIO 芯片(8255)编程应用,熟悉平台的主要内容。CS 用 Y0 (EE00H)(一) 简要说明 :在方式 0(输入/输出) 下,以 A 口为输出口,B 口为输出口, A 口接六个共阴极数码 管的八位段码,高电平点亮数码管的某一段, B 口接数码管的位选(即要使哪个数码管亮), 高电平选中某一位数码管点亮。8255A 中A 端口地址 EE00H B 端口地址 EE01HC 端口地址 EE02H控制地
10、址 EE03H 八段数码管的显示规律及数码管的位选规律自己查找,可用实验一中,学过的 I、O 命令来做。(二)6 位数码管静态显示 在数码管电路上静态地显示 6 位学号,当主机键盘按下任意键时,停止显示,返回 DOS。 提示:该电路 6 个数码管的同名阳极段已经复接,当段选寄存器寄存了一个字型编码之后,6 个数码管都有可能显示出相同的数字。如果要使 6 个数码管“同时”显示不同的数 字,必须采用扫描显示的方法,通过选位寄存器选择某一位数码管,显示其数字(对应段值 为 1),然后关闭此数码管,再选择下一位数码管进行显示;如果在一秒钟内,每一位数码 管都能显示 30 次以上,则人眼看到的是几位数码
11、管同时在显示。实验证明,在扫描显示过程中,每一位显示延迟 1ms 是最佳选择。8(三)6 位数码管动态显示要求在数码管电路 1-6 位数码管上按图 3.2 所示的规律,动态显示字符串 HELLO,当 主机键盘按下任意键时结束。二, 程序流程图程序一:静态显示学号8 2 5 5 初始化第 1 位输出 B X 延时第 2 位输出 B X + 1 延时第 3 位输出 B X + 2 延时第 4 位输出 B X + 3 延时第 5 位输出 B X + 4 延时第 6 位输出 B X + 5 延时键盘输入 ?退出当前输出字符地址赋给 B XY E SN O图表 2:静态显示学号的程序流程图9四,源程序代
12、码 程序一:显示静态学号DATA SEGMENT ;数据段SHOW DB 0EDH,61H,0EDH,0d9H,39H,61H;”0”,”7”,”0”,”5”,”4”,”7”COUNT EQU $-SHOWCAT DB 01H ;8 段数码管选通信号DATA ENDSSTACK SEGMENT STACKSTACKDB 100H DUP(?)STACK ENDS ;代码段CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AX NEXT: MOV
13、 CX,COUNT LEA BX,SHOWMOV CAT,01H ;最先点亮第 1 个数字AGAIN:MOV AL,80H ;8255 的方式选择MOV DX,0EE03H ;A 口方式 0 输出OUT DX,AL ;B 口方式 0 输出MOV AL,CATMOV DX,0EE01H ;B 口为数码管选通端口OUT DX,ALMOV AL,BXMOV DX,0EE00H ;A 口为 8 段数码管OUT DX,AL ;依次显示学号数字10MOV AL,00H MOV DX,0EE00HOUT DX,AL ;熄灭INC BXSHL CAT,1 ;左移点亮数字位置LOOP AGAINMOV AH,0
14、BH ;检测键盘缓冲区INT 21HOR AL,ALJZ NEXTRETSTART ENDPCODE ENDSEND START程序二:动态显示 HELLODATA SEGMENT ;数据段COUNTDOWN DW ? ;时延计数器SPDCOUNT DW 00H ;控速计数器LEDCOUNT DB 00H ;LED COUNTCATCOUNT DB 00H ;CAT COUNTTMP DB 00HLED DB ?CAT DB 01H ;数码管选通信号SPEED DW 0000HDATA ENDSSTACK SEGMENT STACK STACKDB 100 DUP(?)STACK ENDSCO
15、DE SEGMENT ;代码段ASSUME CS:CODE, DS:DATA, SS:STACK;延时子程序11DELAY1 PROCMOV COUNTDOWN,03FFHLOOPD: DEC COUNTDOWNJNZ LOOPDRETDELAY1 ENDP;给变量 LED 赋值的子程序ENCODE PROC;根据 LEDCOUNT 的当前值,给变量 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