文档库 最新最全的文档下载
当前位置:文档库 › 实验四_循环结构汇编语言程序设计实验报告

实验四_循环结构汇编语言程序设计实验报告

实验四_循环结构汇编语言程序设计实验报告
实验四_循环结构汇编语言程序设计实验报告

循环结构汇编语言程序设计实验报告

实验四循环结构汇编语言程序设计

一、实验目

1、学习循环结构的汇编语言程序的设计和调试。

2、学习通过直接对8086计算机的寄存器和内存的直接访问,编写更高效简洁

的汇编程序。

3、加深掌握计算机整体的工作过程。

3、加深对排序算法的理解。

二、实验任

编写程序求出数组 A 中(20 个元素)的最大值和最小值(数组没有排序)。

要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell 排序、插入排序、冒泡排序、交换排序、选择排序、基数排序??) 三、实验内容

,我们根据情况选取以下两种方式实为了更好地实现老师所布置的实验任

验。

1、利用冒泡排序的方式求解数组 A 中元素的最大值最小值。设计流程图如

下所示:

2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示:

四、实验环境

PC 机:winXP/win7(32 位)/win7(64 位)+winxp 虚拟机

汇编工具:Masm.exe+Link.exe。

五、实验步骤

1)建立和生成的文件

(1)编写的源程序,源程序名为abc、扩展名为.asm

(2)源程序经汇编程序Masm.exe 汇编(翻译)后生成二进制目标程序,文件名为abc.obj

(3)目标程序需要经Link.exe 连接生成可执行程序,文件名为abc.exe

2)汇编环境

最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如huibian)中,并将文件夹huibian 放在硬盘根目录>下

3)上机步骤

进入DOS窗口中执行。

4)调试程序

进入DEBUG 后,调试程序

5)调试成功后重新汇编、连接并生成可执行代码

6)执行程序,并对运行结果截图。

利用冒泡排序求得数组 A 中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48)

利用选择排序对数组 A 中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)

六、实验心得

通过本次循环结构汇编语言程序设计的实验,我初步了解了汇编语言的基本语法,利用汇编语言的循环结构实现了对于数组A中元素的排序以及求得元素中的最大值最小值。另外,在实验过程中,我也了解到了,我们要时刻细心严谨,

认真做好每一步,避免出现低级错误。

七、汇编语言代码

1、利用冒泡排序实现求最大值最小值的代码

data segment

mes1 db 'the max:$'

mes2 db 'the min:$'

a dw 13,0,59,900,587,1,657,234,34,48 data ends

code segment

main proc far

assume cs:code,ds:data

start:

push ds

sub ax,ax

push ax

mov ax,data

mov ds,ax

;以下是起泡排序核心代码

mov cx,10

dec cx

loop1:

mov di,cx

mov bx,0

loop2:

mov ax,a[bx]

cmp a[bx+2],ax

jge cotinue

xchg ax,a[bx+2]

mov a[bx],ax

cotinue:

add bx,2

loop loop2

mov cx,di

loop loop1

mov dx,offset mes1

mov ah,09h

int 21h

mov bx,a[18]

call bini ; 转换为十进制的子程序

mov dx,offset mes2

mov ah,09h

int 21h

mov bx,a[0]

call bini

ret

main endp

bini proc near

mov cx,10000d

call bin

mov cx,1000d

call bin

mov cx,100d

call bin

mov cx,10d

call bin

mov cx,1d

call bin

ret

bini endp

bin proc near

mov ax,bx

mov dx,0

div cx

mov bx,dx

mov dl,al

add dl,30h

mov ah,02h

int 21h

ret

bin endp

crlf proc near

mov dl,0ah

mov ah,02h

int 21h

mov dl,0dh

mov ah,02h

int 21

ret

crlf endp

code ends

end start

2、利用选择排序实现排序的代码

SAVEREG macro

push ax

push bx

push cx

push dx

push si

push di

endm

RESAVEREG macro

pop di

pop si

pop dx

pop cx

pop bx

pop ax

endm

;************************

data segment

arr dw 13,20,59,900,587,1,657,234,34,48

n dw 18

m dw 10

data ends

;************************

code segment

;------------------------

main proc far

assume cs:code, ds:data

start:

push ds

sub ax, ax

push ax

mov ax, data

mov ds, ax

;------------

;sort

;------------

;si,di index

;ax temp

mov si, 0

mov di, 0

loop1:

cmp si, n

jge OUTER1

;init loop2

mov ax, si

add ax, 2

mov di, ax

loop2:

cmp di, n

jg OUTER2

mov ax, arr[si]

cmp ax, arr[di]

jle DO_NOTHING

xchg ax, arr[di]

mov arr[si], ax

DO_NOTHING:

add di, 2

jmp loop2

OUTER2:

add si, 2

jmp loop1

OUTER1:

mov cx, m

mov di, 0

PRINT_LOOP:

mov ax, arr[di]

mov dx, 0

call print_dec

add di, 2

loop PRINT_LOOP

;read key from the keyboard

mov ah, 0

int 16h

ret

;---------------------

;get_oct function

;must pass ax, dx

print_dec proc near

SAVEREG

mov cx, 0

mov bx, 10

GET_NUM_LOOP:

div bx

push dx

mov dx, 0

inc cx

cmp ax, 0

jne GET_NUM_LOOP

