文档库 最新最全的文档下载
当前位置:文档库 › 《单片机》实验课——拆字、拼字程序

《单片机》实验课——拆字、拼字程序

《单片机》实验课——拆字、拼字程序
《单片机》实验课——拆字、拼字程序

班级:学号:姓名:成绩:

实验二拆字、拼字程序

一实验目的

掌握汇编语言设计和调试方法,熟悉键盘操作。

二实验内容

1.把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。

2. 把2000H、2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成—个字节

三实验步骤

⑴将存储器单元的D0~D7总线接口用8芯排线或8芯扁平线与数据总线单元D0~D7的任一接口相连,存储器单元的A0~A7地址接口与地址总线单元(低8)A0~A7的任一接口相连,存储器单元的A8~A15地址接口与地址总线单元(高8)A8~A15的任一接口相连。

⑵存储器单元的MWR与控制总线单元的IOW相连。

⑶存储器单元的MRD与控制总线单元的IOR相连。

⑷存储器单元的MACS与地址总线单元的A15相连。

编译、装载程序,以连续或单步方式运行程序,检查2000~20FFH中执行程序前后的变化。

四思考

1.将2000的高低位分别送入3000H、3001H的高位, 3000H、3001H低位清零;

;拆字程序

ORG 0660H

SE02: MOV DPTR,#2000H

MOVX A,@DPTR

MOV B,A

SW AP A

ANL A,#0F0H

MOV DPTR,#3001H

MOVX @DPTR,A ;

MOV DPTR,#3000H

MOV A,B

ANL A,#0F0H

MOVX @DPTR,A

SJMP $

END

2.把片内20H,21H的高位拼在一起送到片内30H单元。如何修改程序。请把修改之后的程序和运行的结果截图。拼字程序

ORG 0680H

SE03: MOV R0,#20H

MOV A,@R0

ANL A,#0F0H

SW AP A

MOV B,A

INC R0

MOV A,@R0

ANL A,#0F0H

ORL A,B

MOV R1,#30H MOV @R1,A SJMP $

END

最新单片机原理实验教案参考程序

单片机原理实验教案 参考程序

广东松山职业技术学院《MCS-51单片机原理》实验指导书 宁玉珊黄晓林 使用Proteus辅助设计与仿真

实训项目1 Proteus辅助设计与仿真的使用 一、实训目的 学习并熟练掌握PROTEUS辅助设计与仿真软件的使用。通过使用Proteus的ISIS组件绘制AT89C51功能接口原理图,并对原理图编写程序和调试程序,观察在仿真条件下的实现功能的效果。 二、实训内容 在PROTEUS仿真环境下实现一个发光二极管(LED)闪烁。要求LED亮0.5s灭1s,并绘制原理图和编写实现程序,同时用虚拟的示波器观察硬件和软件实现的效果。 三、实训器材 安装有Proteus7软件的计算机 1 台。 四、实训步骤 1)在硬盘建立文件夹用来保存新建项目的所有文件。如在D盘建立PROJECT文件夹。 2)选择‘开始→程序→Proteus7 professional→ISIS professional(或者双击桌面图标ISIS)’,进入Proteus仿真环境,如图P1_1和P1_2所示。 图P1-1

图P1-2 3)选择菜单【File/New Design】创建一个新的设计项目,如图P1_3所示。 图P1-3 4)此时系统会弹出模板选择窗口,选择‘DEFAULT’点击【OK】即可,如图P1_4所示。

图P1_4 5)点击界面左侧工具栏中的图标,接着点击元件池上方的按钮,将要用到的元器件从系统库调到当前设计文件库中。在弹出的Pick Devices对话框左上角的‘Keywords’文本框中键盘输入元件名(或元件的其它关键词)搜索到需要的元器件。双击‘Results’栏下的目标元件,该元件即调出到当前设计文件库的元件列表中,如图P1_5所示。本实训中所要用到的元件如表PS1_1所示。 图P1_5 元件名称搜索关键词元件序 数值备注 号 电阻器Resistor R1 10k 电阻器Resistor R2 1k 电解电容器MINELECT1U63V C1 4.7μ 陶瓷电容器CERAMIC22P C2、C3 22p 晶振CRYSTAL X1 12MHz 单片机AT89C51 U1

单片机实验报告

