单片机实验上机--实验五 内存块移动

单片机实验上机--实验五  内存块移动
单片机实验上机--实验五  内存块移动

实验五内存块移动

一、实验目的

1、了解内存块的移动方法

2、加深对存储器读写的认识

二、实验说明

块移动是单片机常用操作之一,多用于大量的数据复制和图象操作。本程序是给出起始地址,用地址加一方法移动块,将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去。移动3000H-->4000H,256字节。

三、实验内容及步骤

1、启动计算机,打开伟福仿真软件,进入仿真环境。首先进行仿真器的设置,选择使用伟福软件模拟器。

2、打开TH5.ASM源程序进行编译,编译无误后,打开数据窗口(XDATA),观察地址3000H 起始256个字节存储块和4000H起始的256个字节存储块,若各单元内数据对应相同,则用键盘输入改变其中一块的数据,全速运行程序。点击暂停按钮,观察两个存储块的数据,可以看到两块数据已相同,说明存储块已移动。

3、打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

四、流程图及源程序

1.源程序

ORG 0

MOV R0,#30H

MOV R1,#00H

MOV R2,#40H

MOV R3,#00H

MOV R7,#0

LOOP: MOV DPH,R0

MOV DPL,R1

MOVX A,@DPTR

MOV DPH,R2

MOV DPL,R3

MOVX @DPTR,A

INC R1

INC R3

DJNZ R7,LOOP

LJMP $

END

2.流程图

结束

五、思考题

1.若源块地址和目标块地址有重叠,该如何避免?

2.请思考给出块结束地址,用地址减一方法移动块的算法。

单片机实验报告

单片机实验报告 班级:信科09-3 姓名:王艳辉 学号:08093581 指导老师:陈岱 完成时间:2012年1月8日

实验一 I/O接口P1、P3口实验 一,实验题目 1,用P1口做输出,接八只发光二极管,编写程序,使发光二极管循环点亮。 2,用P3口做输入口,接八个扭子开关,通过P1口在实验箱上LED 灯上输出,编写程序读取开关状态,将此状态,在发光二极管上显示出来。 二,实验目的 1.熟悉使用CPLD实验箱进行单片机实验的方法。 2.设计出符合实验要求的CPLD硬件电路。 3.学习单片机仿真开发软件Keil 51的使用方法。 4.学习MCS-51汇编语言编程方法。 5.学习Pl口的使用方法。 6.学习延时子程序的编写和使用。 三,实验准备 P1和P3口为准双向口,Pl、P3的每一位都能独立地定义为输出线或输入线,作为输入时,必须向锁存器相应位写入“l”,该位才能作为输入。803l中所有口锁存器在复位时均置为“1”,如果后来在口锁存器写入过“0”,在需要时应写入一个“l”使它再成为一个输入。再来看一下延时程序的实现。现常用的有两种方法:一是用定时器中断来实现,一是用指令循环来实现。在系统时间允许的情况下可以采用后一种方法。根据实验系统的工作主频,计算出延时0.1s的

时间常量,编制延时程序: MOV R7, #200 (1) DEl:MOy R6,#X (2) DE2:DJNZ R6,DE2 (3) DJNZ R7,DEl (4) 上面MOV、DJNZ指令均需两个机器周期,所以每执行一条指令需1÷0.256us现求出X值: (X*1/0.256+1/0.256+l/0.256)*200+l/0.256=0.1*10^6。解出X=l26。代入上式可知实际延时约0.100O04s,近似符合要求。 四,实验步骤 (1)打开MAX+PLUSⅡ CPLD实验开发系统。 (2)点击File菜单Project子菜单之Name项,出现Project Name 对话框。为当前的实验选择恰当的路径并创建项目名称”E:\AT8031”。(3)点击File菜单之New项,出现对话框,为选择输入方式,选择Graphic Editor File。出现图形编辑窗口。 (4)双击空白编辑区,出现Enter Symbol 对话框。 (5)从Symbol Libraries项中选择mf子目录(双击),在prim子目录中选择输入脚input 和输出引脚output。 (6)在图形编辑窗口中的左侧点击连线按钮,并完成对电路的连线。(7)在引脚的PIN_NAME处左键双击使之变黑,键入引脚名称。

