微机原理和单片机实验报告 - 图文

更新时间:2024-05-21 02:01:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一汇编语言程序设计 1 分支程序设计实验

1.1.1 实验目的

1. 掌握分支程序的结构。

2. 掌握分支程序的设计、调试方法。

1.1.2 实验设备

PC机一台,TD-PITE实验装置一套。

1.1.3 实验内容

设计一数据块间的搬移程序。设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(成为目的数据块)。源数据块和目的数据块在存储中可能有三种情况,如图1.14所示。

0H0H源数据块目的数据块0H源数据块目的数据块目的数据块源数据块FFFFFHFFFFFHFFFFFH

(a)(b)(c)

图1.1 源数据块与目的数据块在存储中的位置情况

对于两个数据块分离的情况,如图1.1(a),数据的传送从数据块的首地址开始,或从

数据块的末地址开始均可。但是对于有重叠的情况,则要加以分析,否则重叠部分会因?搬移?而遭到破坏,可有如下结论:

当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图1.14(b)所示。

当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图1.14(c)所示。

实验程序流程图如图1.5所示。

开 始 源数据块首地址→SI 源数据块首地址→SI 搬移字节数→CX>> SI←[SI]+[CX]-1 DI←[DI]+[CX]-1DI←[(SI)] SI←[SI]-1 DI←[DI]-1CX←[CX]-1N[CX]=0?Y结 束[SI]>[DI]?DI←[(SI)] SI←[SI]+1 DI←[DI]+1CX←[CX]-1[CX]=0?YN

图1.5 程序流程图

1.1.4 实验程序如下(自己填写)

SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV CX, 0010H MOV SI, 3100H MOV DI, 3200H CMP SI, DI JA A2

ADD SI, CX ADD DI, CX DEC SI DEC DI

A1: MOV AL, [SI] MOV [DI], AL DEC SI DEC DI DEC CX JNE A1

JMP A3

A2: MOV AL, [SI] MOV [DI], AL INC SI INC DI DEC CX JNE A2 A3: JMP A3 CODE ENDS END START

1.1.5 实验步骤

1. 按流程图编写实验程序,经编译、链接无误后装入系统。 2. 用E命令在以SI为起始地址的单元中填入16个数。 3. 运行程序,待程序运行停止。

4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同。 5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。

·1.1.6 实验结果(自己填写)

图1-1-2

图1-1-2

图1-1-3 图1-1-4

2.循环程序设计实验

1.2.1 实验目的

1. 加深对循环结构的理解。

2. 掌握循环结构程序设计的方法以及调试方法。

1.2.2 实验设备

PC机一台,TD-PITE实验装置一套。

1.2.3 实验内容

计算S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止。 编写实验程序,计算上式的结果,参考流程图如图1.6所示。

开始1.2.4 实验程序(自己填写)

SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT [BL]→AL[BL]+1→BL ASSUME CS:CODE

START: MOV DX,0001H MOV BL,02H [AL]×[BL]→AX[DX]+[AX]→DX A1: MOV AL,BL

INC BL MUL BL [AX]>200? ADD DX,AX CMP AX,00C8H

结束 JNA A1

MOV AX,4C00H

INT 21H

CODE ENDS

END START 图1.6 程序流程图

1→DX2→BL1.2.5 实验步骤

(1)编写实验程序,编译、链接无误后装入系统。 (2)运行程序,待程序运行停止。

(3)运算结果存储在寄存器DX中,查看结果是否正确。

(4)可以改变N(N+1)的条件来验证程序功能是否正确,但要注意,结果若大于0FFFFH将产生数据溢出。

1.2.6 实验结果(自己填写)

1-2-1

实验二 8255并行接口实验

2.1 实验目的

1. 学习并掌握8255的工作方式及其应用。 2. 掌握8255典型应用电路的接法。

2.2 实验设备

PC机一台,TD-PITE实验装置一套。

2.3 实验内容

查询式输入输出实验。编写程序,使8255的A口为输入,B口为输出,完成拨动开关到数据灯的数据传输。要求将一开关设为总开关,由此开关来决定数据灯的显示是否随开关相应改变。

2.4 实验步骤

查询输入输出实验

本实验使8255端口A工作在方式0并作为输入口,端口B工作在方式0并作为输出口。用一组开关信号接入端口A,端口B输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入输出功能。具体实验步骤如下述:

(1)实验接线图如图2.1所示,按图连接实验线路图。 (2)编写实验程序,经编译、连接无误后装入系统。

(3)运行程序,改变拨动开关,同时观察LED显示,验证程序功能。