汇编语言程序设计 1)编译后,系统提示:目标越界,改为AJMP后编译通过,将ORG 07FFH 改为0800H, 系统提示:目标越界,这说明AJMP可以在2KB 范围内无条件转移。 2.改为LJMP编译通过,这说明LJMP可以在64KB 范围内无条件转移。 3.将LJMP LP1改为SJMP LP0,机器码为80FC,其中FC为偏移量,它是一个补码,01H~7FH说明向PC(增大√、减小)方向跳,80H~FFH说明向PC(增大、减小√)方向跳,这说明SJMP可以在当前PC值-128B~+127B 范围内无条件转移。 1、X、Y以补码的形式存放在20H、21H中,编写程序实现如下函数: 实验程序: MOV A,20H JZ ZREO JB ACC.7,NEG MOV 21H,#01H SJMP PEND ZREO:MOV 21H,A SJMP PEND NEG:MOV 21H,#0FFH PEND:SJMP$ END 结果记录: 1.将数89H存放于20H中,运行程序,观察到21H单元中的内容为FF; 2.将数05H存放于20H中,运行程序,观察到21H单元中的内容为01; 3.将数00H存放于20H中,运行程序,观察到21H单元中的内容为00; 2、将20H~27H中的压缩BCD码拆为两个单字节BCD码,存放在以2000H为首地址的外部RAM 中。 实验程序: MOV R0,#20H MOV R7,#08H MOV DPTR,#2000H LOOP:ACALL CZ INC R0

INC DPTR DJNZ R7,LOOP SJMP $ CZ:MOV A,@R0 SWAP A ANL A,#0FH MOVX @DPTR,A INC DPTR MOV A,@R0 ANL A,#0FH MOVX @DPTR,A RET END 结果记录: 20H 21H 22H 23H 24H 25H 26H 27H 87H 54H 36H 23 19H 43H 77H 69H 2000H 2002H2004H2006H2008H200AH200CH200EH 07H 04H 06H 03H 09H 03H 07H 09H 2001H 2003H2005H2007H2009H200BH200DH200FH 08H 05H 03H 02H 01H 04H 07H 06H 1、数在计算机中是以补码形式存放的,因此,判断数据的正负,往往采用判断第7 位,是0 则为正数,是1 则为正数 2、实验内容2中JZ ZREO 的机器码为600DH ,其中0DH 为偏移量,当前PC值0004 加上这个偏移量等于0011H ,这正是即将执行的程序的首地址,即标号为ZREO 语句。程序计算器PC的功能是指向下一条指令,因此,跳转语句是依靠偏移量来改变程序计数器PC的值,从而改变程序的流向。 3、分支程序一定要注意分支的语句标号的正确性,每一分支之间必须用跳转(如SJMP)指令分隔,并跳转到相应标号。 4、子程序往往用间址寄存器传递数据,内部RAM用@Ri ,外部RAM用@DPTR ,绝对不能用直接地址。最后以RET 结尾。 5、循环程序往往用寄存器传递数据,用R7控制循环次数,用调用作为循环体,用指令INC 修改地址指针,用指令DJNZ 判断循环结束。 6、执行ACALL前(SP)= 07H ,执行ACALL时,(SP)= 09H ,(08H)= 09H ,(09H)= 00H ,(PC)= 000FH ,PC的值正是子程序的入口地址,而堆栈中这两个单元存放的是断点处PC的值;执行到RET后,(SP)= 07H , 原08H的值弹给(PC)7~0 ,原09H的值弹给(PC)15~8 ,因此,返回断点继续执行主程序。

重庆大学 单片机实验

实验一系统认识及基本程序设计实验 四、实验内容 1. 将BCD 码整数0~255 存入片内RAM 的20H、21H、22H 中,然后转换为二进制整数00H~FFH,保存到寄存器R4 中。修改20H、21H、22H 单元的内容,如:00H,05H,08H;观察实验结果。 参考程序: ;============================================================== ; 文件名称: Asm2-1.asm ; 功能描述: BCD整数转换为二进制整数(8位, 范围从00H--FFH) ;============================================================== ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R0, #20H ;BCD存放高位地址 MOV R7, #03H ;BCD码0--255, 最多3位 CLR A MOV R4, A LP1: MOV A, R4 MOV B, #0AH MUL AB ;乘10 ADD A, @R0 ;加下一位的值 INC R0 ;指向下一单元 MOV R4, A ;结果存入R4 DJNZ R7, LP1 ;转换未结束则继续 SJMP MAIN ;设置断点, 观察实验结果R4中的内容 END 2. 将16 位二进制整数存入R3R4 寄存器中,转换为十进制整数,以组合BCD 形式存储在RAM 的20H、21H、22H 单元中。 参考程序: ;============================================================= ; 文件名称: Asm2-2.asm ; 功能描述: 二进制整数(16位)转换为十进制整数(组合BCD) ;============================================================= ; 0--FFFFH(R3R4)==>0--65535 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R0, #22H ;转换结果低位地址 MOV A, R0 PUSH ACC ;ACC表示累加器A的直接地址 MOV R7, #03H

实验二选择结构程序设计实验报告