移动通信实验报告-

实验一交织编码的仿真实现 一、实验目的 熟悉并掌握交织码纠错的工作原理, 利用system view仿真软件设计并建立交织编码纠错的系统图,了解利用仿真模拟软件进行系统分析的基本方法, 能够利用仿真软件分析交织编码系统是如何纠正突发错误的。 二、实验任务要求 1、进一步熟悉system view仿真软件的基本操作步骤. 2、设计并建立交织编码仿真电路 3、掌握利用仿真软件分析系统的基本方法 4、了解交织编码纠正突发错误的过程 三、实验原理 实验原理图 四、实验步骤及结果分析 第1步:进入SystemView 系统视窗,时间设置:点击进行时间设置“时间窗”参数 第2步:在SystemView系统窗下,创建的仿真分析系统。第2步:在SystemV iew系统窗下,创建的仿真分析系统。

第3步:创建完仿真系统后,单击运行按钮,在分析窗口观察并记录输入输出波形。 输出输入波形如下图: 第4步:将输入输出波形放入同一窗口,观察系统延时时间。将鼠标放在延时处,屏幕右上角可看到时间 分析:由上图知输出波形较之输入波形有延时,延时t=5.71s 第5步:在仿真系统中加入延时模块如图,加入延时后观察并记录输入输出波形图 加入延时模块后的仿真系统如下图:

分析:由上图知加入延时模块(延时时间t=5.71s)后,输出波形和输入波形一致 第6步:在仿真系统中加入突发干扰源电路,加入干扰源后观察并记录输入输出波形图 加入突发干扰源电路如下图:

分析:加入突发干扰源后输出波形较之输入波形有变化。 第7步:修改突发干扰源参数,突发干扰源的脉宽100ms改为150ms(PulseW = 150e-3 sec) 后观察并记录输入输出波形图。 五、结论

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

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

广东松山职业技术学院《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、(CMIN02移动智能网系统)是东信北邮信息技术有限公司研制开发的新一代移动智能网产品。 2、(SMP)是移动智能网各业务、用户数据的管理中心,它与SMAP一起组成了一个用户信息管理网络,完成业务管理、用户管理、网络管理、计费管理、接入管理、系统管理等功能。 3、(SMAP)是提供给业务管理者的一个管理窗口,具有与SMP的接口,业务管理者可以通过远程接入SMP来管理业务。它与MSCP并不直接相连。 4、(SCP)是整个移动智能网的核心,主要包括移动业务控制功能和业务数据功能两个功能模块。 二、选择 1、智能网系统的网络组成单元为:(A.B.C.D.E) A. SCP B. SMP C. VC D. SSP E. IP 2、(C)用以存放语音通知,支持文本语音的转换等功能,可根据MSCP的指示完成放音通知和接收 DTMF信号的功能。A. SCP B. SMP C. IP 3、(B)是一个物理功能实体,具有基本呼叫处理的功能,负责参与完成移动智能业务有关的交换 功能。A. SCP B. SSP C. SMP 4、智能业务所采用的7号信令协议子层为(A、B、C) A. MAP2+ B. CAP C. INAP D. ISUP 5、HP根文件系统的组织中,用以存放配置文件的目录是(B) A./home B. /etc C. /dev D. /sbin 6、SMP为SMAP提供服务的进程创建方式(A) A、动态创建方式 B、静态创建方式 7、衡量智能网系统处理能力(每秒处理的呼叫数)的指标为(A) A.忙时CAPS数 B. CPU负荷 C. 充值成功率 8、在二卡合一业务中(ABC)可以为“全球通”用户充值。 A. 全球通 B. 固定用户 C.神州行 D.小灵通 9、在以(A)方式触发的目标网中,呼叫端局可以直接通过用户的CAMEL签约信息分析和触发VPMN业 务。 A. O_CSI+T_CSI B. OVERLAY 10、作为一个物理实体,SSP/IP包括(ABC)功能实体。 A. 呼叫控制功能(CCF) B. 业务交换功能(SSF) C. 特殊资源功能(SRF) D. 业务控制功能(SCF) 11、CMIN02系统中,SCP、SMP、VC的各台处理机之间采用哪种工作方式(B) A.主/备用方式 B. 集群式系统,动态负荷分担方式 C.单机独立工作方式 D.静态负荷分担 12、下面那些功能属于SCP的基本功能(AB) A.呼叫控制和处理功能 B.数据与话务管理功能 C.向SSP指示AOC计费信息 D.业务管理

