单片机实验四总结报告 2(优秀范文五篇)

时间:2019-05-15 01:31:38下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《单片机实验四总结报告 2》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《单片机实验四总结报告 2》。

第一篇:单片机实验四总结报告 2

单片机实验四报告

直流电机实验实验

一. 实验目的利用 PWM 控制直流电机的转动速度。

二. 实验设备及器件

IBM PC 机 一台

DP-51PRO 单片机综合仿真实验仪 一台

三. 实验内容

学习如何控制直流电机。PWM

功率驱动电路如下:

原理图如图 3.34,只要ZDJ_A 的电压比ZDJ_B 的电压高,电机正转。如果ZDJ_B 的电压比ZDJ_A 高,电机反转。

四. 实验要求

利用实验六的程序,用D1 区的按键KEY2 与KEY3 改变PWM 的占空比来控制直 流电机的转速。

五. 实验步骤

1.用导线连接 A2 区的P11 与D1 区J53 接口的KEY1。

2.用导线连接 A2 区的P12 与D1 区J53 接口的KEY2。

3.用导线连接 A2 区的P10 与B8 区的J78 接口ZDJ_A。

4.B8 区J78 接口的ZDJ_B 连接到C1 区的GND。

5.短接 B8 区JP18 的电机电源跳线。

六. 实验参考程序

#include “reg52.h”

sbit P1_0=P1^0;

sbit P1_1=P1^1;

sbit P1_2=P1^2;

unsigned char PWMH;//高电平脉冲的个数

//总脉冲个数 unsigned char PWM;

unsigned char COUNTER;

void K1CHECK();

void K2CHECK();

void INTTO()interrupt 1//定时器0中断服务程序,在这里控制P1_0口的输出电平,驱动电机

{

COUNTER++;//计数值加1 if((COUNTER!=PWMH)&&(COUNTER==PWM))//如果脉冲计数个数达到了预定的总脉冲个数

{

COUNTER=1;

} P1_0=1;//计数器复位 //P1.0变为高电平1,开始新的下一周期

else if(COUNTER==PWMH)//如果脉冲计数个数达到了预定的高电平脉冲数

P1_0=0;//P1.0输出为高电平1的脉冲个数已经达到,开始变为低电平0

}

main()

{

PWMH=0x02;//预定高电平脉冲个数

COUNTER=0x01;PWM=0x15;//预定总脉冲个数 TMOD=0x02;TL0=0x38;TH0=0x38;ET0=1;EA=1;TR0=1;while(1){if(P1_1==0)K1CHECK();//扫描按键KEY1,如果符合,进入电机转速加速处理函数 if(P1_2==0)//定时器0在模式2下工作 //定时器每200us产生一次溢出,设定自动重装的值。//使能定时器0中断 //使能总中断 //定时器0开始计时

K2CHECK();//扫描按键KEY2,如果符合,进入电机转速减速处理函数

}

}

void K1CHECK()

{

while(P1_1==0);if(PWMH!=PWM){PWMH++;//高电平脉冲个数加1,增加占空比 if(PWMH==PWM)//如果高电平脉冲个数等于总的脉冲个数,{} TR0=0;//关闭定时器,P1_0=1;//P1_0恒输出1,达到最大转速 else {} if(PWMH==0x02)//高电平脉冲个数增加到2时候,开启定时器 {TR0=1;}

}

}

void K2CHECK()

{

unsigned char TEMP;

while(P1_2==0);

if(PWMH!=0x01){PWMH--;//高电平脉冲个数减1,减少占空比TEMP=PWM;TEMP--;if(PWMH==0x01)//如果高电平脉冲个数减少到1,{} else {} if(PWMH==TEMP){} TR0=1;TR0=0;//关闭定时器,P1_0=0;//P1_0恒输出0,电机停止转动

} }

步进电机控制实验

一.实验目的了解步进电机的工作原理,掌握它的转动控制方式和调速方法。

二. 实验设备及器件

IBM PC 机 一台