PRINT:

pop dx

add dx, 30h

mov ah, 02h

int 21h

loop PRINT

;enter and change line

mov dl, 0dh

mov ah, 02h

int 21h

mov dl, 0ah

mov ah, 02h

int 21h

RESAVEREG

ret

print_dec endp

main endp

;------------------------

code ends

;************************

end start

循环结构程序设计(C语言实验报告)

仲恺农业工程学院实验报告纸 信息学院(院、系) 专业 班 C 语言程序设计 课 实验目的: (1)熟练掌握用三种循环语句实现循环的方法。 (2)掌握在程序设计中用循环方法实现的一些常用算法。 (3)进一步学习调试程序。 实验内容与总结: 编程练习 1、打印出所有“水仙花数”——教材P129-6.6 程序如下: #include void main() { int i,j,k,n; for(n=100;n<1000;n++) { i=n/100; j=(n-i*100)/10; k=n-i*100-j*10; if(n==i*i*i+j*j*j+k*k*k) printf("水仙花数为:%d\n",n); } } (1)程序编制要点: ①用for 语句实现循环; ②立方的表示; ③if 语句的表达。 (2)该题目涉及的知识点和难点: ①for 语句的输入与使用; ②if 语句的使用。 2、用迭代法求a x = 。求平方根的公式为:)(211n n n x a x x +=+ 程序如下:

#include #include void main () { float x1,x2=1,a; printf("请输入求平方跟的数a="); scanf("%f",&a); do { x1=x2; x2=(x1+a/x1)/2; } while (fabs(x2-x1)>1e-5); printf("x的平方根是:%f\n",x2); } (1)程序编制要点: ①用do…while语句实现循环; ②平方根公式的输入; ③前后两次求出的x的差的绝对值小于1E-5。 (2)该题目涉及的知识点和难点: ①scanf函数,求绝对值函数fabs; ②do…while语句的输入与使用。 3、猜数字:编程先由计算机“想”一个1到100之间的整数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则结束游戏。 程序如下: #include #include /*使用srand和rand函数*/ #include /*使用time函数*/ void main() { int magic,guess,count=0; srand(time(NULL)); magic = rand() % 100 + 1; /*magic得到一个1到100的随机数*/ printf("请输入一个1到100之间的数,你共有10次机会:\n"); do { scanf("%d",&guess); count++; if((guess<=0)||(guess>=100))

左右来回循环的流水灯实验报告

青 岛 科 技 大 学 微机原理与接口技术综合课程设计(报告) 题 目 __________________________________ 指导教师__________________________ 学生姓名__________________________ 学生学号__________________________ _______________________________ 院(部)____________________________ 专业________________班 ______年 ___月 ___日 直流电机控制综合实验 周艳平 宋雪英 01 信息科学技术学院 计算机科学与技术0961 2012 12 27

摘要 (2) 1、单片机概述 (2) 2、仿真软件介绍 (2) 3、需求分析 (3) 一、课程设计目的 (3) 二、课程设计要求 (4) 三、实验内容 (4) 1、设计任务与要求 (4) 2、系统分析 (4) 1).硬件电路设计(画出原理图、接线图) (5) 2)软件框图 (7) 3、用keil建项目流程 (8) 4、程序清单 (9) 4、系统调试 (11) 四、设计总结(结论) (12)

摘要 近年来,随着电子技术和微型计算机的发展,单片机的档次不断提高,起应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到广泛的应用、成为现代电子系统中最重要的智能化的核心部件。而AT89C51就是其中一种,它是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMO8位微处理器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。本课程设计介绍一种LED小灯控制系统的设计方法,以单片机作为主控核心,与按键、排阻、电阻、电容等较少的辅助硬件电路相结合,利用软件实现对LED灯进行控制。能够通过按键控制8个LED小灯从左到右依次点亮。 关键字:单片机、LED流水灯 1、单片机概述 单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微 型计算机简称单片机,特别适用于控制领域,故又称为微控制器。 通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处 理器、存储器和I/O 接口电路等。因此,单片机只需要和适当的软件及外部设备相结合, 便可成为一个单片机控制系统。 单片机经过1、2、3、3 代的发展,目前单片机正朝着高性能和多品种方向发展,它 们的CPU 功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。 2、仿真软件介绍 (1).Keil uv3 运行Keil uv3

plc设计实验报告

学院:信息工程学院班级: 学号: 姓名:

实验一:了解PLC的硬件构成与特性和编 程软件的使用方法 一、实验目的: 1.熟悉LG—K10S1型PLC的构成及特性。 2.掌握基本指令的使用方法。 3. 掌握PLC程序的编制和调试方法。 二、实验步骤: 1.按图接线;开关量输入信号/输出信号。 2.检查无误后,上电运行。 三、掌握PLC编程软件的使用方法: 1) 用户可以在KGL-DOS 或者GSIKGL中使用的程序,参数,变量/注释也适用与KGL for Windows。 2) PLC 系统由工程[Project]结构 KGL for Windows把用户自定义程序当成一个包括参数和变量/注释的工程[Project]来管理。 同时有允许用户把程序(*.PRG),参数*(.PMT),,变量(*.VAR),注释(*.CNT)各自保存起来,是这些单独的文件应用到别的工程[Project]中。 3) 用户友好接口 为创建,编辑和监视提供简单的和友好的接口。 4) 在线编辑 在在线方式下可以获得实时编辑。在在线条件下编辑的程序可以自动的下载、而不必停止PLC的硬件。 5) 从PLC监视信息 用户可以轻易的监视PLC的状态如:错误状态,网络信息和系统信息。 6) 调试和自诊断(LG MASTER-K系列) 在精确调试中可以得到取样跟踪,触发和强制I/O Enable。