51单片机实验报告94890

《单片机与接口技术》实验报告 信息工程学院 2016年9月

辽东学院信息技术学院 《单片机与接口技术》实验报告 姓名:王瑛 学号: 0913140319 班级: B1403 专业:网络工程 层次:本科 2016年9月

目录 实验题目:实验环境的初识、使用及调试方法(第一章) 实验题目:单片机工程初步实验(第二章) 实验题目:基本指令实验(第三章)4 实验题目:定时器/计数器实验(第五章)4 实验题目:中断实验(第六章)4 实验题目:输入接口实验(第八章)4 实验题目:I/O口扩展实验(第九章)4 实验题目:串行通信实验(第十一章)4 实验题目:A/D,D/A转换实验(第十七章)4

实验题目:实验环境的初识、使用及调试方法实验 实验类型:验证性实验课时: 1 时间:2016年10月24日 一、实验内容和要求 了解单片机的基础知识 了解51单片机的组成和工作方法 掌握项目工程的建立、编辑、编译和下载的过程方法 熟练单片机开发调试工具和方法 二、实验结果及分析 单片机最小系统的构成: Keil集成开发环境:

STC-ISP:

实验题目:单片机工程初步实验 实验类型:验证性实验课时: 1 时间:2016 年10 月24 日一、实验内容和要求 点亮一个LED小灯 程序下载到单片机中 二、实验结果及分析 1、点亮一个LED小灯 点亮LED小灯的程序: #include //包含特殊功能寄存器定义的头文件 sbit LED = P0^0; sbit ADDR0 = P1^0; //sbit必须小写,P必须大写 sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; void main() { ENLED = 0; ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; LED = 0; //点亮小灯 while (1); //程序停止 } 2、程序下载 首先,我们要把硬件连接好,把板子插到我们的电脑上,打开设备管理器查看所使用的COM 口,如图所示:

移动通信实验报告

实验一 m序列产生及特性分析实验 一、实验目得 1.了解m序列得性质与特点; 2。熟悉m序列得产生方法; 3.了解m序列得DSP或CPLD实现方法。 二、实验内容 1。熟悉m序列得产生方法; 2.测试m序列得波形; 三、实验原理 m序列就是最长线性反馈移存器序列得简称,就是伪随机序列得一种。它就是由带线性反馈得移存器产生得周期最长得一种序列。 m序列在一定得周期内具有自相关特性.它得自相关特性与白噪声得自相关特性相似。虽然它就是预先可知得,但性质上与随机序列具有相同得性质.比如:序列中“0”码与“1”码等抵及具有单峰自相关函数特性等。 五、实验步骤 1.观测现有得m序列。 打开移动实验箱电源,等待实验箱初始化完成.先按下“菜单”键,再按下数字键“1”,选择“一、伪随机序列”,出现得界面如下所示: ?再按下数字键“1"选择“1m序列产生”,则产生一个周期为15得m序列。 2。在测试点TP201测试输出得时钟,在测试点TP202测试输出得m序列。 1)在TP201观测时钟输出,在TP202观测产生得m序列波形。