DP-51PRO 单片机综合仿真实验仪 一台

三. 实验内容

1.编写程序,通过单片机的 P1 口控制步进电机的控制端,使其按一定的控制方式进 行转动。

2.分别采用双四拍(AB→BC→CD→DA→AB)方式、单四拍(A→B→C→D→A)方

式和单双八拍(A→AB→B→BC→C→CD→D→DA→A)方式编程,控制步进电机 的转动方向和转速。

3.观察不同控制方式下,步进电机转动时的振动情况和步进角的大小,比较这几种控 制方式的优缺点。

四. 实验要求

学会步进电机的工作原理和控制方法,掌握一些简单的控制电路和基本的电机基础

知识。

五. 实验步骤

1.安装C10区JP6接口上的短路帽,将C10区J41接口与A2区J61接口的P10~P13 对应相连。

2.打开程序调试软件,下载运行编写好的软件程序,观察步进电机的转动情况。

3.修改步进电机的控制程序,再次运行程序,比较它们的不同控制效果。

六. 实验程序代码

#include “reg51.h”

void DELAY();

main()

{

while(1){

P1=0x08;DELAY();P1=0x0C;DELAY();P1=0x04;DELAY();P1=0x06;DELAY();P1=0x02;DELAY();P1=0x03;DELAY();P1=0x01;DELAY();P1=0x09;DELAY();//A //AB //B //BC //C //CD //D //DA

}

}

void DELAY()

{

unsigned char i,j;

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

for(j=0;j<100;j++);

}

总结:

通过是要进一步熟悉了之前对于51单片机的开发环境,巩固掌握了单片机开发语言的使用以及循环结构的设置及调用。通过上机,将书本上学习到的知识运用到实际中,实际操作的过程中通过修改代码达到改变控制的效果。

第二篇:实验四总结报告

《数据库原理与应用》实验报告

实验名称: 实验四

学号: 班级:

姓名: 软件工程

一、实验目的

(1)了解Oracle数据库中的用户管理,模式,权限管理和角色管理。

(2)掌握为用户分配权限的方法。

(3)了解为不同用户分配不同权限的目的及原因。

二、实验过程

1.用系统帐户sys登录数据库,分别创建数据库内部用户user_one和user_two,创建时自己为用户分配帐户口令。

create user user_one

identified by 980916

default tablespace users

temporary tablespace temp

quota unlimited on users;create user user_two

identified by 980916

default tablespace users

temporary tablespace temp

quota unlimited on users;/ 14

2.为了使两位用户登录数据库请为其授予相应的权限。

grant create session to user_one,user_two;

3.授予用户user_one在自己模式下创建表的权限,在任何模式下删除表的权限,授予用户user_two可以在任何模式下创建表的权限,查询任何模式下表中数据的权限和在任何模式下创建视图的权限。

grant create table,drop any table to user_one;grant create any table,select any table,create any view to user_two;

/ 14 4.分别用user_one和user_two登录,写出相应的SQL语句验证为其授予的权限。(如果建立的表中有主键约束,需要预先授予user_one和user_two用户create any index的权限。)

grant create any index to user_one,user_two;在user_one中建表A create table a(x number,y date);

在user_two中建表B create table b(x number,y date);

在user_two中查询表A select * from user_one.a;3 / 14

从user_one中删除表B drop table user_two.b;在user_two中查询表B Select * fromb;

在user_two中建立视图VIEW_A create view view_a(x,y)

as select x,y

from b;/ 14

5.用系统帐户sys登录数据库,创建用户user_three,将角色权限DBA授予用户user_three,并将S、P、J、SPJ四张表导入到user_three模式下。

create user user_three

identified by 980916

default tablespace users

temporary tablespace temp

quota unlimited on users;grant dba to user_three;/ 14

6.使用user_three登录,完成如下授权,在user_one和user_two用户下执行相应的SQL语句验证授权是否成功。

(1)把对表S的INSERT权力授予用户user_one,并允许他再将此权限授予其他用户。