实验二:多重输入电路及其拓展电路的编程、下载、调试 一、实验目的: 理解典型电路的特性与设计方法,多点输入对输出的影响。 二、实验内容: 多重输入电路的编程、下载、调试 三、实验步骤: 将上述继电器线路图转化成梯形图并输入PLC,并由此进一步熟悉和掌握编程软件。 通过实验操作,观察输入P00、P01、P02、P03对输出P10的影响。并变换输入和输出接点实验。 P00、P02、P01、P03为常开接点。 当P00、P01接通时,P10亮蓝灯。 P00、P03接通时,P10输出。 P02、P01接通时,P10输出。 P02、P03接通时,P10输出。 P00、P02、P01接通时,P10输出。 P00、P02、P03接通时,P10输出。 P00、P01、P03接通时,P10输出。 P02、P01、P03接通时,P10输出。 P00、P02、P01、P03接通时,P10输出。

数据结构堆栈与队列实验报告

实验二堆栈和队列 实验目的: 1.熟悉栈这种特殊线性结构的特性; 2.熟练并掌握栈在顺序存储结构和链表存储结构下的基本运算; 3.熟悉队列这种特殊线性结构的特性; 3.熟练掌握队列在链表存储结构下的基本运算。 实验原理: 堆栈顺序存储结构下的基本算法; 堆栈链式存储结构下的基本算法; 队列顺序存储结构下的基本算法; 队列链式存储结构下的基本算法; 实验内容: 第一题链式堆栈设计。要求 (1)用链式堆栈设计实现堆栈,堆栈的操作集合要求包括:初始化StackInitiate(S),非空否StackNotEmpty(S),入栈StackiPush(S,x),出栈StackPop(S,d),取栈顶数据元素StackTop(S,d); (2)设计一个主函数对链式堆栈进行测试。测试方法为:依次把数据元素1,2,3,4,5入栈,然后出栈并在屏幕上显示出栈的数据元素; (3)定义数据元素的数据类型为如下形式的结构体, Typedef struct { char taskName[10]; int taskNo; }DataType; 首先设计一个包含5个数据元素的测试数据,然后设计一个主函数对链式堆栈进行测试,测试方法为:依次吧5个数据元素入栈,然后出栈并在屏幕上显示出栈的数据元素。 第二题对顺序循环队列,常规的设计方法是使用対尾指针和对头指针,对尾指针用于指示当前的対尾位置下标,对头指针用于指示当前的対头位置下标。现要求: (1)设计一个使用对头指针和计数器的顺序循环队列抽象数据类型,其中操作包括:初始化,入队列,出队列,取对头元素和判断队列是否为空; (2)编写主函数进行测试。 程序代码: 第一题: (1)源程序"LinStack.h"如下: #define NULL 0 typedef struct snode { DataType data; struct snode *next; } LSNode; /*(1)初始化StackInitiate(LSNode ** head) */ void StackInitiate(LSNode ** head) /*初始化带头结点链式堆栈*/

C语言程序设计实验报告(实验大纲+过程)

《C程序设计》实验教学大纲 一、适用范围 大纲适用信息管理专业本科教学使用。 二、课程名称 C程序设计 三、学时数与学分 总学时:90 总学分:4 实验学时:28 实验学分:1 四、教学目的和基本要求 目的:通过C程序设计实验,培养学生对学习程序设计的兴趣,加深对讲授内容的理解,尤其是通过上机来掌握语法规则,使学生全面了解 C 语言的特点,熟练掌握 C 语言程序设计的基本方法和编程技巧。 基本要求:了解和熟悉C语言程序开发的环境;学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。 注:带*的实验项目为选做实验项目 六、教材、讲义及参考书 《C程序设计题解与上机指导》谭浩强主编清华大学出版社 七、实验成绩评定办法 实验成绩=平时实验表现+实验报告。实验成绩占总成绩的20%。 实验成绩以等级形式给出,评定等级分优、良、中、及格、不及格五类。 1、平时考核:上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止。在实验中,教师可根据学生编程操作能力、观察和分析及运用知识能力、程序编制正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。

2、实验报告:学生实验后应按时完成实验报告。 八、实验教学大纲说明 本大纲共安排28学时的实验,其中带*号实验项目为选做实验项目,实际课时为18学时。实验项目多为设计性实验项目,每个设计性实验项目中都包含数个小的设计性题目,其中带*号的题目为选做题目,有时间和有能力的同学可以选做。 九、实验项目 实验一C程序的运行环境和运行一个C程序的方法 一、实验目的 1.了解Visual C++6.0编译系统的基本操作方法,学会独立使用该系统。 2.了解在该系统上如何编辑、编译、连接和运行一个C程序。 3.通过运行简单的C程序,初步了解C源程序的特点。 二、实验内容 1.用编辑程序,输入教材第一章例1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的? 2.编写一个C程序,输出以下信息: **************************** very good! **************************** 3.输入并运行教材第一章中例1.3,了解如何在运行时向程序变量输入数据。 实验二数据类型、运算符和表达式 一、实验目的 1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。 2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。 二、实验内容 1.输入并运行以下程序: main( ) { char c1,c2; c1=97;c2=98; pr intf(“%c %c\n”,c1,c2); printf(“%d %d\n”,c1,c2); } 在此基础上 ①将第三行、第四行改为: c1=321;c2=353; 再使之运行,分析其运行结果。 ②将第二行改为: int c1,c2; 再使之运行,分析其运行结果。。 2.输入并运行以下程序:

LED灯实验报告

mcs-51单片机接口技术实验 适用:电气类专业本科学生 实验报告 实验一熟悉proteus仿真模拟器,led花样表演 一、实验目的 掌握以下方法: 1.在proteus的环境下,设计硬件原理图; 2.在keilc集成环境下设计c51语言程序; 2.在proteus的环境下,将硬件原理图与软件联接仿真运行。 二、实验环境 1.个人微机,windows操作系统 2.proteus仿真模拟器 3.keilc编程 三、实验题目 基本题:使用8051的并口带动8个led发光二极管显示一种花样表演。提高题:使用一个键切换实现3种以上花样表演。 四、实验类型: 学习、模仿与简单设计型。 五、实验步骤: 0、进入isis,先选择需要的元件,然后设计电原理图,保存文件; 1、在keilc软件集成环境下编写源程序,编译工程文件; 2、将所设计的硬件原理图与目标代码程序相联接; 4、按play键,仿真运行程序。 附,可能用到的元件名称: cpu:at89c51或任一种mcs-51家族cpu; 晶振:crystal; 电容器:capacitors,选22pf 电解电容:cap-elec或genelect10u16v 复位电阻:minres10k 限流电阻:minres330r 按键:button led:led-blue/red/yellow或diode-led (一)接线图如下: (二).基础花样 (四)程序流程图 (五)c程序 #include <> #define uint unsigned int #define uchar unsigned char const tab1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, /*正向流水灯*/ 0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,};/*反向流水灯*/ const tab2[]={0xff,0x00,0xff,0x00,0xff,0x00,}; void delay() { uint i,j; for(i=0;i<256;i++) for(j=0;j<256;j++)

彩灯循环显示控制电路的设计与仿真EWB

南京信息工程大学实验(实习)报告 实验(实习)名称彩灯循环显示控制电路的设计与仿真实验(实习)日期 2012年11月16日得分指导教师裴晓芳 院电子与信息工程专业电子信息工程年级 10级班次2班姓名张蕾学号 20101305066 1.实验目的: 设计彩灯循环控制电路,要求该电路彩灯循环显示频率快慢可调,控制器具有8路输出。 2.实验内容: 彩灯由发光二极管模拟代替,该电路由555定时器、7490计数器和138译码器组成。7490计数器的时钟由555振荡器提供,改变555的振荡频率,即可以改变计数器的快慢,即可以控制彩灯闪烁的快慢。计数器的输出端作138译码器的输入信号,计数器输出不同数据,即可以控制138译码器得到8种不同的输出,控制彩灯的循环变化。 3.实验步骤: (1)根据电路图图1,从EWB元件器库中选择所需元器件,74LS138芯片、7490芯片、555发生器、发光二级管、电阻、电容、+Vdd电平、接地符号等连接电路,根据需要修改参数,完成后其文件名保存文件。 图1 (2)检查电路无误后,运行该电路观察发光二级管的闪烁情况,如图2所示。 图2

(3)改变555的振荡频率,重新运行电路,观察发光二极管的闪烁情况变化。进过实验,将1MΩ的电阻换为1KΩ的电阻,发现其闪烁的频率变快。 (4)给电路添加复位控制,复位按钮闭合彩灯输出,复位按钮断开彩灯熄灭,电路如图3所示,当space=0时,电路复位。 图3 4.实验分析和总结 通过实验,我学会了如何设计一个彩灯循环显示控制电路,掌握了芯片555定时器,7490计数器以及138译码器的工作原理,学会了创新设计,为以后的学习打下基础。

队列实验报告