图1-1 数据波形图

实验二 WALSH序列产生及特性分析实验 一.实验目得 1。了解Walsh序列得性质与特点; 2。熟悉Walsh序列得产生方法; 3.了解Walsh序列得DSP实现方法。 二.实验内容 1.熟悉Walsh序列得产生方法; 2.测试Walsh序列得波形; 三。实验原理 Walsh序列得基本概念 Walsh序列就是正交得扩频序列,就是根据Walsh函数集而产生.Walsh函数得取值为+1或者—1。图1-3—1展示了一个典型得8阶Walsh函数得波形W1。n阶Walsh函数表明在Walsh函数得周期T内,由n段Walsh函数组成.n阶得Walsh函数集有n个不同得Walsh函数,根据过零得次数,记为W0、W1、W2等等。 t 图2-1 Walsh函数 Walsh函数集得特点就是正交与归一化,正交就是同阶不同得Walsh函数相乘,在指定得区间积分,其结果为0;归一化就是两个相同得Walsh函数相乘,在指定得区间上积分,其平均值为1。 五、实验步骤 1。观测现有得Walsh序列波形 打开移动实验箱电源,等待实验箱初始化完成. 先按下“菜单"键,再按下数字键“1”,选择“一、伪随机序列”,出现得界面如下所示:

dickus单片机实验

数据传送实验 实验项目类型:设计型 实验时间:2012.10.15 一、实验目的 1、掌握单片机的汇编指令系统及汇编语言程序设计方法。 2、掌握单片机的存储器体系结构。 3、熟悉Keil软件的功能和使用方法。 4、掌握单片机应用程序的调试方法。 二、设计要求 1、编写程序将00H~0FH 16个数据分别送到单片机内部RAM 30H~3FH单元中。 2、编写程序将片内RAM 30H~3FH的内容传送至片内RAM 40~4FH单元中。 3、编写程序将片内RAM 40H~4FH单元中的内容传送到外部RAM 4800H~480FH单元中。 4、编写程序将片外4800H~480FH单元内容送到外部RAM 5800H~580FH单元中。 5、编写程序将片外RAM 5800H~580FH单元内容传送回片内RAM 50H~5FH 单元中。 三、实验程序流程框图和程序清单。

流程图 程序一程序二 程序三程序四程序五 程序清单 ORG 0000H MAIN: MOV R0, #30H MOV A, #00H

T1: MOV @R0, A INC R0 INC A CJNE A, #10H, T1 MOV R0, #3FH MOV R2, #10H MOV R1, #4FH T2: MOV A, @R0 MOV @R1, A DEC R0 DEC R1 DJNZ R2, T2 MOV R2, #10H MOV R1, #4FH MOV DPTR, #480FH T3: MOV A, @R1 MOVX @DPTR, A DEC R1 DEC A MOV DPL, A DJNZ R2, T3 MOV DPL, #00H MOV R2, #10H T4: MOV DPH, #48H MOVX A, @DPTR MOV DPH, #58H MOVX @DPTR, A INC DPTR DJNZ R2, T4 MOV R0, #50H MOV DPTR, #5800H MOV R2, #10H T5: MOVX A, @DPTR MOV @R0, A INC R0 INC A MOV DPL, A

重庆大学 单片机实验

实验一系统认识及基本程序设计实验 四、实验内容 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

单片机实验报告

实验报告 专业:计算机科学与技术班级:C093 姓名:孙丽君 学号:098677

实验一:数据传送实验 1.实验内容: 将8031内部RAM 40H—4FH单元置初值A0H—A FH,然后将片内RAM 40H—4FH单元中的数据传送到片内RAM 50H—5FH单元。将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。 2. 源程序清单: ORG 0000H RESET:AJMP MAIN ORG 003FH MAIN:MOV R0,#40H MOV R2,#10H MOV A,#0A0H A1:MOV@R0,A INC R0 INC A DJNZ R2, A1 MOV R1,#40H MOV R0, #50H