grant insert on s to user_one with grant option;

在user_one中插入数据

insert into user_three.s(sno,sname,city,sphone)

values('1','a','湖北',null);

commit;

grant insert on user_three.s to user_two;在user_two中插入数据

insert into user_three.s(sno,sname,city,sphone)6 / 14

values('2','b','湖北',null);

commit;

(2)用户user_two对S,P,J三个表有SELECT和INSERT权力

grant select,insert on s to user_two;grant select,insert on p to user_two;grant select,insert on j to user_two;

从user_two中查询表S select * from user_three.s;/ 14

从user_two中给表S插入数据

insert into user_three.s(sno,sname,city,sphone)

values('3','c','湖北',null);

commit;

(3)用户user_one对SPJ表有DELETE权力,对QTY字段具有UPDATE权力。

grant delete,update(qty)on spj to user_one;

在user_one中删除sno为s1的数据

delete from user_three.spj where sno='S1';

commit;/ 14

在user_one中将sno为s2的数据的qty改为0 update user_three.spj set qty=0 where sno='S2';

commit;

(4)收回user_one对S表的插入权限。

revoke insert on s from user_one;

尝试在user_one中插入数据

insert into user_three.s(sno,sname,city,sphone)

values('3','d','湖北',null);

commit;9 / 14

7.把对用户user_two授予的所有权限收回,只保留登录权限。(系统权限和对象权限应该分别收回)

revoke select,insert on s from user_two;revoke select,insert on p from user_two;revoke select,insert on j from user_two;revoke create any index,create any table,create any view,select any table from user_two;

尝试在user_two中创建表C create table c(x number,y date);10 / 14

8.用系统帐户sys登录数据库,创建用户user_four,将角色权限DBA授予此用户,在user_four的模式下导入Sudent、Course和SC表。

create user user_four

identified by 980916

default tablespace users

temporary tablespace temp

quota unlimited on users;grant dba to user_four;/ 14

9.使用user_four登录,创建角色STUDBA,将修改Student、Course、SC表结构的权限,插入、删除、修改和查询三张表中数据的权限授予角色STUDBA,将角色的权限授予user_one和user_two。

create role studba;grant alter,insert,delete,update,select on s to studba;grant alter,insert,delete,update,select on c to studba;grant alter,insert,delete,update,select on sc to studba;grant studba to user_one,user_two;commit;/ 14

10.对于通过STUDBA角色授予的权限,在user_one和user_two用户下执行相应的SQL语句对权限进行验证。

修改表权限验证

alter table user_four.c add collage varchar2(40);commit;select * from user_four.c;

更新数据验证

update user_four.s set major='软件工程' where major='植物保护';select * from user_four.s where major='植物保护';

插入数据验证 / 14

insert into user_four.sc(sno,cno,grade)values(103000,300,100);commit;select * from user_four.sc where sno=103000 and cno=300;

删除数据验证

delete from user_four.sc where sno=103000 and cno=300;commit;select * from user_four.sc where sno=103000 and cno=300;

三、实验总结 / 14

第三篇:单片机总结报告

单片机总结报告

——IC卡

小组成员:刘绍凯

06291043

刘永欢

06291044

一、实验设备

………..二、实验原理

刘中芳

06291045

如硬件连接图所示,本系统可分为如下几个模块:

单片机80C196模块(复位、晶振电路,电源电路)显示模块

键位模块

IC卡(24C01)模块

80C196单片机的外围电路:复位P22 80196内部的振荡电路是一个单级非门电路,它与石英晶体配合时,可以组成一个振荡器,构成单片机所需要的时钟。

显示见预习

键位见预习

IC卡见预习及资料

三、设计框图

四、程序

五、调试过程

虽然最后还是做出来了,但做的过程还是挺复杂的。

(1)将wave6000仿真软件复位后有如下没注意到的语法错误.:

1.AX

EQU

20H 错误提示:“行:1,错误334:重复定义:AX