一.实验项目名称 循环队列和链式队列的创建 二、实验目的 1、掌握队列的特点 (先进先出 FIFO) 及基本操作 ,如入队、出队等, 2、队列顺序存储结构、链式存储结构和循环队列的实现,以便在 实际问题背景下灵活应用。 三、实验内容 1.链式队列的实现和运算 2.循环队列的实现和运算 四、主要仪器设备及耗材 VC++6.0 运行环境实现其操作 五.程序算法 (1)循环队列操作的算法 1>进队列 Void enqueue (seqqueue &q, elemtype x) { if ((q.rear+1)%maxsize = = q.front) cout<< ” overflow”; else { q.rear=(q.rear+1)%maxsize; // 编号加 1 或循环回第一个单元 q.queue[q.rear]=x; } } 2>出队列 Void dlqueue(seqqueue &q ) { if (q.rear= =q.front)cout<< ” underflow”; else q.front =(q.front+1)%maxsize; } 3>取对头元素

elemtype gethead(seqqueue q ) { if(q.rear= =q.front) { cout<<” underflow;” return NULL;} else return q.queue[(q.front+1)%maxsize]; //front 指向队头前一个位置 } 4>判队列空否 int empty(seqqueue q ) { if (q.rear= =q.front) else return 0; reurn 1; } (2).链队列操作的算法 1>.链队列上的初始化 void INIQUEUE( linkqueue&s) {link *p; p=new link; p->next=NULL;//p 是结构体指针类型,用 s.front=p;//s 是结构体变量,用. s.rear=p;//头尾指针都指向头结点 -> } 2>.入队列 void push(linkqueue &s, elemtype x) { link*p;//p 是结构体指针类型,用-> p=new link; p->data=x; p->next=s.rear->next;//s 是结构体变量,用s.rear->next=p; s.rear=p;//插入最后 . } 3>判队空 int empty( linkqueue s ) {if (s.front= =s.rear) return 1; else return 0; } 4>.取队头元素 elemtype gethead( linkqueue s ) { if (s.front= =s.rear) else retuen return NULL; s.front->next->data; }

分支与循环程序设计实验报告

分支与循环程序设计实验-报告

————————————————————————————————作者: ————————————————————————————————日期:

实验名称 分支与循环程序设计实验 指导教师 罗志祥 专业班级 光电1406 姓名 段昳晖 学号 U2014***** 联系电话 137******** 一、任务要求 1. 设有8bits 符号数X 存于外部RA M单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写完整程序。 264/2 106410 X X Y X X X X ?≥? =<

单片机实验报告——LED灯控制器

《微机实验》报告LED灯控制器 指导教师: 专业班级: 姓名: 学号: 联系方式:

一、任务要求 实验目的:加深对定时/计数器、中断、IO端口的理解,掌握定时/计数器、中断的应用编程技术及中断程序的调试方法。 实验内容:利用C8051F310单片机设计一个LED灯控制器 主要功能和技术指标要求: 1. LED灯外接于P0.0端。 2. LED灯分别按2Hz,1Hz和0.5Hz三种不同频率闪动,各持续10s。 3. 在LED灯开始和停止闪烁时蜂鸣器分别鸣响1次。 4. 利用单片机内部定时器定时,要求采用中断方式。 提高要求: 使用按键(KINT)控制LED灯闪烁模式的切换。 二、设计思路 C8051F310单片机片上晶振为24.5MHz,采用8分频后为3.0625MHz ,输入时钟信号为48个机器周期,所以T1定时器采用定时方式1,单次定时最长可以达到的时间为 1.027s,可以满足0.5Hz是的定时要求。 基础部分: 给TMOD赋值10H,即选用T1定时器采用定时方式1,三种频率对应的半周期时间为0.25s、0.5s、1s。计算得需给TH1和TL1为C1H、B1H;83H、63H;06H、C6H。 要使闪烁持续10s,三种模式需要各循环40、20、10次。 用LOOP3:MOV C,PSW.5 ;PSW.5为标志位,进定时器中断后置一 JNC LOOP3 代替踏步程序等待中断,以便中断完后回到主程序继续向下执行。 为了减少代码长度,可以采用循环结构,循环主题中,将R1、R2分别赋给TH1、TL1,R7为循环次数(用DJNZ语句实现);定时中断里,重新给TH1、TL1赋值时同理。这样,循环时只要把定时时间和循环次数赋给R1、R2、R7即可,达到减少代码长度的效果。

十六路彩灯控制电路实验报告

山东科技大学电工电子实验教学中心创新性实验研究报告 实验项目名称_16路彩灯控制电路___ 专题____________ 姓名学号_ 姓名学号_ 姓名学号_ 手机Email _ 专业电气工程及其自动化班级___ 指导教师及职称______ 开课学期2011 至_2012 学年_2 _学期提交时间2012 年 6 月28 日

一、实验摘要 设计一种利用发光二极管作为彩灯指示,实现发光二极管四种花样依次点亮,并能够实现这四种点亮方式自动状态切换的彩灯循环控制电路。实验按照效果预设、电路设计、仿真调试、实物实验连接与调试的步骤进行,在实验组三人的分工合作下完成对预定效果的实现。实验原理主要涉及数字电子技术和模拟电子技术知识,要求通过本实验既能加深对原有基础知识的熟悉和掌握,并实现在所学内容的基础上创新性设计和应用。本实验用到的元器件主要包括555定时器、16进制加减计数器、普通16进制加法计数器以及译码器,并以它们为各自核心分别构成了多谐振荡信号输出部分、彩灯状态编码输入部分、彩灯点亮花样切换控制部分和彩灯状态译码输出部分,从而实现在有高电平脉冲输入的情况下彩灯电路自动实现不同的闪烁效果。 二、实验目的 1.学会分析、设计和测试用555计时器构成的多谐振荡器。 2.熟悉掌握16进制计数器的不同工作状态的基本原理并在自主设计下实现不同状态之间的自动转换。 3.实现16个已编号LED灯四种方式的点亮花样的依次循环: ①从1号灯开始依次加法式顺次点亮至第16号灯; ②从16号灯开始依次减法式顺次点亮至第1号灯; ③1号灯和9号灯同时点亮,并且分别以它们为起点依次加法式顺次点亮至第8号和第16号灯,即1号灯点亮并依次加法式顺次点亮至第8号灯的同时9号灯点亮并依次加法式顺次点亮至第16号灯,然后重复一次; ④16号灯和8号灯同时点亮,并且分别以它们为起点依次减法式顺次点亮至第9号和第1号灯,即16号灯点亮并依次减法式顺次点亮至第9号灯的同时8号灯点亮并依次减法式顺次点亮至第1号灯,然后重复一次; 并且以上四种循环点亮方式要实现①→②→③→④的状态自动控制循环。 4.实现两片3线-8线译码器用作4线-16线译码器,并且要在彩灯点亮花样的要求下实现同一时间下的不同工作状态的组合,以控制彩灯不同的点亮或熄灭循环状态。 5.掌握电子电路安装和调试以及故障排除的方法,学会用Multisim软件对电路仿真。 6.通过查阅手册和文献资料,培养分析问题和解决问题的能力,培养创新思维和创新能力。 三、实验场地及仪器、设备和材料:

实验二 MATLAB程序设计 含实验报告

实验二 MATLAB 程序设计 一、 实验目的 1.掌握利用if 语句实现选择结构的方法。 2.掌握利用switch 语句实现多分支选择结构的方法。 3.掌握利用for 语句实现循环结构的方法。 4.掌握利用while 语句实现循环结构的方法。 5.掌握MATLAB 函数的编写及调试方法。 二、 实验的设备及条件 计算机一台(带有MATLAB7.0以上的软件环境)。 M 文件的编写: 启动MATLAB 后,点击File|New|M-File ,启动MATLAB 的程序编辑及调试器(Editor/Debugger ),编辑以下程序,点击File|Save 保存程序,注意文件名最好用英文字符。点击Debug|Run 运行程序,在命令窗口查看运行结果,程序如有错误则改正 三、 实验内容 1.编写求解方程02=++c bx ax 的根的函数(这个方程不一定为一元二次方程,因 c b a 、、的不同取值而定) ,这里应根据c b a 、、的不同取值分别处理,有输入参数提示,当0~,0,0===c b a 时应提示“为恒不等式!”。并输入几组典型值加以检验。 (提示:提示输入使用input 函数) 2.输入一个百分制成绩,要求输出成绩等级A+、A 、B 、C 、D 、E 。其中100分为A+,90分~99分为A ,80分~89分为B ,70分~79分为C ,60分~69分为D ,60分以下为E 。 要求:(1)用switch 语句实现。 (2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 (提示:注意单元矩阵的用法) 3.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 2?1 3?10?5?16?8?4?2?1 6?3?10?5?16?8?4?2?1 运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。 请为关键的Matlab 语句填写上相关注释,说明其含义或功能。 4. 的值,调用该函数后,

彩灯双向循环电子技术课程设计实验报告

安徽农业大学经济技术学院 电子技术课程设计报告书 课题名称一种多种波形发生器设计 姓名汪亦嘉 学号150103233 院、系、部机械工程系 专业机械设计制造及其自动化 指导教师李琰 2017年 6月 13 日

一、设计任务及要求: 1、用中规模计数器设计双向流动彩灯控制器。 2、要求彩灯双向流动点亮,其闪烁频率在1~10Hz内可调。 3、要求用555定时器设计时钟脉冲,五路彩灯采用五个发光二极管代替。设计要求 4、双向流动彩灯控制器的直流稳压电源要求自行设计。 5、在选择器件时,应考虑成本。 6、根据技术指标,通过分析计算确定电路和元器件参数。 7、画出电路原理图(元器件标准化,电路图规范化)。 指导教师签名: 2017年6月日二、指导教师评语: 指导教师签名: 2017年6月日

三、成绩 指导教师签名: 2017年6月日

一、设计目的 1、对模拟电子技术的的直流电源中的整流、滤波、稳压等环节加深印象。 2、了解直流电源各部分的结构。 3、加深对于555定时器的内部结构的理解。 4、将74LS161改为十六进制以内的任一进制计数器。 5、Mulsitim 电路仿真软件应用灵活。 二、方案论证 设计一个双向彩灯控制器,控制五路彩灯。 方案一:以555定时器为基础连接成多谐振荡器产生周期在1~10Hz 矩形时钟脉冲,用以启动74LS161计数器。并用74LS161构成八进制加法计数器通过74LS138译码器输出给五个彩灯,实现双向循环。方案一原理框图如图1所示。 图1 双向彩灯控制器方案一的原理框图 方案二:与方案一的第一部分原理相同同样采用555定时器构成多谐振荡器,用来产生1~10Hz 的周期矩形时钟脉冲,启动计数器。第二部分采用四进制加法计数器和四进制减法计数器结合实现循环,第三部分同样采用74LS138译码器输出给五路彩灯,实现循环。方案二原理框图如图2所示。 图2 双向彩灯控制器方案二的原理框图 最终本设计采用的是方案一,只采用一个八进制加法计数器,循环简单方便,仅需一次循环就可实现五路彩灯双向流动。在考虑成本的条件下,节省器件。所以方案一更加合适。 多谐振荡器 八进制加法计数器 译码器 彩灯 多谐振荡器 四进制加法计数器 四进制减法计数器 译码器 彩灯

数据结构-队列实验报告

《数据结构》课程实验报告 一、实验目的和要求 (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点。 (2)掌握队列的顺序表示和实现。 二、实验环境 Windows7 ,VC 三、实验内容及实施 实验三:队列 【实验要求】 构建一个循环队列, 实现下列操作 1、初始化队列(清空); 2、入队; 3、出队; 4、求队列长度; 5、判断队列是否为空; 【源程序】 #include #define MAXSIZE 100 #define OK 1; #define ERROR 0; typedef struct { int *base; int front; int rear; }SqQueue;//队列的存储结构 int InitQueue(SqQueue &Q) {

Q.base=new int[MAXSIZE]; Q.front=Q.rear=0; return OK; }//队列的初始化 int EnQueue(SqQueue &Q,int e) { if((Q.rear+1)%MAXSIZE==Q.front) return ERROR; Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXSIZE; return OK; }//队列的入队 int DeQueue(SqQueue &Q,int &e) { if(Q.front==Q.rear) return ERROR; e=Q.base[Q.front]; Q.front=(Q.front+1)%MAXSIZE; return OK; }//队列的出队 int QueueLength(SqQueue &Q) { int i; i=(Q.rear-Q.front+MAXSIZE)%MAXSIZE; return i; }//求队列长度 void JuQueue(SqQueue &Q) { if(Q.rear==Q.front) printf("队列为空"); else printf("队列不为空"); }//判断队列是否为空 void QueueTraverse(SqQueue &Q)

循环结构程序设计实验报告

嘉应学院计算机学院 实验报告 课程名称程序设计基础实验名称实验地点 指导老师实验时间提交时间 班级姓名座号 一、实验目的和要求 (1)熟悉掌握用while语句、do…while语句和for语句实现循环的方法。 (2)掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。 (3)进一步学习调试程序。 二、实验环境和方法 实验方法: (一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。 (二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。 (三)根据实验内容,编译程序。 实验环境:Windows xp Visual C++6.0 三、实验内容及过程描述 实验步骤: ①进入Visual C++ 6.0集成环境。 ②输入自己编好的程序。 ③检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错, 及时改正。 ④进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”, 根据提示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。 ⑤运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果 是否正确,应运行多次,分别检查在不同情况下结果是否正确。 实验内容:编译以下题目的程序并调试运行。 (1)输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。 编写程序如下: #include int main() { char c; int letters=0,space=0,digit=0,other=0; printf("请输入一行字符:\n"); while((c=getchar())!='\n')

微机接口实验报告(循环彩灯)

目录 第一章需求分析 1.1 设计目的 (1) 1.2 设计任务和要求 (1) 1.3 软硬件运行环境及开发工具 (1) 第二章概要分析 2.1 总体方案和说明 (2) 2.2 8255A芯片图 (3) 2.3 循环彩灯流程图 (4) 第三章详细设计 3.1 硬件设计和实现 (5) 3.2 实验电路图和说明 (6) 3.3 源程序代码 (6) 第四章系统调试和操作说明 4.1 系统调试 (9) 4.2 操作说明 (9) 第五章总结体会 (10) 参考文献 (10) 第一章:需求分析 1.1设计目的 巩固和加深课堂所学知识;熟悉各种指令的使用及条件; 学习掌握一般的软硬件的设计方法和查阅、运用资料的能力; 深入了解和掌握8255A在PC机系统的典型接法和8255A的工作方法及使用编程。 1.2设计任务和要求

任务: 循环彩灯控制系统输出四种参考花型如下:数位为1时表示灯亮 1)00000001 左循环 2)10000000 右循环 3)按10000001,11000011,11100111,11111111 规律递增, 全亮后同时闪烁十次,循环不断。 4)按11110000,00001111 交替闪烁。 要求: 1.画出硬件原理图(接口芯片和外设部分)和实验连线图; 2.功能要求: 1)循环彩灯的循环速度可调; 2)按键要求 ①启动/暂停,按K0开关启动系统,按K1开关停止系统工作。 ②花型变换,由开关K2、K3进行四种花型切换; 1.3软硬件运行环境及开发工具 利用TDN86/88实验平台进行硬件电路的连接,在Wmd86软件下进行程序的调试,直到使循环彩灯按照设计要求运行,实验所使用的实验开发平台是Wmd86,使用的编程语言是汇编。 第二章:概要设计 2.1 总体方案和说明 根据所学内容和对8255A的使用,整个系统硬件采用8086微处理器,和8255A可编程并行接口芯片和8个led彩灯。 Intel 8255A是一种通用的可编程并行接口芯片,由于它是可以编程的,可以通过程序来设置芯片的工作方式,通用性强,使用灵活,可为多种不同的CPU和外设之间提供并行输入/输出的通道;8086微处理器,选择最小工作模式,所有的总线控制信号均由8086产生;8086CPU的地址\数据总线AD15-AD0和地址\状态总线A16/S3-A19/S6是复用的,必须通过地址锁存器把地址总线和数据总线分离。 可编程并行通信接口芯片8255A: 方式0为简单I/O,查询方式,端口A、端口B、端口C均可使用。 方式1为选通I/O,中断方式,端口A、端口B可以使用,选通的输入/输出方式。 方式2为双向I/O,中断方式,只有端口A可以使用,双向的传输方式。 三个8位端口PA、PB、PC 端口A(PA口):有一个8位数据输入锁存器和一个8位数据输入锁存/缓冲器; 端口B(PB口):有一个8位数据输入锁存器和一个8位数据输入/输出,锁存/缓冲器; 端口C(PC口):有一个8位数据输入锁存器和一个8位数据锁存/缓冲器。