实验三:C程序的选择结构 一、实验目的和要求 (1)了解 C 语言表示逻辑量的方法(以0 代表“假”,以非0 代表“真”)。 (2)学会正确使用逻辑运算符和逻辑表达式。 (3)熟练掌握if 语句的使用(包括if 语句的嵌套)。 (4)熟练掌握多分支选择语句—switch 语句。 (5)结合程序掌握一些简单的算法。 (6)进一步学习调试程序的方法。 二、、实验软硬件配置 1.硬件配置 电脑 2.软件配置 Windows xp Visual C++6.0 三、实验内容及过程描述 实验步骤: ①进入Visual C++ 6.0 集成环境。 ②输入自己编好的程序。 ③检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时 改正。 ④进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”,根据提 示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。 ⑤运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果是否正 确,应运行多次,分别检查在不同情况下结果是否正确。 实验内容: 本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。 x x 1 (1)有一函数:y 2x 1 1 x 10 3x 11 x 10 写程序,输入x 的值,输出y 相应的值。用scanf 函数输入x 的值,求y 的值。程序如下:#include int main() {float x,y; int i; while(i<1000) { printf(" 请输入x 的值:"); scanf("%f",&x); if(x<1) y=x; else if(1<=x&&x<10)

单片机实验报告

太原工业学院计算机工程系成绩: 单片机原理及应用 课程实验报告 课程:单片机原理及应用 姓名:冯文颖 专业:计算机科学与技术 学号:132054413 日期:2016年4月20日 太工计算机工程系 计算机原理实验室

实验一:拆字程序实验 实验环境PC机+Win 2007+伟福仿真软件实验日期2016.4.20一.实验内容 1.熟悉51仿真系统,设计并单步调试实现,将R5中一字节数拆分成两位独立的数据,分别存于R6,R7中,将R6,R7中的一位HEX数据转换为输出 2.ASCII编码分析BIN,HEX,BCD,ASCII等不同编码的数学意义及表现形式上的异同 二.理论分析或算法分析 (1)基本要求的描述 在这次实验中,要将R5中存的一字节数拆分成两个独立的数据,主要用到是逻辑运算符中的与功能,进而取得高字节和低字节的数,将R5的数和0f0h进行与取得高字节,和0f0h 与取得低字节的数,进而将它们分别存于R6、R7中。 (2)扩展要求的描述 在扩展要求中,要求将高低字节的数据转换成ASCII码值,首先先运用操作符subb将高低位字节与0Ah进行比较,根据CY的值来判断高低字节的数据是否在0到9之间,若在则在它们的基础上加上30h即可得到其对应的ASCII码值,否则,若在A到F之间,则需要在它们的基础上加37h即可得到它们对应的ASCII码值。 三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等) org 0019h clr c mov r5,#6ah mov a,r5 anl a, #0fh mov r6, a mov a, r5 anl a,#0f0h swap a mov r7,a sjmp $ end Masc1:mov a,r6 add a,#0F6h . mov,a,r6 jnc ad30h add a,#07h ad30h: add a,#30h mov r6,a 1

单片机U盘读写参考程序

/*******************************************************/ #include"reg52.h" #include"stdio.h" #include "string.h" #include "intrins.h" #include"CH375INC.H" /*******************************************************/ #define uchar unsigned char #define uint unsigned int /*******************************************************/ sbit CH375_INT=P3^3; sbit CH375_A0=P3^4; sbit CH375_RD=P3^5; sbit CH375_WR=P3^6; sbit CH375_CS=P3^7; /*******************************************************/ uchar xdata my_buf[512]; /*******************************************************/ void uart_init() { TMOD=0X20; TH1=TL1=0XFD; TR1=1; REN=1; SM0=0;SM1=1; EA=1; ES=1; } /*******************************************************/ void uart_send_pc(uchar *s) //串口监视//void uart_send_pc(uchar a[20]) { //{ uchar len=strlen(s); // uchar i; uchar i; // for(i=0;i<20;i++) for(i=0;i

计算机基础与综合编程实验报告word文档

《计算机基础与综合编程实验》报告 学院计算机科学与技术学院 专业计算机类 班级 姓名 指导教师 日期

1 实验目的 通过迭代式开发,深入掌握C语言的文件、链表、结构体、动态内存管理等技术,开发实现一个计费管理软件。 2 系统功能与描述 1.添加卡与查询卡的操作 (1)添加卡信息。 ①介绍 添加卡信息时,将添加的卡信息保存到工程目录下的card.ams文件。 ②输入 a、输入菜单项编号1实现“添加卡” b、添加卡信息时输入的卡信息 c、保存卡信息的文件路径 ③处理 a、获取保存卡信息的文件路径。 b、获取添加的卡信息。卡信息包括:卡号、密码、开卡金额、卡状态、开卡时间、截止时间、最后使用时间、使用次数、累积金额。 c、将每个卡信息组装成一条字符串,一张卡的每个信息间用“##”分隔。 d、将保存的卡信息的字符串写到工程目录下的card.ams文件末尾。 ④输出 a、保存成功,则显示添加的卡信息。 b、保存失败,则提示添加卡信息失败。 (2)查询卡信息:

①介绍 从工程目录下的card.ams文件中,读取并解析卡信息,将卡信息显示到界面中。 ②输入 a、输入菜单项编号2实现“查询卡” b、card.ams文件中的卡信息 ③处理 a、获取保存卡信息的文件路径。 b、逐行读取该文件中的卡信息并解析。 c、将将解析结果保存到内存中,在界面上显示读取出来的卡信息。 ④输出 a、读取失败,提示没有该卡的信息。 b、读取成功,则在界面输出卡号,状态,余额,累计使用,使用次数,上次使用时间,一共六个信息。 2.上机: ①介绍 根据用户输入的卡号和密码,判断该卡能否进行上机。更新可以上机卡的状态。 ②输入 a、输入菜单项编号3,实现“上机功能” b、输入卡号和密码 c、链表和文件中添加过的卡信息 ③处理 a、执行上机操作时,从卡信息文件中获取卡信息,添加到链表中。 b、以卡号和密码为条件,遍历链表中的卡信息,找到与输入条件相符的卡信息。 c、如果找到,以列表方式显示该卡的上机信息,并更新卡信息。如果未找到,就提示用户。 ④输出

单片机实验

实验一拆字程序 1.实验目的: 掌握汇编语言设计方法。 2.实验内容: 把8000H地址上的内容拆开,高位送8001H地址的低位,低位送8002H地址的低位,8001H、8002H地址的高位清零.本程序通常在把数据送显示缓冲区时使用。 3.实验器材: (1) G2010实验箱 1 台 4.实验步骤: (1)按流程图编写程序,可借助KEIL集成调试环境中的编辑器输入程序,存盘并编译,按提示的内容进行排错。 (2)打开DATA和XDATA窗口,在XDATA窗口的8000H单元输入一个值,如23H,单步调试程序,观察累加器A,辅助寄存器B,外部数据存储器8001H,8002H单元中 数据的变化。 5.软件清单(实验例程\实验1\ASM51\EX1.ASM)(实验例程\实验1\C51\EX1.C) ;文件名:MCS51\ex1.ASM ;把指定字节的高低位拆开分别存放,多用于显示子程序 ORG 0000H sjmp start org 0050h start:MOV DPTR,#8000H ;指定的字节 MOVX A,@DPTR MOV B,A ;暂存 SWAP A ;交换 ANL A,#0FH ;屏敝高位 INC DPTR MOVX @DPTR,A INC DPTR MOV A,B ANL A,#0FH ;指定字节的内容屏敝高位 MOVX @DPTR,A LOOP: SJMP LOOP end 6、仿真结果

7、心得体会 这个实验让我学会了软件KEIL的使用和用这个软件对程序的的调试,明白了拆字程序的原理,对汇编程序的读写也有了更近一步的理解。

实验二拼字程序 1.实验目的: (1)进一步掌握汇编语言设计 2.实验内容: 把8000H、8001H两个字节的低位分别送入8002H的高位和低位。本程序一般用于把显示缓冲区数据取出拼装成一个字节。 3.实验器材: (1) G2010实验箱 1 台 4.实验步骤: (1)按流程图编写程序,可借助KEIL集成调试环境中的编辑器输入程序,存盘并编译,按提示的内容进行排错。 (2)打开DATA和XDATA窗口,在XDATA窗口的8000H单元输入一个值,如23H,单步调试程序,观察累加器A,辅助寄存器B,外部数据存储器8001H,8002H单元中 数据的变化。 5.软件清单:(实验例程\实验2\ASM51\EX2.ASM)(实验例程\实验2\C51\EX2.C) “验证式”实验二拼字程序 ;文件名:MCS51\A02.ASM ;把两字节的低位合拼成一个字节,多用于显示子程序 ORG 0000h sjmp start org 0050h start:MOV DPTR,#8000H MOVX A,@DPTR ANL A,#0FH ;屏敝高位 SWAP A MOV B,A ;保存 INC DPTR MOVX A,@DPTR ANL A,#0FH ORL A,B ;合拼 INC DPTR MOVX @DPTR,A ;送8002H存放 LOOP: SJMP LOOP end 6.结果截图

51单片机实验程序