MOV R2, #10H A3: MOV A, @R1 MOV @R0, A INC R0 INC R1 DJNZ R2, A3 LJMP 0000H 3.实验结果: 4. CPU 对8031内部RAM存储器有哪些寻址方式? 答:直接寻址,寄存器寻址,寄存器间接寻址,位寻址。

5. 执行程序后下列各单元的内容是什么? 内部RAM 40H~4FH内容:A0~AF 内部RAM 50H~5FH内容:A0~AF 实验二多字节十进制加法实验 1.实验内容: 多字节十进制加法。加数首地址由R0 指出,被加数和结果的存储单元首地址由R1指出,字节数由R2 指出。将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。 2. 源程序清单: ORG0000H RESET: AJMP MAIN ORG0100H MAIN: MOV SP, #60H MOV R0, #31H MOV@R0, #22H DEC R0 MOV@R0, #33H

实验四数据块移动

实验四数据块移动 一、实验目的 1、了解内存中数据块移动方法。 2、掌握分支程序的设计。 二、实验内容 设计一通用数据块间数据搬移程序。 三、编程指南 程序要求把内存中一数据区(称为源数据块)传送到内存另一数据区(称为目的数据块)。源数据块和目的数据块在存贮中可能有三种情况,如下图所示。 对于两个数据块分离的情况,如图(a),数据的传送从据块的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。

可以得出如下结论:当源数据块首址大于目的块首址时,从数据块首地址开始传送数据。当源数据块首址小于目的块首址时,从数据块末址开始传送数据。 四、实验程序框图 五、实验步骤 ? 联机模式: (1)在源数据块4000H~4FFFH中首址、末址几个单元,填入几个标志性字节,按下MON 键,返回P状态。 (2)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM文件夹,点击S8.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。 (3复位RST键,查看目的数据块4100H~4FFFH数据是否和源数据块4000H~4FFFH单元相一致。 脱机模式: ⑴在P.态下,按SCAL键,然后在源数据块4000H~4FFFH中首址、末址几个单元,填入几个标志性字节,按下MON键,返回P状态。 ⑵在P.态下,输入2EF0,按EXEC键。

51单片机实验报告

51单片机实验报告

实验一 点亮流水灯 实验现象 Led灯交替亮,间隔大约10ms。实验代码 #include void Delay10ms(unsigned int c); void main() { while(1) { P0 = 0x00; Delay10ms(50); P0 = 0xff; Delay10ms(50); } }

void Delay10ms(unsigned int c) { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } 实验原理 While(1)表示一直循环。 循环体首先将P0的所有位都置于零,然后延时约50*10=500ms,接着P0位全置于1,于是LED全亮了。接着循环,直至关掉电源。延迟函数是通过多个for循环实现的。 实验2 流水灯(不运用库函数) 实验现象 起初led只有最右面的那一个不亮,半秒之后从右数第二个led

也不亮了,直到最后一个也熄灭,然后led除最后一个都亮,接着上述过程 #include #include void Delay10ms(unsigned int c); main() { unsigned char LED; LED = 0xfe; while (1) { P0 = LED; Delay10ms(50); LED = LED << 1; if (P0 == 0x00) { LED = 0xfe; } } } void Delay10ms(unsigned int c)

实验四 数据块移动[精品文档]

电工电子实验中心 实验报告 课程名称:计算机硬件技术基础实验名称:数据块移动 姓名:学号: 评定成绩:审阅教师:实验时间:2017.05.02 南京航空航天大学

一、实验目的要求 1) 进一歩掌握主程序、子程序设计方法。 2) 掌握人机对话的设计方法。 3) 进一歩熟悉 Tddebug 调试环境和 Turbo Debugger 的使用。 二、实验任务 本实验要求将指定数据区的数据搬移到另一块内存空间中,并通过子程序调用的方法将搬移的数据显示在屏幕上。 源数据块和目标数据块在存储中的位置可能有三种情况,如图2-4-1 所示。对于两个数据块分离的情况,数据的传送从数据块的首地址开始,或者从数据块的末地址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因搬移而遭到破坏。 所以搬移过程可以通过以下两个方式完成: 当源数据块首地址>目标块首址时,从数据块的首地址开始传送数据; 当源数据块首地址<目标块首址时,从数据块的末地址开始传送数据。三、实验代码 STACK1 SEGMENT STACK DW 256 DUP($) STACK1 ENDS DATA SEGMENT MES1 DB 'The data in buf2 are:',0AH,0DH,'$' BUF1 DB 11H,22H,33H,44H,55H,66H,77H,88H,99H,0AAH,0BBH,0CCH,0DDH,0EEH,0FFH,00H BUF2 DB 20H DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF1 MOV DI,OFFSET BUF2 CMP SI,DI;判断数据段的先后顺序,决定首端移动或是尾端移动 JG LABEL1 MOV CX,20H LOOPER: MOV BX,CX MOV CX,SI[BX] MOV DI[BX],CX PUSH DI[BX] INC BX CALL PRINT LOOP LOOPER JMP LAST LABEL1: MOV BX,20H SUB BX,CX MOV CX,SI[BX] MOV DI[BX],CX PUSH DI[BX] DEC BX CALL PRINT LOOP LABEL1 JMP LAST LAST: RET PRINT PROC POP DI[BX] PUSH AX MOV DX,DI MOV AL,02H INT 21H POP AX RET PRINT ENDP CODE ENDS END START