错误原因是AX寄存器在仿真软件里的设置汇编预定义符号里已经定义过了。解决办法一是去掉相对应的伟福预定义寄存器,二是将源程序里的寄存器定义去掉。

2.LDB

AX,OEH 错误原因将寄存器地址单元0E写成了OEH,应将大写字母O改为0(2)分步调试单步执行,断点

3.首先检查程序运行后4个显示数码管是否都有显示,再看其显示是否合乎要求。

按地址键时,发现低两位数据每次在加1,说明控制四个字位的寄存器的顺序不对,控制数码管从高到低依次应是HSO.0~HSO.3; 4.源程序运行后,发现数码管的高两位数据一直在加1。

错误原因:当任意一个按键按下去后,给P0口送的是低电平,而我们编的程序恰恰相反,应该是让P0.0~P0.3检测到低电平时跳转到相应的子程序。

5.每按下一次地址键或数据键时,有时要跳好几个数,不能连续地变化。

源程序如下:DATA:

LCALL

DL1

JBS

0EH,0,SCAN DL1:

LDB

25H,#80 H1:

NOP

NOP H2:

LDB

AX,#200

NOP

NOP

DJNZ

AX,H2

DJNZ

25H,H1

RET

错误原因是设置按键的延时时间不够长,而且当一次长时间按时,会出现数据一直往前跳的情况。要消除此种现象,我们运用了如下的程序:DAT: LCALL DL1

JBC 0EH,0,DAT 6.当按下数据键后,显示的数据会往下加,但当按下写键后,数据又变为写之前的数据。说明WR子程序,改变了DATABUF里面的数据。经过我们的仔细检查后发现在写子程序里有如下两句语句: LCALL

READ LD

DATABUF,READDATA 它们的作用是将IC卡当前地址中的数据读到数码管中,但此时更改后的数据还没被写入到IC卡中。应该将它们去掉或放在调用写子程序的后面。6.每次读出来的数据都是FF。而且将更改后的数据写入当前的地址时,当程序复位后再找到该地址时,没有显示之前写入的数据,而仍然是FF。说明无法对IC卡进行读/写操作。此时我们耐心地从每个与读和写有关的子程序查起,发现数据子程序,地址子程序,写子程序,还有发送起始信号,结束信号,SDA及SCK信号均无异常。

此时我们想到了先单步执行,然后到写和读子程序时跟踪执行,注意到了当前更改后的数据确实是存到了DATABUF,而当前的数据却没有进入到READDATA,说明数据没能够进入到IC卡中,也没有从IC卡中读出来。而读时序和写时序我们也都检查了几遍了,也都符合24C01的规定。此时,我们只有找到指导老师,老师帮我们看了一下程序后,发现也没什么地方有问题,就觉得应该是IC卡有问题。所以给我们换了一张卡,然后我们试了一下,发现果然能对IC卡进行读写了,而且每次读出来的数据都是随机的。

到此,已能对IC进行正常地读/写了,调试完毕了!

六、设计心得

俗话说“好的开始是成功的一半”。我认为最重要的就是做好设计的预习,我们首先搜索到了IC卡的相关资料,弄清楚了单片机对该IC卡进行读和写的工作过程。明白了读写器件寻址地址、起始信号和结束信号在读和写的过程中所发挥的作用。然后通过编写程序,知道了硬件的接口是如何进行连接的,进而使我加深了对整个系统工作原理的理解。

其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去调试,到头来所做的工作都是白费。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。

另外,我也学到了一些调试程序的小技巧。比如,如何设置断点进行调试程序。还有在“单步运行”、“跟踪执行”时观察单片机内各寄存器内容和状态用以检验目标程序是否正确、以及硬件系统的连线及功能是否正确。

软件的编程要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求工作起来。

当然,这其中也有很多问题,第一、不够细心比如对课本理论的不熟悉导致编程出现错误。第二,是在学习态度上,这次课设是对我的学习态度的一次检验。对于这次单片机课程设计,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次实习所遇到的多半问题多数都是由于我们不够严谨。第三,是知识学得比较死,不会灵活地运用,不会举一反三。第四,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。