3 3 3 用查表方式编写y=x1 +x2 +x3 。(x 为0~9 的整数) #include void main() { int code a[10]={0,1,8,27,64,125,216,343,512,729}; //将0~9 对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0~255 或-128~+127 之间的话就用char ,而现在的值明显超过这个范围,用int 较合适。int 的范围是0~65535 或-32768~32767 。 int y,x1,x2,x3; //此处定义根据习惯,也可写成char x1,x2,x3 但是变量y 一定要用int 来定义。 x1=2; x2=4; x3=9; //x1,x2,x3 三个的值是自定的,只要是0~9 当中的数值皆可,也可重复。 y=a[x1]+a[x2]+a[x3]; while(1); //单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。 } //结果的查询在Keilvision 软件内部,在仿真界面点击右下角(一般初始位置是右下角)的watch 的框架内双击“double-click or F2 to add”文字输入y 后按回车,右侧会显示其16 进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10 进制数。 1、有10 个8 位二进制数据,要求对这些数据进行奇偶校验,凡是满足偶校验的 数据(1 的个数为偶数)都要存到内RAM50H 开始的数据区中。试编写有关程序。 #include void main() { int a[10]={0,1,5,20,24,54,64,88,101,105}; // 将所要处理的值存入RAM 中,这些可以根据个人随意设定,但建议不要超过0~255 的范围。 char i; // 定义一个变量 char *q=0x50; // 定义一个指针*q 指向内部0x50 这个地址。 for(i=9;i>=0;i--) //9~0 循环,共十次,也可以用for(i=0;i<10;i++) { ACC=a[i]; //将a[i] 的值赋给累加器ACC if (P==0) //PSW0 位上的奇偶校验位,如果累加器ACC 内数值1 的个数为偶数那么P 为0,若为奇数,P 为1。这里的P 是大写的。 { *q=a[i]; q++; // 每赋一个值,指针挪一个位置指向下一个。 } } while(1); //同实验一,程序不能停。 }

计算机组成实验报告汇总

计算机组成与体系结构 实验报告

实验项目一 一、实验目的 通过了解高级语言源程序和目标机器代码的不同表示及其相互转换,深刻理解高级语言和机器语言之间的关系,以及机器语言和不同体系结构之间的关系。 二、实验要求: 在VC6.0中创建下列源程序 #include void main() { inti=100; int j=-1; int k; k=i+j; printf("%d",k); } 然后对该程序进行编译、链接,最终生成可执行目标代码。 三、实验报告 1.给出做实验的过程. 关键代码如下:

2.给出源程序(文本文件)的内容(用十六进制形式表示)。 3.给出可执行目标文件(二进制文件)的内容(用十六进制形式表示)。

4.VC6.0调试环境:设置断点、单步运行、变量的值(十进制、十六进制)、变量的地址、变量的存储。 断点设置如下:

变量的值十进制: 变量的值十六进制: 变量的地址:

5.VC 6.0反汇编:查看源程序对应的汇编程序、可执行目标程序的二进制编码、了解如何给变量分配内存、系统函数程序段的调用。 6.分析或回答下列问题。 (1)分析同一个源程序在不同机器上生成的可执行目标代码是否相同。 不相同。因为不同的机器硬件的组成不同,因此同一个源程序在不同的机器上生成的目标文件不同。 (2)你能在可执行目标文件中找出函数printf()对应的机器代码段吗?能的话,请标示出来。 不能。因为源程序中的printf函数在可执行文件中已转换为机器语言。被翻译的机器语言中有printf函数,但是不知道是从哪一段开始翻译的。 (3)为什么源程序文件的内容和可执行目标文件的内容完全不

综合实验实验报告

综合实验实验报告 : 厦门大学计算机科学系级四班 一.问题描述: 算法的综合应用 问题描述: 有台不同的机器,个不同的工件。每个工件有多道工序,每道工序由指定的机器在固定的时间内完成。一道工序一旦开始处理,就不能中断。每台机器一次只能处理一道工序。一个调度就是决定每台机器上工序的处理顺序,使得机器完成所有工件的时间最短。具体的,该问题就是要求在满足()、()两个约束条件的前提下,确定每台机器上工序的顺序,使加工的时间跨度(从开始加工到全部工件都加工完所需要的时间)达到最小。其中,()表示工件约束条件:对每个工件而言,机器对它的加工路线是事先确定的;()表示机器约束条件:对每台机器而言,一次只能对一道工序进行加工。 要求: 利用所学的算法求解该问题,任给一个输入实例,能输出最短时间以及每台机器上工序的加工顺序。 能设计出一个用户界面。 二.算法思路: 原先考虑过用回溯法进行解体,解空间树是所有工件的所有工序的一棵排列树,但这样如果没有好的剪枝函数是不可能实现的,因为这样实现的话时间复杂度将是(^),其中为机器数,为工件数,题目能用的剪枝函数的设计是每个工件的加工次序是有要求的,个人预测需要用到线性规划的内容,最后没有如此实现。 本程序使用贪心算法实现,程序所有的工件所有的工序保存在一个二维数组中,并且维护一个指针,该指针每次走动一个工序时间,这样的一次走动将产生个工序需要加工,其中为工件数目,将这个工件放到相应的个机器上,在个机器按照加工时间递增排序,之所以选择递增排序,是想让每个工序尽可能快的通过他所需要的机器,即可以让该机器上的工序可以更快的加工,也可以让他之后的工序可能更快的在其他机器上进行加工,当然这样的设计只是直观上的说明,并不能得到最优解。 程序中维护的数据结构如下图所示,共有两个,一个用来保存所有工件的所有工序,另一个用来表示机器加工工序。 在图一中共有六个工件~以及每个工件有个工序,图上方的箭头表示移动的指针,每个移动一个工序,由于图一中的数组元素结构体设计如下: { 机器节点定义 ; 当前的加工的最后时间 *; 维护一个工件链表 }; 因此对于每个可以加工的工序,可以直接链入图二中的链表中不需要另外申请空间。