单片机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

解决内存瓶颈问题

解决内存瓶颈问题 由于面向对象化编程的动态链接的特点,用C++完成的DOS程序往往代码比较庞大,占用内存空间较多。而在程序运行过程中,分配大 量内存存储数据是在所难免的。故常规内存资源十分紧张。尤其在大 型的软件运行过程中,一旦内存不够使用,将大大影响软件的可靠性 。因此,有必要在保证内存资源方面找出较好的方案,提高软件的性能。 从当前的国内情况来看,大部分微机都配有4兆以上内存。如果 全部加以利用,软件的内存资源基本上就可以解决了。在利用这部分 内存的方案上,有以下几种: ①用80286/80386保护模式访问。 但这个方案无法被所有的编程人员接受。因为即使是优秀的DOS 编程人员,编写保护模式程序也是相当困难的。 ②用保护模式的接口产品DOS扩展器。 当采用C++编程时,应用DOS扩展器接口跟直接用保护模式编程差不多同样困难。所以这种方法也不利于一般编程人员。 ③用覆盖技术。 假如我们要存放的数据远大于代码,用覆盖技术仍然无法解决。 因此,应该提出更好的方案来。 由EMS(Lotus-Intel-Microsoft Expanded Memory Specification) 规范提供的中断调用,可以用扩展内存模拟扩充内存,具有强大的功能,为利用扩展内存提供了方便;同时,XMS扩展内存规范提供了更 直接的调用途径,不需占用上位内存。但两种规范使用时仍然要处理 许多细节。为此,笔者在开发应用程序的过程中,建立了一个内存管 理类,以相对透明的方式分配扩展内存并存储数据,并具有以磁盘建 立虚存的功能。 二、扩充内存管理类 扩充内存管理类提供了分配扩充内存、转储数据或建立文件缓冲 区的功能。

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); //同实验一,程序不能停。 }

单片机实验报告