实践证明,通过该课程设计,不仅提高了学生学习的兴趣,加深了对专业知识的理解,开阔了视野,也为以后毕业设计打下良好的基础。单片机课程设计这一实践教学环节的有效开展,有助于学生有效地掌握所学知识,缩短从理论知识到实际应用的过程,很好地培养了我们对专业的兴趣,增强了学生的创新意识,提高了学生的动手能力和实际应用能力。

我认为,学编程读别人的程序非常重要,每个人都有不同的思维,相同的任务却有很多不同的方法,在每个程序里都能找到些经典的段子,让人回味。从中可以学到很多的方法,并且有些可以直接的引用。一个出色的程序员在编程时,并不是从零开始,而应该是先找出类似的例子进行分析,参考,看看有没有值得引用和借鉴的地方,加以修改,为自己所用。实践证明,这样做是对的。

当然,努力归努力,方法也很重要。在这里,我总结一下,与大家共勉:

1、基本功要杂实,要有一定的数模电基础。学单片机首先要搞清楚它的基本结构和存储单元的分配。

4、多读有代表性的程序,读得多了自然就会学到很多的好方法。可买本单片机子程序集看看,也可网上下载程序分析。

5、多泡泡单片机相关的论坛,与大家多交流交流,单片机完全可以自学的。

我觉得以上几点相当重要,因为它对我帮助很大,算是将我领进了单片机的大门,以至于我学起来不那么吃力,没有感觉到像大家说的那样的难。我看过很多的程序,也调试过很多的程序,每一次收获都不小。我的实验室就是KEIL和PROTEUS。这使我做实验很方便。虽是虚拟的,但调试程序还是可以的,省去了很多的时间提高了效率。最近我在学CX51,因为学单片机掌握C语言是非常重要的,C语言的通用性对学习其它类型的单片机有很大的帮助。今后,我想做嵌入式系统工程师,想学ARM,想搞操作系统。所以我现在必须打好基础,这样才能进步。

通过这种途径的实践教学活动,我们将前几年所学的知识综合起来了,将所学的知识应用于实践中去了。这样,到了社会上我们就更

有竞争力了。

实践证明,通过该课程设计,不仅提高了学生学习的兴趣,加深了对专业知识的理解,开阔了视野,也为以后毕业设计打下良好的基础。单片机课程设计这一实践教学环节的有效开展,有助于学生有效地掌握所学知识,缩短从理论知识到实际应用的过程,很好地培养了学生的专业兴趣,增强了学生的创新意识,提高了学生的动手能力和实际应用能力。

第四篇:单片机实验

实验

一、MCS51单片机基本开发环境

1. 实验目的:

1)熟悉软件的集成开发环境 2)掌握单片机软件设计流程

3)掌握单片机存贮器结构及各窗口之间的联系 2. 实验内容:

1)用三种方法实现将累加器A内容改为20H

方法1--MOV A,#20H 方法2—MOV R0,#20H MOV A,R0 方法3—MOV R0,#20H XCH A,R0 心得:越往下做实验时就越感觉这题根本不能说是题目,但不得不说在没接触过编程软件,刚开始学的汇编,第一次做的实验就光这道题都觉得不知道做什么.所以凡是总有开始,不了解情况的多简单的都会觉得难.2)将58H位单元置为1,观察内部RAM中2BH内容的变化 代码:

SETB 2BH.0 JMP $ END 心得:这是关于内部存储中对单元和字节了解,不理解很容易做错.比如开始写的指令为

MOV R0,#58H;MOV @R0,#1

这是错误的指令。这就需要认真去了解单片机中的字节地址与位地址的关系。80C51中有位寻址区和字节寻址区。题目中58H为位地址,2BH为字节地址,且58H为2B字节的最低位。由于58H属于位寻址区,可用位操作指令 SETB 进行置位,SETB 2BH.0 执行后,2BH中内容变为01

3)如果当前状态为有进位、工作寄存器使用区2,请用3种方法设置这种状态

