文档库 最新最全的文档下载
当前位置:文档库 › 微机实验报告(含思考题)实验6

微机实验报告(含思考题)实验6

微机实验报告(含思考题)实验6
微机实验报告(含思考题)实验6

实验六

基于ARM的键盘及数码管驱动实验

1.掌握键盘及数码管驱动原理。

2.掌握ZLG7290芯片的使用方法。

3.掌握I2C总线的协议标准。

4.掌握Linux下键盘驱动的实现方法。

编写测试程序控制键盘和数码管。

1.了解ARM9处理器结构

2.了解i2c协议

硬件:ARM嵌入式开发平台,PC 机Pentium100 以上。

软件:PC机Linux操作系统+MINICOM +AMRLINUX开发环境

1、ZLG7290寄存器介绍

ZLG7290内部有16个8bits寄存器,访问这些寄存器需要通过I2C 总线接口来实现.访问内部寄存器要通过“I2C总线地址+子地址”的方式来实现。ZLG7290B 的I2C 总线器件地址是70H(写操作)和71H(读操作)。

? 键值寄存器Key(地址:01H)

如果某个普通键(K1~K56)被按下,则微控制器可以从键值寄存器Key中读取相应的键值1~56。如果微控制器发现ZLG7290 的INT 引脚产生了中断请求,而从Key 中读到的键值是0,则表示按下的可能是功能键。键值寄存器Key 的值在被读走后自动变成0。? 显示缓冲区DpRam0~DpRam7(地址:10H~17H)

DpRam0~DpRam7 这8 个寄存器的取值直接对应8个数码管的显示内容。每个寄存器的8 个位分别对应数码管的a,b,c,d,e,f,dp 段,MSB 对应a,LSB 对应dp。例如大写字母H 的字型数据为6EH(不带小数点)或6FH(带小数点)。

? 命令缓冲区CmdBuf0 和CmdBuf1(地址:07H 和08H)

通过向命令缓冲区写入相关的控制命令可以实现段寻址、下载显示数据、控制闪烁等功能。

2、ZLG7290控制命令介绍

寄存器CmdBuf0(地址:07H)和CmdBuf1(地址:08H)共同组成命令缓冲区。通过向命令缓冲区写入相关的控制命令可以实现段寻址、下载显示数据、控制闪烁等功能。

?

下载数据并译码(Download)

在指令格式中,高4 位的0110 是命令字段;A3A2A1A0 是数码管显示数据的位地址(其中A3 留作以后扩展之用,实际使用时取0 即可),位地址编号依次为0,1,2,3,4,5,6,7,代表8个数码管,dp 控制小数点是否点亮,0-点亮,1-熄灭;flash 表示是否要闪烁,0-正常显示,1-闪烁;d4d3d2d1d0 是要显示的数据,包括10 种数字和21 种字母。

? 闪烁控制(Flash)

在命令格式中,高4 位的0111 是命令字段;xxxx 表示无关位,通常取值0000;第2 字

节的Fn(n=0~7)控制数码管相应位的闪烁属性,0-正常显示,1-闪烁。复位后,所有位都不闪烁。

3、Linux下i2c驱动接口函数介绍

Linux为我们提供了一系列的接口函数,通过调用这些函数可以很方便的访问到我们的I2C设备,达到对它的操作和控制。在本实验中,就是通过调用这些函数,完成对zlg7290 内部寄存器的配置,从而驱动键盘和数码管按照我们需要的方式工作

? 打开设备:

在linux下编程实现对具体设备的操作,首先要做的就是打开要操作的设备文件,zlg7290 设备的设备文件是“/dev/zlg7290/0”。

具体实现函数是:

fd=open(“/dev/zlg7290/0”,O_RDWR)

? 向设备写数据:

具体实现过程是先写入要配置的寄存器的地址,然后写入要配置的值,具体实现函数是:unsigned char temp[2]; //定义一个数组用于存放要发送的数据,包括寄存器地址和要写入该寄存器内的值

temp[0]=address; //将要配置的寄存器的地址address写入temp[0]中。

temp[1]=data; //将要写入该寄存器中的值data写入//temp[1]中。

write(fd,temp,2); //用write函数向设备写入数据temp,首先写入地址address,然后写入值data。

配置一般的寄存器都是这个步骤,但是唯一例外的是配置命令寄存器cmdbuf0和

cmdbuf1,因为写入命令寄存器中的命令码均为16bit,因此需要通过两步完成对命令码的发送,具体实现代码如下:

unsigned char temp[3];

temp[0]=address;

temp[1]=cmd1; //要写入的命令码的高八位

temp[2]=cmd2; //要写入的命令码的低八位

write(fd,temp,3);

? 关闭设备:

close(fd);

1. 在数码管上显示数据有两种方法,一种方法是直接向8个数据缓冲区DpRam0~DpRam7写入数据分别控制每个数码管的8个独立led的亮灭,使其显示不同的数据。

2. 在数码管上显示数据的另一种方法是直接向命令寄存器cmdbuf0或cmdbuf1写入“下

载数据并译码”命令,直接控制数码管的显示内容,具体译码规则如表一所示。

3. 当某个按键被按下时,可以通过读取“键值寄存器Key(地址:01H)”的值来得到

键值,将所按键的键值显示在数码管上。

4. zlg7290提供数码管的闪烁功能,通过向命令寄存器发送闪烁控制命令可以控制某个

数码管闪烁。通过按键控制数码管的闪烁,具体功能是当按下键盘1-4时,控制数

码管1-4闪烁。

5.打开一个终端1,将四个源文件交叉编译成arm下的可执行文件example1-example4 (具体参见实验五一些步骤)

6.重新打开一个终端2,输入命令minicom进入ARM开发板的命令行界面,检查硬

件是否连接好后,上电开发板,进入ARM-linux操作系统的命令行。

7.在终端2的ARM-linux操作系统的命令行下依次运行example1-example4可执行程序,观察结果。

步骤1程序:

#include

#include

#include

#include

//#include "i2c.h"

#define ZLG7290_ADDR_DpRam0 0x10