XD0D0......PA0K0......IOW#IOR#IOY1WRRDCSPB78255单元...D7系统总线...K7D0XD7D7开关及LEDPA7XA1XA2A0A1PB0显示单元 图2.1 8255基本输入输出实验接线图

2.5 实验程序(自己加)

SSTACK SEGMENT STACK DW 32 DUP(?) SSTACK ENDS CODE SEGMENT

ASSUME CS:CODE,SS:SSTACK START:MOV DX,0646H

MOV AL,90H OUT DX,AL

AA1:MOV DX,0640H IN AL,DX TEST AL,80H JZ AA1 CALL DELAY MOV DX,0642H OUT DX,AL JMP AA1

DELAY:PUSH CX MOV CX,0F00H AA2:PUSH AX POP AX LOOP AA2 POP CX RET

CODE ENDS END START

·2.6 实验结果(自己加)

图2-1

实验三. 8254定时/计数器应用实验

3.1 实验目的

1. 掌握8254的工作方式及应用编程。 2. 掌握8254典型应用电路的接法。

3.2 实验设备

PC机一台,TD-PITE实验装置一套。

3.3 实验内容

计数应用实验。编写程序,应用8254的计数功能,使用单次脉冲模拟计数,使每当按动‘KK1+’5次后,产生一次计数中断,并在屏幕上显示学号末两位。

3.4 实验单元电路图

8254实验单元电路图如下图所示:

XD0D04.7KVCCGATE0...XD7...D7系统总线CLK0XA1XA2A0A1OUT0IOW#IOR#IOY3WRRDCSKK1+单次脉冲单元8254单元MIR7图3.1 8254实验电路原理图 3.5实验程序(参考程序如下,大家改动)

实验程序清单(A82541.ASM) A8254 EQU 06C0H B8254 EQU 06C2H C8254 EQU 06C4H CON8254 EQU 06C6H

SSTACK SEGMENT STACK DW 32 DUP(?) SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE, SS:SSTACK START: PUSH DS

MOV AX, 0000H MOV DS, AX

MOV AX, OFFSET IRQ7 ;取中断入口地址 MOV SI, 003CH ;中断矢量地址

MOV [SI], AX ;填IRQ7的偏移矢量 MOV AX, CS ;段地址 MOV SI, 003EH

AA1: IRQ7: CODE MOV [SI], AX CLI POP DS

;初始化主片8259 MOV AL, 11H

OUT 20H, AL MOV AL, 08H

OUT 21H, AL MOV AL, 04H

OUT 21H, AL MOV AL, 01H

OUT 21H, AL MOV AL, 6FH OUT 21H, AL ;8254

MOV DX, CON8254 MOV AL, 10H OUT DX, AL MOV DX, A8254 MOV AL, 04H OUT DX, AL STI

JMP AA1 MOV DX, A8254 MOV AL, 04H OUT DX, AL MOV AX, 0131H INT 10H MOV AX, 0132H INT 10H MOV AL, 20H

OUT 20H, AL IRET ENDS END START

;填IRQ7的段地址矢量

;ICW1 ;ICW2 ;ICW3 ;ICW4 ;OCW1

;计数器0,方式0

;显示字符12

;中断结束命令

3.6 实验结果(自己加)

图3-1

实验四.数据采集实验

4.1 实验目的

1. 掌握8254的工作方式及应用编程。 2. 掌握8254典型应用电路的接法。

4.2 实验设备

PC机一台,TD-PITE实验装置一套。

4.3 实验内容

要求实现三角波的产生,并且用示波器查看波形

4.4 硬件连线图

4.5 实验程序(自己加)

4.6 验步骤(自己加)

4.7 实验结果(自己加)

图4-1

实验五求和程序设计(2学时)

5.1 实验目的

1.熟悉KEIL的软件使用环境及单片机C51语言编程;

2.掌握C51环境下内存地址的访问方法及循环程序的实现方法。

5.2 实验设备

PC机一台

5.3 实验内容

内容:编写十个字节求和程序。

要求:十个加数在片内RAM区20H~29H单元; 结果存放在片内RAM区30H,31H区。

5.4 实验程序

#include\

#define uchar unsigned char void main() {

uchar i,a,sum; a=0x20; sum=0;

for(i=0;i<10;i++) {

sum+=DBYTE[a]; a++; }

DBYTE[0x30]=sum; }

5.5 实验步骤

开机启动Keil C51软件进入μVision2 集成开发环境,确认89C51处于软件仿真状态。

完成程序的设计、编辑、编译、连接。

进入DEBUG方式,打开存储器Memory 1窗口,在窗口Address栏键入D:20H;点击鼠标右键,选择最后一项Modify Memory ,输入十个加数。 调试和运行程序并记录存储器Memory 1,D:30H窗口实验结果。