代码:

ANL PSW,#01H MOV A,PSW

CJNE A,#01,LAB2 LAB1:JMP LAB1

LAB2: SETB PSW.4 MOV P0,#01H MOV R0,#18H CLR PSW.3 MOV C,P0.0 MOV PSW,R0 MOV PSW.4,C CPL C MOV PSW.3,C END

心得:以上LAB2写了三段代码,可分别完成题目要求。不过实验时只是对代码进行了错误调试,没有对结果进行检验。其中值得注意的是对于布尔(位)操作指令的用法,比如传送指令必须经累加器C,如第二段中MOV P0,#01H;MOV C,P0.0,以及对于位寻址的方式(如需用到“.”隔开)的应用。4)编一个小程序将内部RAM中的20H单元的内容送到21H单元并调试

代码:

MOV R0,#20H MOV @R0,#10H MOV R1,#21H MOV @R1,20H JMP $ END

5)用程序将堆栈指针指向60H,然后在堆栈中依次压入01,02,03,04,05五个数,观察哪些单元内容发生了变化,各变为多少?从哪些窗口可以发现这些变化?顺序将堆栈中的五个数放入30H~34H五个单元中,编程实现之。

代码:

MOV R1,#60H MOV SP,R1 MOV DPL,#1H LAB1:PUSH DPL INC DPL MOV A,DPL CJNE A,#6,LAB1 POP 34H POP 33H POP 32H POP 31H POP 30H JMP $ END

6)将外部数据存贮器1000H~100FH 16个单元中存放00H~0FH 代码:

MOV DPTR,#1000H MOV R1,#10H LOOP:MOVX @DPTR,#1234H MOVX A,@DPTR MOV @R1,A INC DPTR INC R1 CJNE R1,#40H,LOOP JMP $ END

心得:此处需要访问片外存储空间,需要借助寄存器DPTR,需注意其为16位的寄存器,在使用时若与八位寄存器进行数据交换时需分为高八位DPH与低八位DPL来用。7)若要求程序从0010H单元开始运行,可用两种方法实现?

方法一 ORG 0010H 方法二 AJMP 0010H

3. 选做实验内容:数据传送 目的:

1)掌握8051单片机内部数据存贮器、外部数据存贮器的数据传送特点和应用 2)掌握MOV,MOVX和MOVC类指令的用法及区别 内容:

1)将片内RAM数据区20H为首地址的十六个字节传送到30H为首地址的数据区,即:20H~2FH送30H~3FH

代码: ORG 0000H JMP MAIN ORG 0030H MAIN:MOV R0,#20H MOV R1,#30H LOOP:MOV @R0,#1234H MOVA,@R0 MOV @R1,A INC R0 INC R1 CJNE R1,#30H,LOOP JMP $ END

2)将外部数据存储器2000H~200FH单元的十六个数传送至内部数据存储器的30H~3FH 代码: ORG 0000H JMP MAIN ORG 0030H MAIN: MOV DPTR,#2000H MOV R1,#30H LOOP:MOVX @DPTR,#12H MOVX A,@DPTR MOV @R1,A INC DPTR INC R1 CJNE R1,#40H,LOOP JMP $ END

总体心得体会:

第一次做实验主要是熟悉了解了下单片机编程软件的使用,开始接触时在对其软件不是太了解的情况下实验编程做的确实很乱,不清楚该怎样进行,比如不知如何进行对指令的调试,也不清楚该如何观察结果,没有一个整体的概念,所以在了解其开发环境上花了不少时间。经过一段时间的摸索后也终于了解了其具体的使用,也能够顺利的对指令的编程运用。运行指令时遇到的一些问题需要注意的也在上面各题中做了说明。还有需要注意的是:进入软件仿真时需要对存储空间进行查看的方法是在Address窗口中输入:d:00h 显示内部数据存储器从00h开始的单元; x:1000h 显示外部数据存储器从1000h开始的单元; c:0000H 显示程序存储器内容。还有由于伪指令 END 定义的原因,在程序末需加一条死循环调转指令(如 JMP $)使程序不会进入其他未知空间执行其他指令。实验

