单片机实验前七个实验.docx

上传人:b****2 文档编号:2572322 上传时间:2023-05-04 格式:DOCX 页数:22 大小:442.62KB
下载 相关 举报
单片机实验前七个实验.docx_第1页
第1页 / 共22页
单片机实验前七个实验.docx_第2页
第2页 / 共22页
单片机实验前七个实验.docx_第3页
第3页 / 共22页
单片机实验前七个实验.docx_第4页
第4页 / 共22页
单片机实验前七个实验.docx_第5页
第5页 / 共22页
单片机实验前七个实验.docx_第6页
第6页 / 共22页
单片机实验前七个实验.docx_第7页
第7页 / 共22页
单片机实验前七个实验.docx_第8页
第8页 / 共22页
单片机实验前七个实验.docx_第9页
第9页 / 共22页
单片机实验前七个实验.docx_第10页
第10页 / 共22页
单片机实验前七个实验.docx_第11页
第11页 / 共22页
单片机实验前七个实验.docx_第12页
第12页 / 共22页
单片机实验前七个实验.docx_第13页
第13页 / 共22页
单片机实验前七个实验.docx_第14页
第14页 / 共22页
单片机实验前七个实验.docx_第15页
第15页 / 共22页
单片机实验前七个实验.docx_第16页
第16页 / 共22页
单片机实验前七个实验.docx_第17页
第17页 / 共22页
单片机实验前七个实验.docx_第18页
第18页 / 共22页
单片机实验前七个实验.docx_第19页
第19页 / 共22页
单片机实验前七个实验.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机实验前七个实验.docx

《单片机实验前七个实验.docx》由会员分享,可在线阅读,更多相关《单片机实验前七个实验.docx(22页珍藏版)》请在冰点文库上搜索。

单片机实验前七个实验.docx

单片机实验前七个实验

实验一清零程序

一、实验目的

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

二、实验内容

把7000H—70FFH的内容清零。

三、实验程序框图

开始

 

RO=00H

00送到7000H

 

DPTR+1,R0+1

N

RO=FFH

Y

结束

 

四、实验步骤

1、当DVCC单片机仿真实验系统独立工作时

(1)将固化区EPROM中实验程序目标码传送到仿真RAM区,操作如下:

输入0后按F1键,再输入0FFF后按F2键,再输入0后按EPMOV稍等,系统返回初始状态,显示“P”。

(2)通过键盘输入实验程序的起始地址0030H,再按执行键区EXEC,表示连续运行该程序,稍候,按RESET键退出运行;如果以单步运行程序,则输入0030H后,按STEP,按一次执行一条语句,直到执行到003CH为止,按MON键退出运行;如果以断点运行程序,则先输入003CH(断点地址),再按F1键,再输入0030(起始地址),然后按EXEC键执行程序,当执行到003CH时自动停下来,此时按MON键退出。

(3)用存储器读写方法检查7000H~70FFH中的内容应全是00H(实验箱初始化显示“P.”时,输入7000,按下MEM键,显示器上即可显示7000这个存储单元的内容)。

2、当DVCC仿真实验系统联PC机时

(1)在闪动“P.”状态,按PCDBG键

(2)在PC机处于在WIN2000/XP软件平台下,点击DVCC实验系统图标

(3)系统进入51动态调试状态,如图1.1所示

图1。

1

(4)点击连接DVCC实验系统(CTRL+H)

(5)装载目标文件(CTRL+L)

(6)从起始地址开始连续运行程序(F9)

(7)连续运行完成后,在存储器窗口内检查7000H~70FFH中的内容是否全为00H。

五、思考

假使要把7000~70FFH中的内容改成FF,如何编制程序。

源文件名:

CLEAR.ASM

ORG0030H

CLEAR:

MOVR0,#00H

MOVDPTR,#7000H

CLEAR1:

CLRA

MOVX@DPTR,A

INCDPTR

INCR0

CJNER0,#00H,CLEAR1

SJMPCLEAR

END

实验二BCD码求和

实验源代码:

ORG00H

MOVR7,#03H

MOVR0,#30H

MOVR1,#34H

MOV30H,#68H

MOV31H,#55H

MOV32H,#98H

MOV34H,#55H

MOV35H,#23H

MOV36H,#64H

BCDA:

MOVA,R7;取字节数至R2中

MOVR2,A

ADDA,R0;初始化数据指针

MOVR0,A

MOVA,R2

ADDA,R1;高位字节相加

MOVR1,A

CLRC

BCD1:

DECR0;调整数据指针

DECR1

MOVA,@R0

ADDCA,@R1;按字节相加

DAA;十进制调整

MOV@R0,A;和存回[R0]中