int fd;

void zlg7290_disp(unsigned char *buf, unsigned char num);

int main()

{

int ret,i;

unsigned char buf[8];

fd = open("/dev/zlg7290/0", O_RDWR);

if(fd == -1)

{

printf("Can't open I2C device!\n");

exit(-1);

}

buf[7] = 0xe0;

buf[6] = 0xbe;

buf[5] = 0xb6;

buf[4] = 0x66;

buf[3] = 0xf2;

buf[2] = 0xda;

buf[1] = 0x60;

buf[0] = 0xfc;

zlg7290_disp(buf, 8);

close(fd);

return 0;

}

/****************************************************************************** ***************************

** Function name: zlg7290_disp

** Descriptions: control zlg7290 to driver led

**

** Input: unsigned char *buf: display buffer

unsigned char num: display number

** Output: NULL

******************************************************************************* *************************/

void zlg7290_disp(unsigned char *buf, unsigned char num)

{

unsigned char i;

unsigned char temp[2];

for(i=0;i

{

temp[0] = ZLG7290_ADDR_DpRam0+i;

temp[1] = *buf;

write(fd, temp, 2);

buf++;

usleep(5000);

}

}

/**************************************************************************

** End Of File

**************************************************************************/

步骤2程序:

#include

#include

#include

#include

//#include "i2c.h"

#define ZLG7290_ADDR_cmdbuf0 0x07

int fd;

void zlg7290_disp(unsigned char *buf, unsigned char num);

int main()

{

int ret,i;

unsigned char buf[8];

fd = open("/dev/zlg7290/0", O_RDWR);

if(fd == -1)

{

printf("Can't open I2C device!\n");

exit(-1);

}

buf[7] = 0x07;

buf[6] = 0x06;

buf[5] = 0x05;

buf[4] = 0x04;

buf[3] = 0x03;

buf[2] = 0x02;

buf[1] = 0x01;

buf[0] = 0x00;

zlg7290_disp(buf, 8);

close(fd);

return 0;

}

/****************************************************************************** ***************************

** Function name: zlg7290_disp

** Descriptions: control zlg7290 to driver led

**

** Input: unsigned char *buf: display buffer

unsigned char num: display number

** Output: NULL

******************************************************************************* *************************/

void zlg7290_disp(unsigned char *buf, unsigned char num)

{

unsigned char i;

unsigned char temp[2];

for(i=0;i

{

temp[0] = ZLG7290_ADDR_cmdbuf0;

temp[1] = 0x60+i;

temp[2] = *buf;

buf++;

write(fd, temp, 3);

usleep(5000);

}

}

/************************************************************************** ** End Of File

**************************************************************************/ 步骤3程序:

#include

#include

#include

#include

//#include "i2c.h"

int fd;

int zlg7290_getkey(char *key);

void zlg7290_disp(unsigned char *buf, unsigned char num);

int main()

{

int ret,i;

unsigned char buf[9];

char key;

fd = open("/dev/zlg7290/0", O_RDWR);

if(fd == -1)

{

printf("Can't open I2C device!\n");

exit(-1);

}

zlg7290_disp(buf, 8);

for (;;)

{

if (zlg7290_getkey(&key) != 0)

{

printf("Read key value fail\n");

exit(-1);

}

buf[0]=key%10;

buf[1]=key/10;

zlg7290_disp(buf, 2);

usleep(1000000);

}

close(fd);

return 0;

}

/****************************************************************************** ***************************

** Function name: zlg7290_getkey

** Descriptions: get the key value from zlg7290

**

** Input: unsigned short *key: the gotten key value

** Output: 0 : OK -1: fail

******************************************************************************* *************************/

int zlg7290_getkey(char *key)

{

unsigned char temp[2];

temp[0] = 1;

temp[1] = 0;

if (write(fd, temp, 1) != 1)

return -1;

if (read(fd, temp, 2) != 2)

return -1;

*key = temp[0] + (temp[1] * 256);

return 0;

}

/****************************************************************************** ***************************

** Function name: zlg7290_disp

** Descriptions: control zlg7290 to driver led

** 鎺у埗zlg7290椹卞姩led

** Input: unsigned char *buf: display buffer

unsigned char num: display number

** Output: NULL

******************************************************************************* *************************/

void zlg7290_disp(unsigned char *buf, unsigned char num)

{

unsigned char i;

unsigned char temp[3];

for(i=0; i

{

temp[0] = 0x07;

temp[1] = 0x60+i;

temp[2] = *buf;

buf++;

write(fd, temp, 3);

usleep(5000);

}

}

/**************************************************************************

** End Of File

**************************************************************************/

1. I2C总线数据传输的基本格式?

答:从左到右依次为:

S:起始位(START);

SA:从机地址(Slave Address),7 位从机地址;

W:写标志位(Write),1 位写标志;

R:读标志位(Read),1 位读标志;

A:应答位(Acknowledge),1 位应答;

?:非应答位(Not Acknowledge),1 位非应答;

D:数据(Data),每个数据都必须是8 位;

P:停止位(STOP);

2. 要实现控制数码管闪烁的功能,除了向命令寄存器中写入“闪烁控制命令”以外,还有什

么办法可以完成?

答:向命令寄存器中写入Download指令,其具体值为0110xxxx x10xxxxx.

3. 怎么修改数码管闪烁的快慢和时间?

答:修改闪烁控制寄存器

FlashOnOff(地址:0CH)的值,复位值为0111,0111B。高4 位表

示闪烁时亮的持续时间,低4位表示闪烁时灭的持续时间。值为00H时频率最高。本实验实现了基于ARM的键盘及数码管驱动。

微机系统实验报告

西安电子科技大学 实验报告

实验一汇编语言编程实验 一、实验目的 (1)掌握汇编语言的编程方法 (2)掌握 DOS 功能调用的使用方法 (3)掌握汇编语言程序的调试运行过程 二、实验设备 PC 机一台。 三、实验内容 1. 将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。 2. 在屏幕上显示自己的学号姓名信息。 3. 循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。 4. 自主设计输入显示信息,完成编程与调试,演示实验结果。 四、实验源码 DA TA SEGMENT DISCHA DB'WangHan 14030188004',0AH,0DH,'$' TAB DB' ',0AH,0DH,'$' BLANK DB' $' DA TA ENDS STACK SEGMENT STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK START: MOV AX,SEG DISCHA MOV DS,AX MOV DX,OFFSET DISCHA MOV AH,09H INT 21H NEXT: MOV AH,01H INT 21H CMP AL,'Q' JE ENDSS

CMP AL,'q' JE ENDSS MOV BL,AL MOV AX,SEG BLANK MOV DS,AX MOV DX,OFFSET BLANK MOV AH,09H INT 21H MOV BH,0AH MOV DL,BL MOV CL,04H SHR DL,CL CMP DL,BH JNL Q3 JMP Q2 Q1: ADD DL,07H Q2: ADD DL,30H MOV AH,02H INT 21H MOV DL,BL MOV DH,0FH AND DL,DH CMP DL,BH JNL Q3 JMP Q4 Q3: ADD DL,07H Q4: ADD DL,30H MOV AH,02H INT 21H MOV AX,SEG TAB MOV DS,AX MOV DX,OFFSET TAB MOV AH,09H INT 21H MOV CX,0009H LOOP NEXT

【微机实验报告(含思考题)河畔下的哈】实验3

电子科技大学 实验报告 学号学生姓名: 课程名称: 任课老师: 实验项目名称

实验三 ARM汇编实现串口通信实验 【实验目的】 1.掌握ARM 的串行口工作原理。 2.学习编程实现ARM和PC机的UART通信。 3.掌握ARM裸机下汇编语言编程方法。 【实验内容】 1.学习串行通信原理,了解串行通信控制寄存器。 2.编程实现ARM 和计算机之间的串行通信。 【预备知识】 1、ARM汇编基础 2、ARM处理器通用IO口的操作 【实验设备和工具】 ?硬件:ARM嵌入式开发平台,PC 机一台,并口线,串口线,JTAG板 ?软件:RVDS,H-JTAG 【实验原理】 1.异步串行I/O 异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O 可以减少信号连线,最少用一对线(输入,输出)即可进行。 2.串口通信流程 串口通信就是读写寄存器的操作,通过配置相关寄存器,查询寄存器就可以操作串口通信。需要配置的寄存器有系统时钟,UART行控制寄存器,UART控制寄存器,UART FIFO控制寄存器,UART MODEM控制寄存器,UART波特率控制寄存器;需要查询的寄存器是发送/接收状态寄存器。 【实验步骤】 1. 打开CodeWarrior for RVDS,建立一个工程,通过查S3C2440处理器手册的UART通信寄存器,serialcommutication.s文件中添加代码实现串口通信传输 2. 设置工程配置选项,Language Setting->Realview Assembler和Realview Compiler中的Architecture设置为ARM920T,配置RVDS下的连接器Linker->Realview Linker中的RO Base 为0x30000000

微机原理实验报告

西安交通大学实验报告 课程_微机与接口技术第页共页 系别__生物医学工程_________实验日期:年月日 专业班级_____组别_____交报告日期:年月日 姓名__ 学号__报告退发 ( 订正、重做 ) 同组人_教师审批签字 实验一汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。编程并显示结果: 如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子

程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH 四、实验代码及结果 1.1、实验代码: DATA SEGMENT SZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOW DB 'THE MAX IS: ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX MOV DX,OFFSET SHOW ;调用DOS显示字符串 MOV AH,09H INT 21H MOV SI ,OFFSET SZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DH NEXT: MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DH NEXT1: INC SI ;偏移地址加1 LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H NEXT2: MOV CL,4 ROL DH,CL ;将DH循环右移四位

计算机操作系统 实验报告

操作系统实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 成绩: 2014年 1 月 1 日

实验一线程的状态和转换(5分) 1 实验目的和要求 目的:熟悉线程的状态及其转换,理解线程状态转换与线程调度的关系。 要求: (1)跟踪调试EOS线程在各种状态间的转换过程,分析EOS中线程状态及其转换的相关源代码; (2)修改EOS的源代码,为线程增加挂起状态。 2 完成的实验内容 2.1 EOS线程状态转换过程的跟踪与源代码分析 (分析EOS中线程状态及其转换的核心源代码,说明EOS定义的线程状态以及状态转换的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等) 1.EOS 准备了一个控制台命令“loop ”,这个命令的命令函数是 ke/sysproc.c 文件中的ConsoleCmdLoop 函数(第797行,在此函数中使用 LoopThreadFunction 函数(第755 行)创建了一个优先级为 8 的线程(后面简称为“loop 线程”),该线程会在控制台中不停的(死循环)输出该线程的ID和执行计数,执行计数会不停的增长以表示该线程在不停的运行。loop命令执行的效果可以参见下图: 2. 线程由阻塞状态进入就绪状态 (1)在虚拟机窗口中按下一次空格键。 (2)此时EOS会在PspUnwaitThread函数中的断点处中断。在“调试”菜单中选择“快速监视”,在快速监视对话框的表达式编辑框中输入表达式“*Thread”,然后点击“重新计算”按钮,即可查看线程控制块(TCB)中的信息。其中State域的值为3(Waiting),双向链表项StateListEntry的Next和Prev指针的值都不为0,说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中;StartAddr域的值为IopConsoleDispatchThread,说明这个线程就是控制台派遣线程。 (3)关闭快速监视对话框,激活“调用堆栈”窗口。根据当前的调用堆栈,可以看到是由键盘中断服务程序(KdbIsr)进入的。当按下空格键后,就会发生键盘中断,从而触发键盘中断服务程序。在该服务程序的最后中会唤醒控制台派遣线程,将键盘事件派遣到活动的控制台。 (4)在“调用堆栈”窗口中双击PspWakeThread函数对应的堆栈项。可以看到在此函数中连续调用了PspUnwaitThread函数和PspReadyThread函数,从而使处于阻塞状态的控制台派遣线程进入就绪状态。 (5)在“调用堆栈”窗口中双击PspUnwaitThread函数对应的堆栈项,先来看看此函数是如何改变线程状态的。按F10单步调试直到此函数的最后,然后再从快速监视对

微机实验报告(1)

《微机实验》报告 实验名称 KeilC的使用与汇编语言上机操作 指导教师刘小英 专业班级中法1201 姓名肖洋学号 U3 联系电话 一、任务要求 1.掌握KeilC环境的使用 1)字节拆分、合并:调试程序,观察相关寄存器和单元的内容。 2)数据块填充:调试程序,观察相关寄存器和单元的内容。 2. 编写两个十六位数的加法程序。 有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八 位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。 二、设计思路 1.字节拆分、合并程序:利用汇编语言中的 XCHD 和 SWAP 两个语句来实现将八位二进制 数拆分为两个四位二进制数并分别存储于不同的存储空间的功能,BCD 码与 30H 相或(加 上 30H)得到 ASCII 码。将两个 ASCII 码和 0FH 相与(高四位清零)得到 BCD 码,利 用 SWAP 语句将高位数放至高四位,将高位数和低位数相或可实现字节的合并。 2.数据块填充程序:将 R0 用作计数器,DPTR 用作片外数据指针,A 作为原始数据来源, 依顺序在片外的存储单元内容填充数据。利用循环语句来减少程序长度,并控制填充单 元个数为片外 100H 个。(通过 R0 的进位控制) 3.两个十六位数加法程序:把第一个十六位无符号数的地八位和高八位分别存于 20H 和 21H 中,把第二个十六位无符号数的地八位和高八位分别存于 30H 和 31H 中,对 20H 和 30H 中的两个低八位进行 ADD 加法操作,结果存于 R4 中;然后对 21H 和 31H 中的两 个高八位进行 ADDC 带进位的加法操作,结果存于 R3 中.然后将累加器 A 清零,并和#00H

微机原理实验报告

汇编语言程序设计实验 一、实验内容 1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、 调试与运行等步骤。 2.参考书例4-8,P165 (第3版161页)以单步形式观察程序的 执行过程。 3.修改该程序,求出10个数中的最大值和最小值。以单步形式观 察,如何求出最大值、最小值。 4.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态。 二、实验目的 1.学习并掌握IDE86集成开发环境的使用 2.熟悉汇编语言的基本算法,并实际操作 3.学会利用IDE86进行debug的步骤 三、实验方法 1.求出10个数中的最大值和最小值 (1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比 较,把二者中大的交换放后面。在对第二个和第三个数比较,把 二者中较大的交换放后面,依此类推直到第十个数字。这样第十 位数就是10个数里面最大的。然后选出剩下9个数字里面最大 的,还是从头开始这么做,直到第九个数字。以此类推直到第一 个数字。

(2)流程图 2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态

(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行 100次循环,sum=sum+I,每次循环对i加1. (2)流程图: 四、 1.求出10个数中的最大值和最小值

DSEG SEGMENT NUM DB -1,-4,0,1,-2,5,-6,10,4,0 ;待比较数字 DSEG ENDS CODE SEGMENT ASSUME DS:DSEG,CS:CODE START:MOV AX,DSEG MOV DS,AX LEA SI,NUM MOV DX,SI MOV CL,9 ;大循环计数寄存器初始化 NEXT1:MOV BL,CL ;大循环开始,小循环计数器初始化MOV SI,DX NEXT2:MOV AL,[SI+1] CMP [SI],AL ;比较 JGGONE ;如果后面大于前面跳到小循环末尾CHANGE:MOV AH,[SI] ;交换 MOV [SI+1],AH MOV [SI],AL JMP GONE GONE:add SI,1 DEC BL JNZ NEXT2

微机汇编语言编程系统实验报告

微机系统实验报告 实验一汇编语言编程实验 一、实验目的 (1)掌握汇编语言的编程方法 (2)掌握DOS功能调用的使用方法 (3)掌握汇编语言程序的调试运行过程 二、实验设备 PC机一台。 三、实验内容 (1)将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。 (2) 在屏幕上显示自己的学号姓名信息。 (3)循环从键盘读入字符并回显在屏幕上,然后显示

出对应字符的ASCII码,直到输入“Q”或“q”时结束。 (4)自主设计输入显示信息,完成编程与调试,演示实验结果。 考核方式:完成实验内容(1)(2)(3)通过, 完成实验内容(4)优秀。 实验中使用的DOS功能调用:INT 21H 表3-1-1 显示实验中可使用DOS功能调用

四、实验步骤 (1)运行QTHPCI软件,根据实验内容编写程序,参考程序流程如图3-1-1所示。 (2)使用“项目”菜单中的“编译”或“编译连接”命令对实验程序进行编译、连接。

(3)“调试”菜单中的“进行调试”命令进入Debug调试,观察调试过程中数据传输指令执行后各寄存器及数据区的内容。按F9连续运行。 (4)更改数据区的数据,考察程序的正确性。 五、实验程序 DATA SEGMENT BUFFER DB '03121370konglingling:',0AH,0DH,'$' BUFFER2 DB 'aAbBcC','$' BUFFER3 DB 0AH,0DH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX mov ah,09h mov DX,OFFSET BUFFER int 21h MOV SI,OFFSET BUFFER2

微机实验报告

微机实验报告 标准化文件发布号:(9312-EUATWW-MWUB-WUNN-INNUL-DQQTY-

第一次实验 实验01 I/O端口地址译码实验 一、实验目的 掌握I/O地址译码电路的工作原理。 二、实验原理 1、实验电路如原理图所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址”输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,…… 当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,290H OUT DX,AL(或IN AL,DX) Y2输出一个负脉冲,执行下面两条指令: MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲。 (II型机) 2. 接线 II型机: I/O 地址/Y2(290H---297H) 接 D 触发器/CLK I/O 地址/Y4(2A0H---2A7H) 接 D 触发器/CD D 触发器/D 接 D 触发器/SD 接+5V D 触发器/Q 接逻辑笔或L7 I型机: I/O 地址/Y4 接 D 触发器/CLK I/O 地址/Y5 接 D 触发器/CD

…… 三、实验内容 利用负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。 四、实验内容实现分析 分析实验连接图;说明实现该内容的原理;画出流程图。 五、实验程序 DATA SEGMENT OUTPORT1 EQU 290H OUTPORT2 EQU 2A0H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA

华科_计算机系统实验报告

课程实验报告课程名称:计算机系统基础 专业班级: 学号: 姓名: 指导教师: 报告日期:年月日 计算机科学与技术学院

目录 实验1: (1) 实验2: (7) 实验3: (24) 实验总结 (34)

实验1:数据表示 1.1 实验概述 实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。 实验目标:加深对数据二进制编码表示的了解。 实验要求:使用有限类型和数量的运算操作实现一组给定功能的函数。 实验语言:c。 实验环境:linux 1.2 实验内容 需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。 1)位操作 表1列出了bits.c中一组操作和测试位组的函数。其中,“级别”栏指出各函数的难度等级(对应于该函数的实验分值),“功能”栏给出函数应实现的输出(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请查看bits.c中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用的操作符的最大数量。 你也可参考tests.c中对应的测试函数来了解所需实现的功能,但是注意这些测试函数并不满足目标函数必须遵循的编码约束条件,只能用做关于目标函数正确行为的参考。 表1 位操作题目列表

2)补码运算 表2列出了bits.c中一组使用整数的补码表示的函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。 表2 补码运算题目列表 3)浮点数操作 表3列出了bits.c中一组浮点数二进制表示的操作函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。注意float_abs的输入参数和返回结果(以及float_f2i函数的输入参数)均为unsigned int类型,但应作为单精度浮点数解释其32 bit二进制表示对应的值。 表3 浮点数操作题目列表

微机原理实验报告6

8254定时/计数器应用实验 1.实验目的: (1)、掌握8254的工作方式及应用编程。 (2)、掌握8254的典型应用电路接法。 2.实验设备: PC微机一台、TD-PIT+ 实验系统一套。 3.实验内容: (1)、计数应用实验。编写程序,应用8254的计数功能,用开关模拟计数,使每当按动KK1-五次后,产生一次计数中断,并在屏幕上显示一个字符‘5’。 (2)、定时应用实验。编写程序,应用8254的定时功能,实现一个秒表计时并在屏幕上显示。 4.实验说明及步骤: (1)定时应用实验: 编写程序,将8254的计数器2设置为方式3,用1.8432MHz作为CLK2时钟,计数值为64H,OUT2输出为18.432KHz的时钟。将OUT2连接到计数器0的CLK0,设置计数器0也工作在方式3,计数值为18432,相当于18432分频,则在OUT0得到1Hz的输出。参考程序流程如图5-2所示。 图5-2 8254定时应用实验接线图 实验步骤如下: a确认从PC机引出的两根扁平电缆已经连接在实验平台上。 b首先运行CHECK程序,查看I/O空间始地址。

c利用查出的地址编写程序,然后编译链接。 d参考图5-2所示连接实验线路。 e运行程序,看数据灯显示是否正确。 8254定时应用实验代码输出1Hz ;*** *********根据查看端口资源修改下列符号值******************* IOY0 EQU 9C00H ;************************************************************** **** MY8254_COUNT0 EQU IOY0+00H*4 ;8254计数器0端口地址MY8254_COUNT1 EQU IOY0+01H*4 ;8254计数器1端口地址MY8254_COUNT2 EQU IOY0+02H*4 ;8254计数器2端口地址MY8254_MODE EQU IOY0+03H*4 ;8254控制寄存器端口地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE START: MOV DX,MY8254_MODE ;初始化8254工作方式MOV AL,0B6H ;计数器2,方式3 OUT DX,AL MOV DX,MY8254_COUNT2 ;装入计数初值 MOV AL,64H ;100分频 OUT DX,AL MOV AL,00H OUT DX,AL MOV DX,MY8254_MODE ;初始化8254工作方式

微机实验报告

实验报告 课程名称微型计算机系统原理及应用(第五版)实验课时 实验项目汇编语言实现c=a+b 实验时间 1 指导老师实验成绩 实验目的(本次上机实验所涉及并要求掌握的知识点)熟练掌握编写汇编语言源程序的基本方法和基本框架熟练使用debug调试程序 掌握用Dos功能调用,实现字符的输入与显示 汇编语言实现c=a+b 实验环境DosBox 0.74 实验内容汇编语言程序上机——通过键盘输入两个数(两个数相加不超9),两数相加后输出在屏幕上步骤: 汇编语言的汇编过程 程序运行步骤及生成的文件 (1)编辑程序(try1.asm文件) myfile.asm 编辑程序 汇编程序 链接程序 myfile.crf otherfiles.obj myfile.lst myfile.obj myfile.map myfile.exe 编辑汇编链接 无错 编辑程序 EDIT 可执行文件 EXE 二进制目标文件 OBJ 源程序 ASM 有错

在dos界面下输入try1 *.asm可以看到d盘中的masm文件夹下有try1.asm文件 (2)汇编程序 给list文件命名:try1 引用文件名可以默认, 会发现无警告性错误,也无致命性错误 在无错的情况下汇编成二进制文件try1.obj

(3)链接程序 (4)执行程序 总结(对上机实验结果进行分析,上机心得体会及改进意见通过本次上机,我学习到了如下内容: (1)我对汇编语言的汇编与执行一个程序有了一定了解 首先用notepad(不只是notepad) 编辑程序,将其放于masm文件夹下。然后,在dos环境下通过“masm 文件名.asm”命令生成汇编语言源程序文件(ASM文件)。源程序不能被计算机直接执行,所以要经过汇编程序加以翻译,这个翻译过程称为编译过程或汇编过程,就是把源程序文件翻译成二进制代码所表示的目标文件——OBJ文件。若源程序中有语法错误,则汇编结束后,汇编程序将指出源文件中的语法错误,就需要重新使用编辑程序来修正源程序中的语法错误,直至得到无误的ASM文件和OBJ文件。若无错,OBJ文件虽然已是二进制机器指令码的形式,但计算机仍不能直接执行,还必须用“link 文件名”命令把目标文件与库文件或其它目标文件进行链接和在内存中重新定位,生成可直接执行文件(EXE文件)。这时的EXE文件才可以由DOS装入内存储器并运行。通过“文件名.exe”命令即可运行程序。 (2)我对常用的dos功能调用有了一定了解 1号调用——单字符调用 通过键盘输入字符,将字符的ASCII码送入寄存器AL中,并在屏幕上显示该字符 2号调用——单字符显示 将DL寄存器中的字符送显示器显示 9号调用——显示字符串 将当前内存缓冲区中以‘$’结尾的字符串送显示器显示。 0a号调用——回车 0d号调用——换行 存在的问题: 分别输入两个数后,必须要分别将各自的高位屏蔽,如果不屏蔽结果就输出符号(错误的),但是我想既然是两个加起来不大于9的数相加,那是否屏蔽高位应该没有影响吧?这里有疑问

微机原理与单片机实验报告

北京联合大学信息学院实验报告 课程名称:微型计算机原理学号: 姓名: 2012 年 6 月 9 日

目录 实验1 EMU8086模拟器的使用 (3) 实验2 数据传送指令的使用 (5) 实验3 多位十六进制加法运算实验 (9) 实验5 循环程序实验 (11) 实验6 由1 到100 求和实验 (13) 实验7 求表中正数_负数_0 的个数实验 (14) 实验8 数据排列实验(冒泡排序) (16) 实验9 系统功能调用(大小写转换) (18) 实验10 阶乘(递归运算) (20) 实验11 ProteusIO工程文件的建立 (21) 实验12 IO口读写实验(245、373) (22) 实验13 8255 接口实验 (24) 实验14 声光报警 (25) 实验总结 (28)

实验1 EMU8086模拟器的使用 一实验要求 利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的: 熟悉EMU8086实验环境 三EMU8086环境: 1 模拟器编辑窗口 2 模拟器调试窗口

四实验内容 实验内容1:新建文件。 运行emu8086 1. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码: MOV AX, 1020H MOV BX, 2030H MOV AX, BX ADD AX, BX MOV [BX], AX MOV [2032H], AX HLT 2. 编译:单击“编译”按钮,对程序段进行编译; 3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。 4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。 5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。 6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。 7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为400毫秒,单击“全速”按钮,运行程序, 8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容 9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序

华中科技大学计算机操作系统实验报告

实验目的 掌握Linux操作系统的使用方法; 了解Linux系统内核代码结构; 掌握实例操作系统的实现方法。 一、实验要求 1、掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux 下的编程环境。 ●编一个C程序,其内容为实现文件拷贝的功能; ●编一个C程序,其内容为分窗口同时显示三个并发进程的运行结 果。要求用到Linux下的图形库。 2、掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。 另编写一个应用程序,调用新增加的系统调用。 实现的功能是:文件拷贝; 3、掌握增加设备驱动程序的方法。通过模块方法,增加一个新的设备驱动 程序,其功能可以简单。 实现字符设备的驱动; 4、了解和掌握/proc文件系统的特点和使用方法 ●了解/proc文件的特点和使用方法 ●监控系统状态,显示系统中若干部件使用情况 ●用图形界面实现系统监控状态。 5、设计并实现一个模拟的文件系统(选作) 二、实验一 1、编一个C程序,其内容为实现文件拷贝的功能 要实现文件拷贝功能,主要用到的函数是fopen、fputc、fgetc。 主要用到的头文件: #include #include 设计思路:由scanf函数获取2个文件名,根据其文件名和路径分别打开该2个文件,设置一个循环,从源文件复制1个字节到目 的文件,直到源文件指针到文件尾,最后关闭2个文件。 在可能出错的地方需要加上相应的报错代码,并输出错误信息,以方便调试。 理清楚设计思路后,首先搭建linux下编程环境。 安装gcc:sudo apt-get install build-essential 安装codeblocks:sudo apt-get install codeblocks 在集成开发环境Code::Blocks IDE下根据需求写出相应的源代码copy.c,将程序编译并生成exe可执行文件。 然后手动创建一个测试文件test.txt ,运行copy.exe文件,并输入

微机原理实验报告

大学 科技学院 实 验 报 告 课程名称:微机原理实验

实验一数据转换实验 一、实验目的 (1)初步掌握在PC机上建立、汇编、链接和运行8086/88汇编语言程序的过程。 (2)通过对两个验证性试验的阅读、调试、掌握不同进制数及编码相互转换的程序设计方法。 (3)完成程序设计题,加深对数码转换的理解,了解简单程序设计方法。 二、实验内容 1.十六进制数转换为ASCII码 设二字节十六进制数存放于其实地址为3500H的内存单元中,把他们转换成ASCII码后,再分别存入起始地址为350A的四个内存单元中。从书上ASCII码表中可知十六进制数加30H即可得到0H~9H的ASCII码,而要得到AH~FH 的ASCII码,则需再加7H。 请根据所给流程图理清思路,总结出对应的若干要点。将流程图与参考程序相互。根据分析的结果将运行时内存的变化列写出来。 学习并使用MASM或WAVE仿真软件分析程序运行过程中相关寄存器及相应内存的变化情况来验证自己的猜想,以巩固命令的学习,提高编程能力。

图1-1-1

DATAS SEGMENT ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV CX,0004H;根据转换个数设定循环次数 ;(两字节十六进制数如6B2C对应有四个用十六进制表示的ASCII码表示,即四个字节) MOV DI,3500H;指向该两字节十六进制数起始地址,此时在调试窗口修改内存字节 MOV DX,[DI];将地址3500H中的内容(6B2C)给DX A1: MOV AX,DX;第一次时DX=6B2C, ;因为想顺序取C、2、6、B,所以需要一个中间变量AND AX,000FH;取低四位,第一次取到C, CMP AL,0AH;判断AL属于0~9,还是A~F JB A2;如果是0~9,则跳转到A2 ADD AL,07H;若属于A~F,再加上07H后也是再加上30H即得到转换。 A2: ADD AL,30H;0~9的ASCII码对应的十六进制比其 ;本身(注意:亦是十六进制)大30H MOV [DI+0AH],AL;将转码后的C,即43H给350A INC DI;将DI指向下一字节,用于存储转码后的值,第一次自增后要存‘2’ PUSH CX;功能是接下来要用到CX作为一个中间变量, ;而刚才已经使用并且接下来还会用到CX的值, ;也可以不用CX,用其他不用的寄存器或者直接立即数形式的。 MOV CL,04H;若直接用立即数,可能不稳定,(原因不详)用一个中间变量。

微机原理实验报告

微机原理与接口技术 实验指导书 班级 学号 099074 工业大学计算机学院

实验一存贮器读写实验 一、实验容 对指定地址区间的RAM(4000H~4FFH)先进行写数据55AAH,然后将其容读出再写到5000H~5FFH中。 二、实验步骤 l、将实验系统与PC机连接; 2、在PC机上启功DJ-8086k软件,实验系统进入联机状态; 3、在DJ-8086k软件环境下编辑、调试程序,将程序调试、编译通过; 4、运行程序。 5、稍后按RST键退出,用存贮器读方法检查4000H~43FFH中的容和5000~53FFH中的容应都是55AA。 三、实验程序清单 CODE SEGMENT ;RAM.ASM ASSUME CS:CODE PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 ORG 1850h START: JMP START0 BUF DB ?,?,?,?,?,? data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0 c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH START0: MOV AX,0H MOV DS,AX MOV BX,4000H MOV AX,55AAH MOV CX,0200H RAMW1: MOV DS:[BX],AX ADD BX,0002H LOOP RAMW1 MOV AX,4000H MOV SI,AX

MOV AX,5000H MOV DI,AX MOV CX,0400H CLD REP MOVSB call buf1 mov cx,0ffh con1: push cx call disp pop cx loop con1 call buf2 con2: call disp jmp con2 DISP: MOV AL,0FFH ;00H MOV DX,PA OUT DX,AL MOV CL,0DFH ;20H ;显示子程序 ,5ms MOV BX,OFFSET BUF DIS1: MOV AL,[BX] MOV AH,00H PUSH BX MOV BX,OFFSET DATA1 ADD BX,AX MOV AL,[BX] POP BX MOV DX,PB OUT DX,AL MOV AL,CL MOV DX,PA OUT DX,AL PUSH CX DIS2: MOV CX,00A0H LOOP $ POP CX CMP CL,0FEH ;01H JZ LX1 INC BX ROR CL,1 ;SHR CL,1 JMP DIS1 LX1: MOV AL,0FFH MOV DX,PB OUT DX,AL RET

微机系统的组装与配置实验报告

微机系统的组装与配置实验报告

计算机学院综合性实验 实验报告 课程名称微机与外设维护维修技术 实验学期 2015 至 2016 学年第 2 学期 学生所在院系计算机学院 年级 2013 专业班级计 学生姓名学号 2013 任课教师 实验成绩 计算机学院制

一、硬件拆卸部分 1、主板的型号及功能、性能说明: 主板是电脑系统中最大的一块电路板,主板上布满了各种电子元件、插槽、接口等。它为CPU、内存和各种功能(声、图、通信、网络、TV、SCSI等)卡提供安装插座(槽);为各种磁、光存储设备、打印机和扫描仪等I/O设备以及数码相机、摄像头、调制解调器等多媒体和通讯设备提供接口,实际上电脑通过主板将CPU等各种器件和外部设备有机地结合起来形成一套完整的系统。 主板的标准结构是根据主板上各元器件的布局排列方式、主板的尺寸大小及形状、所使用的电源规格等。 目前市场上PC的主板主要有ATX、Micro ATX和BTX等结构。 2、CPU的型号及功能、性能说明: 中央处理器(CPU)是一块超大规模集成电路芯片,它是整个计算机系统的核心。CPU主要包括运算器、控制器和寄存器三个部件。这三个部件相互协调,使他们可以进行分析、判断、运算并控制计算机各部分协调工作。其中运算器主要完成各种算术运算和逻辑运算;而控制器是指挥中心,控制运算器及其他部件工作,它能对指令进行分析,作出相应的控制;寄存器用来暂时存放运算中的中间结果或数据。 CPU的性能指标: 字长或位数; 主频、外频、FSB频率; 高速缓冲存储器; 指令扩展技术; CPU的制造工艺; CPU的核心代号; 超线程技术; 多核心技术; 虚拟化技术; 可信执行技术。 3、硬盘的型号及功能、性能说明: 硬盘主要是有固定面板、控制电路板、磁头组、盘面组、主轴电机、接口、及其附件组成。其中磁头组和盘片组件是构成硬盘的核心,它们被封装在硬盘的净化腔体内,包括浮动磁头组件、磁头驱动机构、盘片组、主轴驱动装置级读写控制电路几个部分。 温切斯特硬盘的特点:磁盘旋转,磁头径向运动,磁头悬浮在磁片上方,用磁存储信息。 磁盘技术: RAID技术(廉价磁盘冗余阵列),使用磁盘驱动器的方法,是将一组磁盘驱动器用某种逻辑方式联系起来,作为逻辑上的一个大容量磁盘驱动器来使用。(RAID0、RAID1、RAID0+1、RAID3、RAID5模式);

实验报告计算机操作系统-windows7

实验报告计算机操作系统-Windows 7 班级 178 学号姓名 【实验目的】 1. 掌握Windows 7的基本操作; 2. 熟练掌握资源管理器、文件与文件夹的管理方法 3. Windows 7控制面板的使用 【实验内容和步骤】 一.Windows7基本操作和文件管理 完成实践教程第18页中的实验并回答下列问题。 1.如何新建文件或文件夹 在桌面空白处单击鼠标右键,选择“新建”--“文件夹”,键入新文件夹的名称,然后按 ENTER 键。 2.如何选定多个相邻文件或文件夹如何选定多个不相邻文件和文件夹如何选中全部文件和文件夹 选定多个相邻文件的操作是:单击第一个文件,然后按住Shift 键,再单击最后一个文件 Shift 键,就是Ctrl 键上面那个。 选定多个不相邻文件操作是:单击第一个文件,然后按住Ctrl 键的同时,单击其他待选定的文件 Ctrl 键,就是键盘最左下角那个。 如何选中全部文件和文件夹:ctrl+A 3.试列举对文件/文件夹进行复制和移动的方法

第一种方法:可以用鼠标右键进行操作。 第二种:可用ctrl+c 进行复制;ctrl+x 进行移动(也就是剪切)ctrl+v进行粘贴 4.如何对已删除的文件进行“还原” 如果没清空回收站,在回收站里还原就行。 5.如何对按照修改日期搜索文件或文件夹 我的电脑右键选搜索,打开搜索界面,在搜索选项里按日期,选中并输入日期 6.如何“隐藏”文件/文件夹如何显示被“隐藏”起来的文件/文件夹图标 把想隐藏文件的文件夹或文件,打开文件夹属性,隐藏打钩或去掉即可以选择这个文件是否隐藏或显示打开任意的文件夹的工具选项卡的文件夹选项——查看选项卡——隐藏文件和文件夹上面有2个选择,选择显示隐藏文件夹即可看到隐藏文件 二.Windows7系统设置 完成实践教程第23页中的实验并回答下列问题。 1.如何改变桌面的背景、屏幕的分辨率并设置屏幕保护程序。 开始—控制面板—外观和个性化—个性化,然后进行桌面背景、窗口颜色、屏幕保护调整。

微机原理实验报告

目录 软件实验部分: 实验一清零程序 实验二拆字程序 实验三拼字程序 实验四数据区传送子程序 实验五数据排序实验 实验六查找相同数个数 实验七无符号双字节快速乘法子程序 实验八多分支程序 实验九脉冲计数(定时/计数器实验) 实验十电脑时钟(定时器、中断综合实验) 硬件实验部分: 实验一 P1口亮灯实验 实验二 P1口转弯灯实验 实验三 P3.3口输入,P1口输出 实验四工业顺序控制 实验五继电器控制 实验六 8255控制交通灯 实验七 LED16×16点阵显示实验 实验八串并转换实验 实验九 A/D转换实验 实验十 D/A转换 实验十一电子音响 实验十二步进电机控制 实验十三 8032串行口应用实验㈠——双机通信 实验十四小直流电机调速实验 软件实验部分 本节共编了十个软件实验,通过这些实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。 本节提供的软件实验,涉及外部数据存储器扩展寻址操作,因此需按下图连接实验线路。

1.将存储器单元的D0—D7总线接口用8芯扁平线与数据总线单元D0—D7的任一接口相连,存储器单元的A0—A7地址接口与地址总线单元(低8)A0—A7的任一接口相连,存储器单元的A8—A12地址接口与地址总线单元(高8)A8—A12的任一接口相连。注意外部扩充的数据区的有效范围。 2.存储器单元的WE/PGM插孔与六位LED左下方的IOWE插孔相连。 3.存储器单元的OE插孔与六位LED左下方的IORD插孔相连。 4.存储器单元的CS1插孔与六位LED右下方的IOWE插孔相连。 实验一清零程序 一、实验目的 掌握汇编语言设计和调试方法,熟悉键盘操作。 二、实验内容 把2000H-20FFH的内容清零 三、程序框图 四、实验步骤 用连续或单步方式运行程序,检查2000-20FF中执行程序前后的内容变化。 五、思考 假使把2000H-20FFH中的内容改成FF,如何修改程序。 接P1.0到L1,试编写程序,对片外数据存储器6264进行读写操作,若L1闪动则表示6264RAM读写正常。(此思考题也可留在硬件实验中做) ORG 0640H

微机原理实验报告冒泡排序

一、实验目的 (1)学习汇编语言循环结构语句的特点,重点掌握冒泡排序的方法。 (2)理解并掌握各种指令的功能,编写完整的汇编源程序。 (3)进一步熟悉DEBUG的调试命令,运用DEBUG进行调试汇编语言程序。 二、实验内容及要求 (1)实验内容:从键盘输入五个有符号数,用冒泡排序法将其按从小到大的顺序排序。 (2)实验要求: ①编制程序,对这组数进行排序并输出原数据及排序后的数据; ②利用DEBUG调试工具,用D0命令,查瞧排序前后内存数据的变化; ③去掉最大值与最小值,求出其余值的平均值,输出最大值、最小值与平均值; ④用压栈PUSH与出栈POP指令,将平均值按位逐个输出; ⑤将平均值转化为二进制串,并将这组二进制串输出; ⑥所有数据输出前要用字符串的输出指令进行输出提示,所有数据结果能清晰显示。 三、程序流程图Array (1)主程序:MAIN

(2)

就是 NAME BUBBLE_SORT DATA SEGMENT ARRAY DW 5 DUP(?) ;输入数据的存储单元 COUNT DW 5 TWO DW 2 FLAG1 DW 0 ;判断符号标志 FLAG2 DB 0 ;判断首位就是否为零的标志FAULT DW -1 ;判断出错标志 CR DB 0DH,0AH,'$' STR1 DB 'Please input five numbers seperated with space and finished with Enter:','$' STR2 DB 'The original numbers:','$' STR3 DB 'The sorted numbers:','$' STR4 DB 'The Min:','$' STR5 DB 'The Max:','$' STR6 DB 'The Average:','$' STR7 DB 'The binary system of the average :','$' STR8 DB 'Input error!Please input again!''$' DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA,ES:DATA START: PUSH DS AND AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA DX,STR1 MOV AH,09H ;9号DOS功能调用,提示输入数据 INT 21H CALL CRLF ;回车换行 REIN: CALL INPUT ;调用INPUT子程序,输入原始数据CMP AX,FAULT ;判断就是否出错, JE REIN ;出错则重新输入

相关文档