5.6 实验结果

图5-1

图5-2

实验六基于PROTEUS的60S倒计时器设计(2学时)

6.1 实验目的

1.熟悉PROTEUS的软件使用环境及单片机C51语言编程;

3.掌握C51环境下定时中断、并行接口及LED的显示方法。

6.2 实验设备

PC机一台

6.3 实验内容

60S倒计时器,利用LED显示秒数。

6.4 实验电路图

6.5 实验程序

#include

unsigned char num,t,n;

unsigned char code table[]={0xc0,0x90,0x80,0xf8 ,0x82,0x92, 0x99,0xb0,0xa4,0xf9}; unsigned char code table1[]={0x92,0x99,0xb0,0xa4,0xf9,0xc0}; void main() {

num=0; t=0;

TMOD=0x01;

TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; ET0=1; TR0=1; P0=0xc0; P2=0x82; while(1) {

if(t==20) { t=0; num++;

if(num==10) num=0;

P2=table[num]; if(num==1) {

P0=table1[n];

n++; } }

if(n==6) {

if(num==0) while(1); } } }

void exter0() interrupt 1 {

TH0=(65536-50000)/256; TL0=(65536-50000)%6; t++; }

6.6 实验结果

图6-6

实验七.外中断实验

7.1 实验目的

1. 掌握外中断的工作方式及应用编程。

2. 掌握并行接口及LED显示器的典型应用电路。

7.2 实验设备

PC机一台,TD-PITE实验装置一套。

7.3 实验内容

要求实现外部按键一次(利用KK1按键),LED显示器的值加1。

7.4 实验电路图

7.5 实验程序

#include #include

unsigned char code tabledu[]= {

0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x77, 0x7c,0x39,0x5e,0x79,0x71,0x00 };

unsigned char code tablewe[]= {

0xfe,0xfd,0xfb,0xf7,0xef,0xdf };

unsigned char x=0;

void delay(unsigned char x) {

unsigned char y; for(;x>0;x--)

for(y=112;y>0;y--);

}

void display(unsigned char ge) {

P1=tabledu[ge];

P2=tablewe[0]; //此处可修改第几位显示 delay(5); P1=0xff;

P1=tabledu[ge/10];

P2=tablewe[1]; //此处可修改第几位显示 delay(5); P1=0xff; }

void int0_isr() interrupt 0 {

x++;

if(x==100) x=0; display(x); }

void main() {

P1=0x00; IT0=1; EX0=1; //IT1=1; //EX1=1; EA=1; while(1) {

display(x); } }

7.6 实验结果

图7-1

实验八.静态存储器扩展实验

8.1 实验要求

1. 复习单片机扩展外部数据存储器的方法。 2. 复习常用数据存储器芯片的引脚功能。

8.2 实验设备

PC机一台,TD-PITE实验装置一套。

8.3 实验目的

1. 进一步熟悉单片机仿真实验软件Keil C51 调试硬件的方法。 2. 掌握单片机系统中存储器扩展的方法。

3. 掌握单片机内部RAM 和外部RAM 之间数据传送的特点。

8.4 实验内容

根据实验平台的单元电路,构建一个硬件系统,并编写实验程序实现如下功能:在单片机内部一段连续RAM 空间30H~3FH 中写入初值00H~0FH,然后将这16 个数传送到RAM 的0000H~000FH 中,最后再将外部RAM 的0000H~000FH 空间的内容传送到片内RAM 的40H~4FH 单元中。传送结果通过Keil C51 软件观察。

8.5 实验单元电路及连线

8.6 实验程序

#include sfr AUXR =0x8E; void main() {

unsigned char i; AUXR = 0x02;

for(i=0;i<=15;i++) DBYTE[0x30 + i]=i; for(i=0;i<=15;i++)

XBYTE[0x0000 + i] = DBYTE[0x30 + i]; for(i=0;i<=15;i++)

DBYTE[0x40 + i]=XBYTE[0x0000 + i]; while(1); }

8.7 实验步骤

1. 打开存储器观察窗口,在存储器#1 的Address 中输入D:0x30,在存储器#2 的Address 中输入X:0x0000 来监视存储器空间。

2. 可单步运行程序,观察存储器内容的变化,或在伪停机指令和处设置断点再运行程序,验证实验功能。

8.8 实验结果

图8-1

图8-2

图8-3

机 原 理 班级:姓名:赵伟学号:及 单 片 机 实 验 报 告

13050141

1305014112

本文来源:https://www.bwwdw.com/article/aid7.html

Top