数电彩灯

课程设计报告 课程名称数字电子技术 课题名称彩灯控制器 专业电气工程及其自动化 班级1284班 学号33 姓名汪文龙 指导教师张向华 2014年12月5日

湖南工程学院 课程设计任务书 课程名称:数字电子技术 题目:彩灯控制器 专业班级:电气工程及其自动化1284 班 学生姓名:汪文龙学号:33 指导老师:张向华 审批: 任务书下达日期2014年11月24日 设计完成日期2014年12月 5 日

设计内容与设计要求 一、任务与要求: 设计一个彩灯控制器,要求如下: 1.有8只彩灯(用发光二极管代替)。 2.自左至右或顺时针逐次点亮至全亮,然后逐次熄灭至全灭。 3.自右至左或逆时针逐次点亮至全亮,然后逐次熄灭至全灭。 4.闪烁,8只灯同亮、同灭、同亮、同灭。 5. 自主设计一个彩灯花样。 5. 按2、3、4、5循环工作。 二、设计要求: 1.电路设计要求思路清晰,给出整体设计框图和总电路图; 2.单元电路设计,给出具体设计思路和电路; 3.采用EWB、protous、multism中任一软件对电路进行仿真。 4.安装、调试电路; 5.写出设计报告;

主要设计条件 1.提供调试实验室; 2.提供调试面板,元件;