实 验 报 告 实验课程:单片机原理及应用 班级: 12自动化2班 学号: 姓名: 教师:张玲 成绩: 实验日期:年月日 实验名称:实验1——计数显示器 一、实验目的: 学习Proteus 软件的使用,掌握单片机原理图的绘图方法。 二、实验内容: 1、绘制“计数显示器”电路原理图; 2、利用提供的hex文件验证此电路的运行效果。 三、实验要求: 提交的实验报告中应包括:1、绘图方法简述,要求说明元件与电源的选取、摆放及属性编辑,总线与标签的画法等内容;2、电路原理图; 3、仿真运行效果展示,要求就仿真文件加载方法及3~4幅运行截图进行简要说明;4、实验小结,说明遇到的主要问题或实验

1体会等。 参考电路原理图如下: 元件类别电路符号元件名称 Microproces sor ICs “U1”80C51 Miscellaneo us “X1”/12MHz CRYSTAL Capacitors“C1”~“C2” /1nF CAP Capacitors“C3”/22μF CAP-ELEC Resistors Packs “RP1”/7-100ΩRESPACK-7 Resistors“R1”/100ΩRES Optoelectro nics “LED1”~ “LED2” 7SEG-COM-CAT-G RN Switches & Relays “BUT”BUTTON 1、编程思路及C51源程序:

2、电路原理图: 3、仿真运行效果展示:

4、实验小结: 熟悉Proteus软件,了解软件的结构组成与功能;学习ISIS模块的使用方法, 学会设置图纸、选元件、线画总线、修改属性等基本操作;学会可执行文件 加载及程序仿法;理解Proteus在单片机开发中的作用,完成单片机电路原 理图的绘制。

单片机实验参考程序

实验一键盘输入实验 参考程序: ;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

内存块移动(单片机)

课程名称:单片机实验 电子信息工程系电信专业班姓名 实验名称内存块移动实验日期2011/10/14 序号39 指导老师实验成绩 一、实验目的和要求 1、实验目的 (1)了解内存的移动方法 (2)加深对存储器读写的认识 2、实验要求 将指定源地址和长度的存储块移到指定目标位置。 二、实验说明 本程序是给出起始地址,用地址加一方法移动块,将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去。移动3000H-4000H,256字节。 三、程序框图

Block equ 3000h mov dptr,#Block ; 起始地址 mov r5,#0 ; 清256字节 mov a, #2 ;将02h写进累加器a中 Loop1: movx @dptr, a inc dptr ; 指向下一个地址 djnz r5, Loop1 ; 记数减一 mov r0, #30h ;将高8位放进寄存器r0 mov r1, #00h ;将低8位放进寄存器r1 mov r2, #40h mov r3, #00h mov r7, #0 Loop2: mov dph, r0 ;将目标数据放进dptr mov dpl, r1 movx a, @dptr ;将dptr所指的片外RAM单元中的内容送到a中 mov dph, r2 mov dpl, r3 movx @dptr, a cjne r1, #0ffh, Goon1 ;比较r1与0ffh是否相等,相等顺序执行,不相等跳转 ;到goon1继续执行 inc r0 ;r0+1→r0 Goon1: inc r1 cjne r3, #0ffh, Goon2 inc r2 Goon2: inc r3 djnz r7, Loop2 ;r1-1→r1,判断r1是否为0,等于0顺序执行,不等于0 ;跳转到loop2继续执行 ljmp $ end 四、实验结果与分析 1、实验程序:

单片机串行通信实验报告(实验要求、原理、仿真图及例程)