DJNZR2,BCD1;处理完所有字节

SJMP$

END

实验三多路开关状态指示

1.实验内容

AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。

(开关闭合,对应的灯亮,开关断开,对应的灯灭)。

2.电路原理图

3.系统板上硬件连线

(1.把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4端口上;

(2.把“单片机系统”区域中的P1.4-P1.7用导线连接到“四路拨动开关”区域中的K1-K4端口上;

4.程序设计内容

(1.开关状态检测

对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用JB P1.X,REL或JNB P1.X,REL指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用MOV A,P1指令一次把P1端口的状态全部读入,然后取高4位的状态来指示。

(2.输出控制

根据开关的状态,由发光二极管L1-L4来指示,我们可以用SETB P1.X和CLR P1.X指令来完成,也可以采用MOV P1,#1111XXXXB方法一次指示。

5.汇编源程序

方法一

ORG00H

START:

MOVA,P1

ANLA,#0F0H

RRA

RRA

RRA

RRA

ORlA,#0F0H

MOVP1,A

SJMPSTART

END

方法二

ORG00H

START:

JBP1.4,NEXT1

CLRP1.0

SJMPNEX1

NEXT1:

SETBP1.0

NEX1:

JBP1.5,NEXT2

CLRP1.1

SJMPNEX2

NEXT2:

SETBP1.1

NEX2:

JBP1.6,NEXT3

CLRP1.2

SJMPNEX3

NEXT3:

SETBP1.2

NEX3:

JBP1.7,NEXT4

CLRP1.3

SJMPNEX4

NEXT4:

SETBP1.3

NEX4:

SJMPSTART

END

实验四子程序设计----BCD码转换为二进制

单字节可存放两位压缩BCD码(0—99)

B=D1×10+D0(D1,D0为0—9)

十位个位

单字节BCD码转换为二进制子程序

入口:

(R0)=压缩BCD码的地址

出口:

(A)=转换结果

DSFR:

MOVA,@R0

ANLA,#0F0H;取十位数

SWAPA;变为标准BCD码

MOVB,#10

MULAB;(A)=D1×10

MOVR7,A;D1×10暂存R7

MOVA,@R0

ANLA,#0FH;取个位

ADDA,R7;A=D1×10+D0

RET

1、实验内容

四位压缩BCD码存在20H21H单元D=D3D2D1D0

D=D3×1000+D2×100+D1×10+D0

=(D3×10+D2)×100+D1×10+D0

结果存放30H31H

 

R0,R1赋初值

调用DSFR子程序;求D3×10+D2

A×100结果存30H31H

INCR0

ACALLDSFR

结果加到30h31H

DSFR子程序

 

子程序设计要点:

子程序一般为多次返复使用的程序段,一般应说明入口条件,DSFR子程序的入口条件是:

被转换为二进制的单字节BCD码为间接寻址,间接寻址寄存器为R0。

要调用DFSR子程序必需先将压缩BCD码的存放地址赋与R0。

而出口条件是指最后结果在哪儿存放。

本子程序转换结果在ACC内。

主程序调用子程序,在调试时一般要先调试子程序、再调试主程序。

2、实验步骤

1)打开PV32编程序。

汇编正确进入调试界面。

否则修改程序重新汇编直到通过。

2)打开DATD窗口给20H、21H、R6、R7赋值

3)单步调试DSFR子程序观察并记禄寄存器、内存的变化。

判断程序是否正确。

若发现问题重返编辑界面,修改、存盘、汇编。

返回调试界面调试通过。

4)设断点调试主程序观察并记禄寄存器、内存的变化。

判断程序是否正确。

若发现问题重返编辑界面,修改、存盘、汇编。

返回调试界面调试通过。

3.实验报告

1)写出主程序流程图、子程序流程图、程序清单

2)根据记渌数据给程序加注解

3)调试心得

实验五数制转换子程序

单字节二进制数转换为三位数的BCD码

B=D2×100+D1×10+D0

单字节二进制数应转换为BCD子程序

入口:

(A)=二进制数

出口:

(R0)=十位数和个位数的地址

DRFS:

MOVB,#100

DIVAB;(A)=百位数

MOV@R0,A;存入RAM单元

INCR0

MOVA,#10

XCHA,B

DIVAB;(A)=十位、(B)=个位

SWAPA

ADDA,B;个位、十位拼字

MOV@R0,A;存入RAM

RET

END

1、实验内容

将FFH转换为压缩BCD码存入内部

RAM20H.21H单元(高位在前)

FFH送ACC

R0赋初值20H

调用DRFS

DRFS子程序

SJMP$

2、实验步骤

1)打开PV32编程序。

汇编正确进入调试界面。

否则修改程序重新汇编直到通过。