目录 一.设计总体思路,基本原理和框图(总电路图) (6) 1.1、总体思路: (6) 1.2基本原理 (7) 1.3总电路图 (9) 二、单元路设计电 (10) 2.1双向移位寄存器的设计 (10) 2.2二进制计数器与逻辑组合电路的设计... 错误!未定义书签。 三、仿真波形 .................................................... 错误!未定义书签。 3.1彩灯输出波形 ......................................... 错误!未定义书签。 3.2芯片74LS161连接四或门时输出波形.. 错误!未定义书签。 四、安装与调试步骤 (12) 五、故障分析与电路改进 (14) 六、总结与体会 (15) 七、附录(元器件清单) (16) 八、参考文献 (17)

C语言循环结构程序设计实验报告

甘肃政法学院 本科生实验报告 ( 五) 姓名:赵明翔 学院:公安技术学院 专业:安全防范工程 班级: 2015级安全防范工程班 实验课程名称:程序设计 实验日期:2016年月日 开课时间:2015学年第二学期

(2)输出所有的水仙花数,所谓水仙花数是指一个3位数,其各位数字李方和等于该数本身。例如,153是水仙花数,因为153=12+53+33程序如下: #include int main() { int i,j,k,n; printf("paicissus numbers are"); for (n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if(n==i*i*i+j*j*j+k*k*k) printf("%d",n); } printf("\n"); return 0; } 运行结果: (3)猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又