单片机实验报告书

软件实验 实验一拆字程序实验 一、实验目的: 掌握汇编语言设计方法。 二、实验内容: 把8000H地址上的内容拆开,高位送8001H地址的低位,低位送8002H地址的低位,8001H、8002H地址的高位清零.本程序通常在把数据送显示缓冲区时使用。 三、实验器材: 计算机 1台 四、实验步骤: 1、按流程图编写程序,以下是通过计算机交叉汇编得到的.LST文件清单,供参考。 2、文件编译连接、装载,用鼠标点击[项目/重建所有目标文件],系统自动进行编译,并弹出信息窗口,若有错误则重新修改再编译;若无错误,点击[调试/启动/停止调试]后进入调试状态。 3、设置观察窗口: (1)用鼠标点击[视图/存储器窗口],在地址栏中输入[0X8000]; (2)在8000H中写入数据(任意); (3)单步执行观察寄存器和8000H—8002H的变化。 五、程序框图: 七、实验程序(51asm\A8051.ASM) ;把指定字节的高低位拆开分别存放,多用于显示子程序 ORG 0000H MOV DPTR,#8000H ;指定的字节 MOVX A,@DPTR MOV B,A ;暂存 SWAP A ;交换 ANL A,#0FH ;屏敝高位

INC DPTR MOVX @DPTR,A INC DPTR MOV A,B ANL A,#0FH ;指定字节的内容屏敝高位 MOVX @DPTR,A LOOP: SJMP LOOP END 实验二拼字程序实验 一、实验目的: 1、进一步掌握汇编语言设计; 2、熟悉软件调试方法。 二、实验内容: 把8000H、8001H两个字节的低位分别送入8002H的高位和低位。本程序一般用于把显示缓冲区数据取出拼装成一个字节。 三、实验器材: 计算机 1台 四、实验步骤: 1、编写程序并编译成机器代码。 2、用断点或单步方式运行程序,检查8000H-8002H,A,B中內容变化情况。查看内部RAM、外部RAM、断点运行方式、单步操作等请参阅有关章节。 3、打开AP6264.asm程序 (1)文件、编译、连接、装载:点击[项目/重建所有目标文件],系统进行自动编译,并弹出信息窗口,点击[调试/启动/停止调试]进入调试状态。 (2)用鼠标点击[视图/存储器窗口],在地址栏中输入[0X8000],将地址定位于8000H。 (3)在8000H中写入任意数据,单步执行观察寄存器和数据存储区的变化。 五、程序框图:

单片机实验参考程序

实验一键盘输入实验 参考程序: ;4*4矩阵键盘读取程序,利用P0口,列线左起P0.0-P0.3 ;行线上起P0.4-P0.7,行线默认接高电平, ;P3.7作为键盘被读取的提示灯 ; 0 1 2 3 ; 4 5 6 7 ; 8 9 A B ; C D E F ;不考虑有两个或以上按键同时按下的情况, ;每次扫描到一个有按下则结束本次扫描 SETB P3.7 ;确认关闭键盘响应指示灯 MAIN: MOV R0,#0EFH ;用于给键盘行列线确定的电平 MOV R1,#0H ;循环次数,R1=0对应第一行,=1为第二行,以此类推SMAIN: MOV P0,R0 ;改变行线的状态,列线全处于高电平 NOP NOP MOV A,P0 JB ACC.0,L1 ;判断某行的第一列是否按下,按下则P0.0为低电平 MOV R2,#0H ; 将某行的列码保存至R2,显示程序会根据此值和R1的值计算具体为何按键按下 ACALL DISP SJMP MAIN ; 每次扫描到一个有按下则结束本次所有扫描