2)打开DATD窗口20H21H清零。

3)单步调试观察并记禄寄存器、内存的变化。

判断程序是否正确。

若发现问题重返编辑界面,修改、存盘、汇编。

返回调试界面调试通过。

4)设断点调试、记禄结果。

3、实验报告

1)写出程序流程图、程序清单

2)根据记渌数据给程序加注解

3)调试心得

实验六循环程序设计

1、实验内容:

三字节加法

加数存放在内部RAM20H21H22H,被加数存放在28H29H2AH,结果存放在28H29H2AH。

多字节加法用ADDCA,@R1连续使用之三次。

第一个字节使用时要先清进位位C第二、第三字节使用时需要调整加数、被加数的取数地址。

连续取数或连续送数一般用间接寻址。

间接寻址要先赋初值再使用,赋初值的语句要在循环体之外避免出现死循环。

间接寻址地址调整用INC(连续增加),用DEC(连续减小)判断循环次数有多种方法:

1)DJNER7,LOP;R7内存循环次数,LOP为跳转地址。

R7要先赋初值。

2)CJNER7,#3,LOP

3)DECR7

MOVA,R7

2、实验步骤

1)打开PV32编程序。

汇编正确进入调试界面。

否则修改程序重新汇编直到通过。

2)打开DATD窗口给加数、被加数赋值

3)单步调试观察并记禄寄存器、内存的变化。

判断程序是否正确。

若发现问题重返编辑界面,修改、存盘、汇编。

返回调试界面调试通过。

4)设断点调试、记禄结果。

5)若将单字节加法作为子程序改写程序重新调试比较两种方法结果是否一致

3、实验报告

1)写出程序流程图、程序清单

2)根据记渌数据给程序加注解

3)调试心得

实验七多重循环程序设计----闪烁灯

方法一

1.实验内容

在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。

2.电路原理图

3.系统板上硬件连线

把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。

4.程序设计内容

(1).延时程序的设计方法

作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?

下面具体介绍其原理:

石英晶体为12MHz,因此,1个机器周期为1微秒

机器周期微秒

MOVR6,#20

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

因此,上面的延时程序时间为10.002ms。

由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。

如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:

DELAY:

MOVR5,#20

D1:

MOVR6,#20

D2:

MOVR7,#248

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

(2).输出控制

当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。

5.程序框图

开始

P1.0输出1,L1熄灭

延时0.2秒

P1.0输出0,L1

延时0.2秒

6.汇编源程序

ORG0000h

START:

CLRP1.0

LCALLDELAY

SETBP1.0

LCALLDELAY

LJMPSTART

DELAY:

MOVR5,#20;延时子程序,延时0.2秒

D1:

MOVR6,#20

D2:

MOVR7,#248

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

END

方法二

1、实验内容

1)利用100毫秒为循环体,写一个1秒的三重循环程序

2)写一个1毫秒的子程序,然后调用子程序写一个延时1秒的程序。

3)如果单片机的机器周期为2个微秒改写程序。

2、实验原理

1秒定时子程序

单片机每执行一条程序需要1--4个机器周

期因此利用该性质可以实现软件定时。

最筒单

的软件定时程序用NOP和DJNZ循环指令完成。

R5,R6,R7赋初值

假定单片机的机器周期为1微秒则

MOVR7,#O9H;1

LOP:

NOP;1

DJNZR7,LOP;2N

RET;2

T=1+9×3+2=30微秒Y

恢复R7初值

MOVR7,#250;1

LOP:

NOP;1

N

NOP;1

DJNZR7,LOP;2

RET;2T=1毫秒

每循环一次4微秒循环250次1毫秒Y

恢复R6初值

此为单循环。

利用循环嵌套可以实现较长时间的定时

MOVR6,#100;1

MOVR7,#250;1N

LOP1:

NOP

NOPY

RET

DJNZR7,LOP1;T=1毫秒Y

MOVR7,#250;1

DJNZR6,LOP1;2

RET;2

将1毫秒作为循环体利用R6循环执行100次,执行时间为100毫秒。

此为2重循环。

注意内循环完成后R7=0,下次循环若还要执行250次R7必须重新赋值250,否则循环次数为256。

3、实验步骤

1)打开PV32编程序。

汇编正确进入调试界面。

否则修改程序重新汇编直到通过。

2)打开SFR窗口给R6、R7赋值

3)设断点调试观察并记渌寄存器的变化。

判断程序是否正确。

若发现问题重返编辑界面,修改程序重新汇编直到通过。

4)用子程序改写程序重新调试比较两种方法结果是否一致

4、实验报告

1.写出程序流程图、程序清单

2.根据记渌数据给程序加注解

3.调试心得

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2