《嵌入式系统原理与实验》实验指导 实验三调度器设计基础 一、实验目的和要求 1.熟练使用Keil C51 IDE集成开发环境,熟练使用Proteus软件。 2.掌握Keil与Proteus的联调技巧。 3.掌握串行通信在单片机系统中的使用。 4.掌握调度器设计的基础知识:函数指针。 二、实验设备 1.PC机一套 2.Keil C51开发系统一套 3.Proteus 仿真系统一套 三、实验内容 1.甲机通过串口控制乙机LED闪烁 (1)要求 a.甲单片机的K1按键可通过串口分别控制乙单片机的LED1闪烁,LED2闪烁,LED1和LED2同时 闪烁,关闭所有的LED。 b.两片8051的串口都工作在模式1,甲机对乙机完成以下4项控制。 i.甲机发送“A”,控制乙机LED1闪烁。 ii.甲机发送“B”,控制乙机LED2闪烁。 iii.甲机发送“C”,控制乙机LED1,LED2闪烁。 iv.甲机发送“C”,控制乙机LED1,LED2停止闪烁。 c.甲机负责发送和停止控制命令,乙机负责接收控制命令并完成控制LED的动作。两机的程序要 分别编写。 d.两个单片机都工作在串口模式1下,程序要先进行初始化,具体步骤如下: i.设置串口模式(SCON) ii.设置定时器1的工作模式(TMOD) iii.计算定时器1的初值 iv.启动定时器 v.如果串口工作在中断方式,还必须设置IE和ES,并编写中断服务程序。

(2)电路原理图 Figure 1 甲机通过串口控制乙机LED闪烁的原理图 (3)程序设计提示 a.模式1下波特率由定时器控制,波特率计算公式参考: b.可以不用使用中断方式,使用查询方式实现发送与接收,通过查询TI和RI标志位完成。 2.单片机与PC串口通讯及函数指针的使用 (1)要求: a.编写用单片机求取整数平方的函数。 b.单片机把计算结果向PC机发送字符串。 c.PC机接收计算结果并显示出来。 d.可以调用Keil C51 中的printf来实现字符串的发送。 e.单片机的数码港显示发送的次数,每9次清零。

南航计硬实验四数据块移动实验报告

电工电子实验中心 课程名称:计算机硬件技术基础实验 实验名称:实验四数据块移动 姓名:学号: 评定成绩:审阅教师: 实验时间: 2020.5.7 南京航空航天大学

一.实验目的 1) 进一歩掌握主程序、子程序设计方法。 2) 掌握人机对话的设计方法。 3) 进一歩熟悉 Tddebug 调试环境和 Turbo Debugger 的使用。 二.实验任务 本实验要求将指定数据区的数据搬移到另一块内存空间中,并通过子程序调用的方法将搬移的数据显示在屏幕上。 源数据块和目标数据块在存储中的位置可能有三种情况,如图 2-4-1 所示。对于两个数 据块分离的情况,数据的传送从数据块的首地址开始,或者从数据块的末地址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因搬移而遭到破坏。 所以搬移过程可以通过以下两个方式完成: 当源数据块首地址>目标块首址时,从数据块的首地址开始传送数据; 当源数据块首地址<目标块首址时,从数据块的末地址开始传送数据。三.实验代码 STACK1 SEGMENT STACK DW 256 DUP(0) STACK1 ENDS DATA SEGMENT MES1 DB 'The data in buf2 are:',0AH,0DH,'$' BUF1 DB11H,22H,33H,44H,55H,66H,77H,88H,99H,0AAH,0BBH,0CCH,0DDH,0EEH, 0FFH,00H BUF2 DB 20H DUP(0) DATA ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;以下为补充代码 MOV DS,AX MOV SI,OFFSET BUF1 MOV DI,OFFSET BUF2 MOV CX,0010H CMP SI,DI;判断数据段的先后顺序,确定是首端移动与否 JG L2 ;跳入首端移动代码区 ADD SI,CX ADD DI,CX L1: DEC SI DEC DI MOV AL,[SI] MOV [DI],AL LOOP L1 JMP L3 L2: MOV AL,[SI] MOV [DI],AL INC SI INC DI LOOP L2 JMP L3;搬运完成,跳到显示字符串的程序段中 L3: MOV DX,OFFSET MES1 MOV AH,09H INT 21H MOV CX,0010H MOV SI,OFFSET BUF2 REST: CALL TRANS INC SI MOV DL,20H MOV AH,02H INT 21H LOOP REST MOV AX,4CH INT 21H

相关文档
最新文档