《中国矿业大学计算机学院微机原理实验报告》由会员分享,可在线阅读,更多相关《中国矿业大学计算机学院微机原理实验报告(12页珍藏版)》请在金锄头文库上搜索。
1、微型计算机原理与接口技术实验报告学院:计算机科学与技术学院行政班级:2013级信息安全1班学号:姓名: 实验一一、 实验内容及要求1.将代码输入到HQFC中,将笑脸显示到屏幕上2.自己编写代码显示全部的控制符以及积分符、希腊字母等3.编写代码:根据键入的数字求得平方值,并在屏幕上输出二、关键代码及调试情况和完成过程1、输出笑脸的程序PROG SEGMENT ASSUME CS:PROG1START: MOV DL,1 ;将笑脸的ASCII码送入DLMOV AH,2 ;将功能号02送入AHINT 21H ;显示笑脸MOV AX,4C00HINT 21H ;返回dosPROG1 ENDSEND S
2、TART2、输出全部的控制符以及积分符、希腊字母等的程序CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV BL,00H ;设置初始值为0 MOV CX,256 ;设置循环次数为256PP: MOV DL,BL ;送入DL等待输出 MOV AH,2 ;调用功能号02 INT BX ;自增1,以待输出下一个码的字符 LOOP BX ;循环 MOV AX,4C00H INT 21HCODE ENDSEND START3、查表求平方值并输出的程序DATAS SEGMENTBUFFF DB 0AH,$TABLE DB 0,1,4,9,16,25,36,49,64
3、,81BUF DB PLEASE INPUT A NUMBER(09):,0DH,0AH,$BUFF DB 0AH,ERROR,0AH,$DATAS ENDCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS ;设置数据段 MOV DS,AXRE: MOV DX,OFFSET BUF ;取提示信息的偏移地址 MOV AH,09H ;调用功能号为9的功能 INT 21H MOV AH,01H ;DOS的1号功能调用,等待键入字符 INT 21H ;AL键入数字的ASCII码 CMP AL,2FH ;判断是否在范围内 JG RE2 ;若
4、在范围内便跳转ER: MOV DX,OFFSET BUFF ;调用功能号9提示错误信息 MOV AH,09H INT 21H JMP RERE2: CMP AL,39H ;判断是否在范围内 JG ER ;大于9则跳转提示错误信息并要求重新输入 AND AL,0FH ;AL高4位清0 MOV BX,OFFSET TABLE ;查表转换 MOV AH,0 MOV BX,AX MOV AL,BX MOV BL,0AH ;将除数10放入BL DIV BL ;AX的数做被除数除以BL里面的数 MOV DL,AL ;将商送入DL(十位数) OR DL,30H ;变为ASCII码 MOV BH,AH ;暂存
5、AH里面的数 MOV AH,02H ;调用功能号 输出 INT 21H MOV DL,BH ;输出个位数 OR DL,30H ;变为ASCII码 MOV AH,02H INT 21H MOV AH,4CH INT 21HCODES ENDSEND START 调试过程中并没有出现大问题,只是在第三个程序中判断输入的数是否符合范围的时候出现了问题,解决之后运行完美。三、问题及修改过程 在第3个程序中,判断输入的数是否在09的范围内时出现了问题,即下限(在这里用ASCII码表示)应为2FH而不是30H,如果不修改,则无法输出0的平方值,修改之后程序可以将0的平方值输出。四、心得体会本次实验主要体会
6、汇编语言的执行过程和编程方法,不需要与硬件相连接,减少了实验难度,通过本次实验的编程的过程,我比较细致地体会了编程的方法和技巧,对汇编语言有了初步的理解。实验二一、实验内容及要求 1.利用8255实现拨动开关体现在LED灯上。 2.利用8255编写程序,实现跑马灯 3.修改程序为跑马灯加上控制键二、关键代码及调试情况和完成过程 以上为课本的理论实验图,以下为实际的实验电路图。1、实现开关控制LED灯的程序CODE SEGMENTASSUME CS:CODESTART:MOV DX,283H ;控制字寄存器MOV AL,1001000B ;写入控制字,A口和B工作于方式0,A口输入,B口输出OU
7、T DX,AL TEST_IT:MOV DX,280H ;指向A口 IN AL,DX ;读入A口数据状态 MOV DX,281H ;指向B口 OUT DX,AL ;将从A口读入的值从B口输出MOV CX,65535 ;软延时DELAY:LOOP DELAYJMP TEST_IT ;循环检测该程序CODE ENDSEND START2、对8255编程实现跑马灯CODE SEGMENT ASSUME CS:CODESTART:MOV DX,283H ;指向控制字寄存器 MOV AX,90H ;输出控制字 OUT DX,AL MOV DX,281H ;指向B口并向B口输出状态 MOV AL,1H X
8、UN:OUT DX,ALROL AL,1 ;进行循环左移以实现跑马灯MOV BX,20H ;软延时 DELAY1: ;双层嵌套循环 MOV CX,65535 LOOP1:LOOP LOOP1 DEC BX JNZ DELAY1 JMP XUN ;循环此程序CODE ENDSEND START 3、对跑马灯加入控制键以实现开关控制跑马灯CODE SEGMENTASSUME CS:CODESTART:MOV AL,90H ;写入控制字MOV DX,283HOUT DX,ALMOV AL,01H ;对AL赋初值MOV AH,AL ;将AL中的值咱存在AH中T111:MOV DX,280H ;读入A口
9、状态IN AL,DXCMP AL,01H ;AL和1相比较JNZ T111 ;如果开关打开(即PA0为高电平则继续进行,否则继续循环检测)MOV AL,AH ;将咱存在AH中的值读入到AL中MOV DX,281H ;对B口输出状态OUT DX,ALROL AL,1 ;AL中的值循环左移MOV BX,20H ;软延时 DELAY1: ;双层嵌套循环 MOV CX,65535 LOOP1:LOOP LOOP1 DEC BX JNZ DELAY1MOV AH,AL ;将AL中的值暂存在AHJMP T111 ;循环此程序CODE ENDSEND START在调试中除有根线无法通讯以外未出现其他问题,换
10、线之后无问题.完成过程:将8255的片选信号连入地址口之后,将八路开关与A口相连,八个LED灯与B口相连,输入程序之后运行即可。三、问题及修改过程在编写第三个程序的时候,出现问题,原因是在检测开关状态时,AL中的值被改变,如果在这之前不将AL中的值暂存在其他寄存器中则无法继续跑马灯的运行。修改方法,将AL中的值暂存在AH中,检测开关后再将AH中的值输入到AL中。修改之后程序没有问题,运行情况良好。四、心得体会本次实验是初次对芯片进行编程,通过对8255的编程,本人初步掌握了对8255的编程方法,即先写控制字然后进行操作,通过对代码的调试实现了软件和硬件搭配运行完美的结果,收获颇多。实验三一、
11、实验内容及要求1.对8253编程,采用级联的方式实现LED灯1秒亮1秒灭。2.对8253编程,验证方式03.8253与8255相结合,实现跑马灯,其中延时由8253提供。二、关键代码及调试情况和完成过程1.对8253编程实现LED灯一秒亮一秒灭CODE SEGMENTASSUME CS:CODESTART:MOV AL,00110101B ;写控制字,选定通道0,先读/写计数器低字节,后读/写计数器高字MOV DX,283H ;节,选定方式2,采用BCD计数方式OUT DX,ALMOV AL,00HMOV DX,280HOUT DX,ALMOV AL,50H ;输出计数初值,5000,则OUT
12、0的输出频率为2MHZ5000=400HZOUT DX,ALMOV AL,01110111B ;写控制字,选定通道1, 先读/写计数器低字节,后读/写计数器高字MOV DX,283H ;节,选定方式3,采用BCD计数方式MOV AL,00HMOV DX,281HOUT DX,ALMOV AL,04H ;输出计数初值,400,则OUT1的输出频率为400HZ400=1HZ,即为1秒OUT DX,AL ; 的周期CODE ENDSEND START2.验证方式0由于此电路图较简单直接将OUT0接到LED灯上即可,不再画电路图.CODE SEGMENTASSUME CS:CODESTART:MOV AL,00110001BMOV DX,283HOUT DX,ALMOV DX,280H