多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下了1个桃子了。求第一天共摘了多少桃子。 程序如下: #include int main() { int day,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2; x2=x1; day--; } printf("total=%d\n",x1); return 0; } 运行结果: (4)①用牛顿迭代法求方程0634223=-+-x x x 在1.5附近的根. #include #include int main() {double x1,x0,f,f1; x1=1.5; do {x0=x1; f=((2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x1=x0-f/f1;

基于8255A可编程并行接口的定时器循环彩灯实验报告

基于8255A可编程并行接口的定时器实验 ——循环彩灯实验 一、实验项目 用8255A可编程并行接口芯片,PA口作为显示输出口,PB口作为开关量输入口。由8051内部定时器1按方式1工作,发光二极管显示。要求编写程序模拟循环彩灯,PB口不同的三个开关按下,彩灯以不同的形式循环点亮:模式一(开关K1控制)L1-L2-…-L8右移逐个亮,后一个点亮的同时前一个熄灭,再再左移、全亮、全灭,循环显示;模式二(开关K2控制)L1L2-L7L8两个一起亮并右移,后面亮的同时前面熄灭,再左移、全灭、全亮,循环显示:模式三(开关K3控制)L4L5-L3L6-L2L7-L1L8,后面亮的同时前面熄灭,再反向、全灭、全亮,循环显示;时序间隔0.5秒。 二、实验目的 1.学习8051内部定时器的使用、编程方法,了解8255A芯片的结构及编程方法; 2.进一步掌握中断处理程序的编写方法及8255A并行接口读取开关数据的方法。 三、实验原理 1.定时常数的确定 定时器/计数器的输入脉冲周期与机器周期一样,为振荡频率的1/12。本实验中时钟频率为12.0 MHZ,现要采用中断方法来实现0.5秒延时,要在定时器1中设置一个时间常数,使其每隔0.05秒产生一次中断,CPU响应中断后将R0中计数值减一,令R0=0AH,即可实现0.5秒延时。 时间常数可按下述方法确定: 机器周期=12÷晶振频率=12/(12×106)=1us 设计数初值为X,则(216-x)×1×10-6=0.05,可求得X=15536 化为十六进制则X=3CB0H,故初始值为TH1=3CH,TL1=B0H 2.初始化程序 包括定时器初始化和中断系统初始化,主要是对IP、IE、TCON、TMOD的相应位进行正确的设置,并将时间常数送入定时器中。由于只有定时器中断,

相关文档
相关文档 最新文档