二、加、减法实验

1. 实验目的

1)正确使用单片机的加减运算指令

2)掌握不同指令对于程序状态字的影响及程序状态字的意义、用处 3)掌握ADD,ADDC,SUBB和DA A等指令的用法 4)学习模块化程序设计方法 2. 实验内容

1)编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性。需考虑有进位和无进位情况。程序入口为: 加数:22H,21H,20H三字节,22H为最高位

被加数:32H,31H,30H三字节,32H为最高位

程序出口为: 23H,22H,21H,20H四字节,23H为最高位 例如:地址:23 22 21 20 32 31 30 执行前数据: 01 23 45 FF 01 01 执行后数据:01 00 24 46

代码:

ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 22H,#01H MOV 21H,#23H MOV 20H,#45H MOV 32H,#0FFH MOV 1H,#01H MOV 30H,#01H ACALL ADDI HERE:JMP HERE ORG 100H ADDI: PUSH PSW MOV R0, #20H;加数1地址、和的地址 MOV R1, #30H;加数2地址 CLR C MOV R2, #3;循环3次 LOOP: MOV A, @R0;取 ADDC A, @R1;加 MOV @R0, A;存 INC R0 INC R1 DJNZ R2, LOOP CLR A ADDC A, #0;得到进位 MOV 23H, A;保存 POP PSW RET END

2)编写三字节二进制减法子程序 入口:被减数: 52H,51H,50H, 50H为最低位

减数: 42H,41H,40H, 40H为最低位

出口:差:外部数据存贮器2003H~2000H(2000H为最低位)用主程序调用多组数据来调试,需考虑无借位和有借位两种情况。例如:

执行前:地址: 52 51 50 42 41 40

数据: 90 80 70 10 10 10

执行后:地址: 2003 2002 2001 2000

数据: 00 80 70 60 代码:

ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 52H,#90H MOV 51H,#80H MOV 50H,#70H MOV 42H,#10H MOV 41H,#10H MOV 40H,#10H ACALL SUB1 HERE:JMP HERE SUB1: PUSH PSW MOV R0, #50H;被减数地址 MOV R1, #40H;减数地址 MOV DPTR, #2000H;差的地址 CLR C MOV R2, #3;循环3次 LOOP: MOV A, @R0;取 SUBB A, @R1;减 MOVX @DPTR, A;存 INC R0 INC R1 INC DPTR DJNZ R2, LOOP CLR A SUBB A, #0;得到借位 MOVX @DPTR, A;存 POP PSW RET END

3)编写10位十进制加法子程序(十进制数采用压缩BCD码存放)入口: 加数:24H—20H,低地址放低字节

被加数:29H—25H,低地址放低字节

出口 和:4005H—4000H,低地址放低字节

要求调用多组数据调试,注意观察PSW的变化,理解DA A指令的含义。例如:

执行前地址:24 23 22 21 20 29 28 27 26 25

数据:12 34 56 78 90 88 99 33 12 74

执行后地址:4005 4004 4003 4002 4001 4000

数据: 01 01 33 89 91 64

代码:

ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 24H,#12H MOV 23H,#34H MOV 22H,#56H MOV 21H,#78H MOV 20H,#90H MOV 29H,#88H MOV 28H,#99H MOV 27H,#33H MOV 26H,#12H MOV 5H,#74H ACALL ADD2 HERE:JMP HERE ADD2: PUSH PSW MOV R0, #20H;加数1地址 MOV R1, #25H;加数2地址 MOV DPTR,#4000H CLR C MOV R2, #5;循环5次 LOOP: MOV A, @R0;取 ADDC A, @R1;加

DA A;调整为BCD码 MOVX @DPTR, A;存 INC R0 INC R1 INC DPTR DJNZ R2, LOOP POP PSW RET END

第五篇:单片机实验

实验一清0、移数