L1: JB ACC.1,L2 ;判断某行的第二列是否按下,按下则P0.1为低电平MOV R2,#01H ACALL DISP SJMP MAIN L2: JB ACC.2,L3 ;判断某行的第三列是否按下,按下则P0.2为低电平MOV R2,#02H ACALL DISP SJMP MAIN L3: JB ACC.3,SKIP ;判断某行的第四列是否按下,按下则P0.3为低电平MOV R2,#03H ACALL DISP SJMP MAIN ; SKIP: INC R1 ;R1加1,共计4行, MOV A,R0 RL A ;左移R0内的值,以并扫描下一行 MOV R0,A CJNE R1,#04H,SMAIN ;若四行扫描完毕,则跳转至程序最初,相关参数为初始值NO: MOV P2,#0FFH ;程序能执行到此说明四行扫描完毕并且一个按键都没按下,关闭数码管和指示灯 SETB P3.7 SJMP MAIN DISP: CLR P3.7 ;点亮键盘响应指示灯 MOV A,R1 RL A RL A ;R1对应行,具体的按键计算为R1*2+R2 ADD A,R2 ADD A,#3H ;下列指令与表格见有3字节的距离 MOVC A,@A+PC MOV P2,A ;十六进制的高位用数码管L1显示 RET ;共阳数码管0-F的显示码 DIS: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH DELAY: m ov r7,#255;延时 del1: mov r6,#255; del2: djnz r6,del2 djnz r7,del1 ret END

计算机系统结构实验报告

计算机系统结构实验报告 一.流水线中的相关 实验目的: 1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点; 2. 加深对计算机流水线基本概念的理解; 3. 进一步了解DLX基本流水线各段的功能以及基本操作; 4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响; 5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。 实验平台: WinDLX模拟器 实验内容和步骤: 1.用WinDLX模拟器执行下列三个程序: 求阶乘程序fact.s 求最大公倍数程序gcm.s 求素数程序prim.s 分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察 CPU中寄存器和存储器的内容。熟练掌握WinDLX的操作和使用。 2. 用WinDLX运行程序structure_d.s,通过模拟找出存在资源相关的指令对以及导致资源相 关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的 百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。 3. 在不采用定向技术的情况下(去掉Configuration菜单中Enable Forwarding选项前的勾选符),用WinDLX运行程序data_d.s。记录数据相关引起的暂停时钟周期数以及程序执行的 总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。 在采用定向技术的情况下(勾选Enable Forwarding),用WinDLX再次运行程序data_d.s。重复上述3中的工作,并计算采用定向技术后性能提高的倍数。 1. 求阶乘程序 用WinDLX模拟器执行求阶乘程序fact.s。这个程序说明浮点指令的使用。该程序从标准 输入读入一个整数,求其阶乘,然后将结果输出。 该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。 实验结果: 在载入fact.s和input.s之后,不设置任何断点运行。 a.不采用重新定向技术,我们得到的结果

数学实验综合实验报告

一、实验目的: 1、初步认识迭代,体会迭代思想的重要性。 2、通过在mathematica 环境下编写程序,利用迭代的方法求解方程的根、线性方程组的解、非线性方程组的解。 3、了解分形的的基本特性及利用mathematica 编程生成分形图形的基本方法, 在欣赏由mathematica 生成的美丽的分形图案的同时对分形几何这门学科有一个直观的了解。从哲理的高度理解这门学科诞生的必然性,激发读者探寻科学真理的兴趣。 4、从一个简单的二次函数的迭代出发,利用mathematica 认识混沌现象及其所 蕴涵的规律。 5、.进一步熟悉Mathematic 软件的使用,复习总结Mathem atic 在数学作图中的应用,为便于研究数学图像问题提供方便,使我们从一个新的视角去理解数学问题以及问题的实际意义。 6、在学习和运用迭代法求解过程中,体会各种迭代方法在解决问题的收敛速度上的异同点。 二、实验的环境: 学校机房,mathematica4环境 三、实验的基本理论和方法: 1、迭代(一)—方程求解 函数的迭代法思想: 给定实数域上光滑的实值函数)(x f 以及初值0x 定义数列 1()n n x f x +=,Λ,3,2,1,0=n , (1) n x ,Λ,3,2,1,0=n ,称为)(x f 的一个迭代序列。 (1)方程求根 给定迭代函数)(x f 以及初值0x 利用(1)迭代得到数列n x ,Λ,3,2,1,0=n .如果数列收敛到某个*x ,则有 )(**x f x =. (2)

即*x 是方程)(x f x =的解。由此启发我们用如下的方法求方程0)(=x g 的近似解。 将方程0)(=x g 改写为等价的方程 )(x f x =, (3) 然后选取一初值利用(1)做迭代。迭代数列n x 收敛的极限就是方程0)(=x g 的解。 为了使得迭代序列收敛并尽快收敛到方程0)(=x g 的某一解的条件是迭代函数)(x f 在解的附近的导数将的绝对值尽量小,因此迭代方程修订成 x x f x h x )1()()(λλ-+== (4) 选取λ使得|)(|x h '在解的附近尽量小. 为此, 我们可以令 ,01)()(=-+'='λλx f x h 得 ) (11 x f '-= λ. 于是 1 )()()(-'-- =x f x x f x x h . 特别地,如果取x x g x f +=)()(, 则可得到迭代公式 .,1,0,) () (1Λ='- =+n x g x g x x n n n n (5) (2)线性方程组的数值解的迭代求解理论与矩阵理论 给定一个n 元线性方程组 ??? ??=++=++, ,1 111111n n nn n n n b x a x a b x a x a ΛΛΛΛΛΛΛΛΛΛΛ (6) 或写成矩阵的形式

《程序技术基础》实验报告

《程序技术基础》课程实验指导课程代码:070050 开课学期:4 开课专业:信管类 总学时/实验学时:64/32 总学分/实验学分:4/2 一、课程简介 数据结构是计算机各专业的重要技术基础课。在计算机科学中,数据结构不仅是一般程序设计的基础,而且是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础。数据结构课程主要讨论各种主要数据结构的特点、计算机内的表示方法、处理数据的算法以及对算法性能的分析。通过对本课程的系统学习使学生掌握各种数据结构的特点、存储表示、运算的原理和方法,学会从问题入手,分析研究计算机加工的数据结构的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储机构及其相应的操作算法,并初步掌握时间和空间分析技术。另一方面,本课程的学习过程也是进行复杂程序设计的训练过程,通过对本课程算法设计和上机实践的训练,还应培养学生的数据抽象能力和程序设计的能力。 二、实验的地位、作用和目的 数据结构是一门实践性较强的基础课程,本课程实验主要是着眼于原理和应用的结合,通过实验,一方面能使学生学会把书上学到的知识用于解决实际问题,加强培养学生如何根据计算机所处理对象的特点来组织数据存储和编写性能好的操作算法的能力,为以后相关课程的学习和大型软件的开发打下扎实的基础。另一方面使书上的知识变活,起到深化理解和灵活掌握教学内容的目的。

三、报告与考核 每个实验都要求学生根据上机内容写出实验报告,报告要求包括以下七个方面的内容: 1.实验目的; 2.实验内容; 3.实验要求; 4.算法设计; 5.详细程序清单; 6.程序运行结果; 7.实验心得体会。

单片机原理与应用实验指导书(学生部分)(2009.4修订)

单片机原理与应用实验指导书 2009年5月

第一章实验箱系统概述一、系统地址分配 (1),存贮器地址分配 (2),I/O地址分配 二、系统接口定义 (1),CZ11:用户实验通讯接口; (2),CZ4:打印接口;

(3),JX0,JX17为系统提供的数据总线接口 (4),CZ7:系统提供的扩展接口; (5),JX12、JX14:液晶显示接口 三、通用电路简介 (1)LED发光二极管指示电路:实验台上包括16只发光二极管及相应驱动电路。见图1-1,Ll—L16为相应发光二极管驱动信号输入端, 该输入端为低电平 “0”时发光二极管亮

图1-6 (2)逻辑电平开关电路:见图1-2。实验台上有8只开关Kl-K8, 与之相对应的K1-K8个引线孔为逻辑电平输出端。开关向上拨相应插孔输出高电平“l”, 向下拨相应插孔输出低电平“0”。 图1-7 (3)单脉冲电路:实验台上单脉冲产生电路如图1-3,标有“”和“”的两个引线插孔为正负单脉冲输出端。附近按钮AN为单脉冲产生按钮,每按一次产生一个单脉冲。 图1-8

(4)分频电路:该电路由一片74LS393组成,见图1-4。T0—T7为分频输出插孔。 该计数器在加电时由RESET信号清零。当脉冲输入为8.0MHZ时,T0—T7输出脉 冲频率依次为4.0MHZ,2.0MHZ,1.0MHZ,500KHZ,250KHZ,125KHZ,62500HZ,31250HZ。 图1-9 (5)脉冲发生电路:实验台上提供一8MHZ的脉冲源,见图1-5,实验台上标有8MHZ 的插孔,即为脉冲的输出端。 图1-10 (6)485接口电路: 图1-11

实验四循环结构大全语言程序设计实验报告

循环结构汇编语言程序设 计实验报告 实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和内存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验内容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示: 四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:+。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序汇编(翻译)后生成二进制目标程序,文件名为 (3)目标程序需要经连接生成可执行程序,文件名为 2)汇编环境

最基本的汇编环境只需要两个文件:和。将这两个文件拷入到已经建好的文件夹(例如huibian)中,并将文件夹huibian放在硬盘根目录C :\>下 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

相关文档