将片内20H~2FH及片外0010H~001FH单元清0;

然后将片内30H~3FH的数据移到片外0000H~000FH中;判断:

若(30H)≤10,则求其平方存到31H中,并将位00H置1(其它位清0)若(30H)=10,则将AA存到31H中,并位01H置1(其它位清0)若(30H)≥10,则减10存到31H中,并位02H置1(其它位清0)

实验二加法、排序

有两个长度为10的无符号数分别放在片内20H和30H为首的存储单元中(低位),求其对应项之和(带进位位),结果放在40H为首的单元中(若最高位有进位则存在后续单元中),然后按升序排列放在50H为首的单元中

实验三查表、散转

设有一表格,表中数为:00H、11H、22H、33H、44H、55H、66H、77H、88H、99H、AAH、BBH、CCH、DDH、EEH、FFH。根据片外0001H单元的低4位的数,取出表中相应的值存到片内30H中;根据片外0001H单元的高4位的数,将片内RAM区中可位寻址的相应的位置1(从位00H~位0FH,只可有一个位地址为1)

实验四外中断

P1.0~P1.7接8个发光二极管,管脚INT0、INT1接两个按键,分别定义为“L”和“R”。

要求:上电全灭,按 “L”(或R)键,最右(左)侧灯亮,每按一次“L” ”(或R)键,则亮的灯向左(右)移一位,当移到最左(右)端时,灯全灭

实验五定时器

P1.0、P1.1分别接两个发光二极管,INT0脚接

一按键做开关,按一次开关,则启动,两个发

光管一亮一灭,亮灭时间均为1秒;再按一次

开关,则关闭,即两个发光管都灭。

实验六定时器、计数器

P3.2口输出周期为2S的方波,T1口为脉冲输入端,记录输入的脉冲个数,脉冲个数由P1口所接的8个数码管显示(二进制),设一按键作为开关控制系统运行,关闭时数码管全灭,P3.2无输出。

下载单片机实验四总结报告 2(优秀范文五篇)word格式文档
下载单片机实验四总结报告 2(优秀范文五篇).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    单片机实验总结

    单片机原理及接口技术实验总结 本学期的单片机实验转眼已到尾声,共做了六项实验,分别是KEIL4、ISP下载软件的安装于使用、P1口输出循环灯实验、P1口转弯灯实验、P3.3口输入......

    单片机液晶显示实验

    实验八 单片机液晶显示实验 一、实验目的 1、了解液晶显示屏的控制原理及方法。 2、了解点阵汉字的显示原理。 二、实验说明 1、 利用实验上的液晶显示屏电路,编写程序控制......

    单片机实验小结

    单片机实验小结 这学期的单片机实验课程已经结束了,虽然做的实验是比较简答的,但麻雀虽小五脏俱全,因此自己也通过实验课学到了很多知识。 单片机实验课是为了更好的学习单片机......

    单片机实验心得体会

    单片机实验心得体会 单片机实验心得体会一:单片机实验心得体会 时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。在学习单片机这门课程之前,就早早的......

    单片机实验指导书

    单片机实验指导书实验说明实验1:定时控制实验 要求:电路连接与编程相结合,控制灯按一定规律点亮和熄灭。 注意:灯为低电平驱动。 实验报告:说明灯亮的方式;画出实际电路图、程序流......

    单片机实验三

    实验三 单片机I/O口控制程序实验 一、实验目的和要求: 掌握单片机串行传输输入输出的应用方法。 二、实验设备: 安装了THGY51的计算机,单片机实验箱。 三、实验内容和步骤: 1、......

    单片机实验心得体会

    单片机实验心得体会 时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。 在学习单片机这门课程之前,就早早的听各种任课老师和学长学姐们说过这门课程......

    单片机实验安排

    单片机实验安排: (实验前四次 每次做3节课,后两次 每次四节课 ) 第一组17班1-20号星期二上午第二组17班22-45号星期二晚上第三组16班1-21号星期四晚上 前三组实验时间:11—16周......