单片机原理及应用实验指导书.docx

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

单片机原理及应用实验指导书.docx

《单片机原理及应用实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用实验指导书.docx(30页珍藏版)》请在冰点文库上搜索。

单片机原理及应用实验指导书.docx

单片机原理及应用实验指导书

实验一指令系统和汇编语言程序设计实验

本章实验主要包括指令系统和汇编语言程序设计两部分。

采用软件模拟调试的方法,目的在于通过这些实验可以使学生巩固所学知识,加深对MCS-51单片机内部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。

实验操作说明

Keil软件调试方式分为:

软件仿真方式和硬件调试两种。

软件仿真实验上机操作步骤:

1、进入Keil,点击桌面上“KeilμVersion3”图标,进入Keil系统窗口;

2、新建工程:

1)打开“工程”菜单中的新建,在弹出的对话框中,键入自己定义的工程名;

2)在进一步打开的对话框中,选择CPU的类型,为Intel公司的8032AH,确定;

3)存入C:

\keil文件夹中。

(机房,安装在C盘,改为C:

\keil)

3、打开“视图”菜单中的“工程窗口”;

4、在“工程窗口”中,右击“目标1”,为工程设置参数;

1)在弹出的快捷菜单中选择“为目标“目标1”设置选项”;

2)在弹出的对话框中选择“项目”选项卡,设置时钟为“12Mhz”;

3)选择“调试”选项卡,在单选框选择“软件仿真方式”;

4)确定,即完成了“软件仿真方式”的设置。

5、新建文件

1)打开“文件”菜单,选择“新建”;

2)系统打开一个文本窗口,你可在窗口的编辑区输入要调试的汇编语言源程序;

3)存盘,命名文件名和扩展名,文件名任起,扩展名必须是.asm,存入C:

\keil文件夹中(在大机房,安装在C盘,改为C:

\keil);例如:

a.asm。

6、将刚建的新文件添入当前的工程中

1)在“工程窗口”中,“目标1”的+号处打开,显示“源代码组1”;

2)右击“源代码组1”,在快捷菜单中选择“为“源代码组1”添加文件”,弹出一个对话框;

3)在对话框中选择“文件类型”为*.*;

4)选择文件所在路径,同时找到刚键入的a.asm文件,点击“add”按钮,然后点击“close”按钮;

5)在“工程窗口”点击“源代码组1”左侧的+号,显示添加的a.asm文件,添加成功。

7、汇编

1)在“工程窗口”点击“源代码组1”的a.asm文件;

2)打开“a.asm”文件编辑窗口;

3)点击工具按钮中的“重建所有的目标文件”,进行汇编;

4)在“输出窗口”显示汇编是否有错,无错,进入调试;

有错,在编辑窗口修改程序,改后,再次汇编,直至无错后进入调试;

8、调试程序

1)点击“开始/停止调试”按钮,进入调试界面;

2)在程序窗口中有一个黄箭头指向程序的第一条可执行指令的开头;

3)选择调试方式进行调试;

①在“调试”菜单中选择:

跟踪、单步、运行、断点等方式;

②或按单步或跟踪命令按钮,按一次单步,执行一条指令,pc指针指向下一条要被执行的指令;

③检查运行结果

Ⅰ打开“视图”菜单,选择“存储器窗口”,弹出存储器对话框;

Ⅱ在存储器对话框的下方选择memory1在地址栏中键入“C:

0X0000”回车,建立程序存储器的观察窗口;

Ⅲ选择memory2在地址栏中键入“D:

0X00”回车,建立内部数据存储器的观察窗口;

Ⅳ选择memory3在地址栏中键入“X:

0X0000”回车,建立外部数据存储器的观察窗口;

Ⅴ在“projectworkspace”窗口中观察r0-r7,a,pc,dptr,psw,要观察各个标志位,打开psw左侧的+号;

9、设置PC指针

当程序的首地址不是0000H时,汇编结束后,PC指针仍然指向0000H的地方,在调试程序前,一定要将PC设置到你的程序首地址处,方法为:

1)将光标移到程序的第一条指令处,击鼠标右键;

2)在快捷菜单中选择“SetProgramCounter”命令,PC指针即可指向程序的第一条指令。

 

指令系统实验

实验一熟悉键盘操作及数传指令编程设计

一、实验目的

1.熟悉软件模拟调试的环境及键盘操作。

2.掌握汇编语言程序设计的方法,加深对指令的理解。

3.学会软件模拟调试和察看修改观察项的方法。

二、实验内容

印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。

三、实验步骤

1.进入调试软件环境,输入源程序;

2.汇编源程序;

3.用单步方式运行程序;

4.检查并记录各寄存器和存储单元内容的变化。

四、程序清单

1.内部RAM数据传送(MOV指令)

1)寄存器寻址与立即寻址,需要查看的数据有A、PSW和不同寄存器区的Rn等单元的内容。

ORG0000H

AJMP0050H

ORG0050H

MAIN:

MOVPSW,#00H;RS1=0,RS0=00组寄存器

MOVR0,#30H

MOVA,R0

MOVR6,A

SETBRS1

SETBRS0;RS1=1,RS0=13组寄存器

MOVR0,#30H

MOVA,R0

MOVR6,A

MOVPSW,#10H;RS1=1,RS0=02组寄存器

MOVR0,#30H

MOVA,R0

MOVR6,A

CLRRS1

SETBRS0;RS1=0,RS0=11组寄存器

MOVR0,#30H

MOVA,R0

MOVR6,A

SJMP$

END

2)直接寻址,需查看30H、31H、32H、40H、ACC、PSW、02H等单元的内容。

ORG0000H

AJMP0060H

ORG0060H

MAIN:

MOV30H,#45H

MOV31H,#46H

MOV02H,31H

MOV0E0H,30H

MOV32H,ACC

MOVACC,PSW

MOV40H,ACC

SJMP$

END

3)寄存器间接寻址,需查看@R0、RO等的内容。

ORG0000H

AJMP0070H

ORG0070H

MAIN:

MOV30H,#66H

MOVR0,#30H

MOV@R0,#30H

INCR0

MOV@R0,#31H

SJMP$

END

2.外部程序存储器数据传送(MOVC指令)

根据A中数据查外部程序存储器单元2000H~200FH单元中的字形码,依次存入内部RAM以30H开始的单元。

ORG0000H

AJMP0080H

ORG0080H

MAIN:

MOVR0,#30H

MOVR2,#08H

MOVR3,#00H

LOOP:

MOVA,R3

MOVB,#02H

ADDA,B

MOVDPTR,#2000H

MOVCA,@A+DPTR

MOV@R0,A

INCR0

INCR3

DJNZR2,LOOP

SJMP$

ORG2000H

TABL:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

DB88H,83H,0C6H,0A1H,086H,08EH

END

3.堆栈操作(PUSH和POP指令)

需要查看的数据有50H、51H、A及SP指针和堆栈区中数据随PUSH和POP指令执行后的变化情况和数据的存放次序等。

1)可用于保护现场和恢复现场的程序

ORG0000H

AJMP0090H

ORG0090H

MAIN:

MOVSP,#5FH

MOV50H,#3BH

MOV51H,#2FH

MOVA,#12H

PUSH50H

PUSH51H

PUSHACC

POP0E0H

POP51H

POP50H

SJMP$

END

2)可用于数据交换的程序

ORG0000H

AJMPOOA0H

ORG00A0H

MAIN:

MOVSP,#6FH

MOV50H,#3BH

MOV51H,#2FH

PUSH50H

PUSH51H

POP50H

POP51H

SJMP$

END

4.数据交换(SWAP、XCHD、XCH指令)

记录每条指令运行后的结果,从而加深对各种不同的交换指令的理解。

1)SWAP指令

ORG0000H

AJMP00B0H

ORG00B0H

MAIN:

MOVA,#58H

SWAPA

MOV40H,A

SJMP$

END

2)XCHD指令

ORG0000H

AJMP00C0H

ORG00C0H

MAIN:

MOVA,#30H

MOVR0,#30H

MOV@R0,#09H

XCHDA,@R0

MOV41H,A

SJMP$

END

3)XCH指令

ORG0000H

AJMP00D0H

ORG00D0H

AMIN:

MOVR0,#50H

MOV50H,#1

MOVA,#89H

XCHA,50H

MOVR7,#3

XCHA,R7

XCHA,@R0

SJMP$

END

5.外部数据存储器数据传送(MOVX指令)

将内部RAM中40H单元的内容送到外部数据存储器(或I/O口)3695H单元。

1)DPTR作指针

ORG0000H

AJMP00F0H

ORG00F0H

MAIN:

MOV40H,#99H

MOVA,40H

MOVDPTR,#3695H

MOVX@DPTR,A

SJMP$

END

2)Ri作指针

ORG0000H

AJMP0100H

ORG0100H

MAIN:

MOV40H,#68H

MOVA,40H

MOVP2,#36H

MOVR0,#95H

MOVX@R0,A

SJMP$

END

五、思考题

1、寄存器寻址与寄存器间接寻址有什么区别?

2、PC指针与SP指针有什么区别?

3、DPTR指针与Ri(R0,R1)指针有什么区别?

4、立即寻址与直接寻址有什么区别?

5、同一个特殊功能寄存器不同表达形式。

6、三种不同的交换指令的区别是什么?

7、MOVX和MOVC指令的不同点。

实验二

分支程序设计

一、实验目的

1.进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。

2.掌握分支结构程序设计的方法。

3.学会用条件转移指令、CJNE、JMP及其配合使用来编写二分支、三分支和多分支程序。

二、实验内容

1.二分支的条件转移程序

设变量X存放于R0,函数值Y存放在R1,其中X、Y均为二进制数。

试按照下式的要求给Y赋值:

Y=

1

X>0

0

X=0

-1

X<0

程序框图如图3-5所示:

:

三、实验步骤

1.根据实验内容和参考程序流程图,编出相应的分支结构程序。

2.输入程序,汇编成功;

3.用F4(执行到光标处)、F7(跟踪执行)、F8(单步执行)或断点运行等方式调试程序;

4.观察程序的流程,记录运行结果。

四、思考题

1.CJNE指令对CY有影响吗?

用CJNE和JC/JNC指令配合应注意什么?

在用JMP指令前,若变址255怎么办?

2.用什么指令可以实现多分支之间的隔离?

五、实验报告要求

写出题目运行结果。

六、参考程序清单

1、二分支的条件转移程序

1)用二分支结构程序实现:

ORG0000H

AJMP0050H

ORG0050H

MAIN:

MOVA,R0

JZLOAD

JNBACC.7,GO

MOVA,#0FFH

SJMPLOAD

GO:

MOVA,#01H

LOAD:

MOVR1,A

SJMP$

END

2)用三分支结构程序实现:

ORG0000H

AJMP0050H

ORG0050H

MAIN:

MOVA,R0

JNZCOMP

MOVR1,#00H

SJMPMP3

COMP:

CJNER0,#80H,MP1

MOVR1,#0FFH

LJMPMP3

MP1:

JCMP2

MOVR1,#0FFH

LJMPMP3

MP2:

MOVR1,#01H

MP3:

SJMP$

END

循环程序设计

一、实验目的

1.进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。

掌握循环结构程序设计的方法,弄清单重及多重循环控制过程。

2.掌握典型算法:

冒泡排序法。

二、实验内容

设计循环程序:

冒泡法排序。

具体要求:

设单片机8031外部RAM从3600H单元开始存放10个无符号数,试编写程序能使它们按从大到小的顺序排列(最大数存放在3600H单元)。

三、实验步骤

1.输入预先编好的程序,汇编成功;

2.用自动单步方式执行程序,观察循环计数器的变化情况。

3.用断点运行方式调试排序程序,记录排序过程。

四、参考流程图

程序流程图如图3-7所示。

五、循环结构程序参考清单:

冒泡法排序法参考程序清单:

ORG0000H

AJMP0050H

ORG0050H

MAIN:

MOVPSW,#00H

MOVP2,#36H

MOVR2,#10-1

LPP0:

MOVR0,#00H

MOVR1,#01H

MOV03H,R2

CLR7FH

LPP1:

MOVXA,@R0

MOV30H,A

MOVXA,@R1

CJNEA,30H,LPP2

SJMPLL1

LPP2:

JCLL1

MOVX@R0,A

XCHA,30H

MOVX@R1,A

SETB7FH

LL1:

INCR0

INCR1

DJNZR3,LPP1

JNB7FH,LPP3

DJNZR2,LPP0

LPP3:

SJMP$

END

六、思考题

1、若用DJNZ或CJNE指令来控制循环,编写程序有什么不同?

2、如何将排序程序修改为只用一个指针?

3、将无符号数排序程序修改为带符号数排序。

实验三LED流水灯实验

一、实验目的:

1、进一步熟悉KeilC51集成开发环境调试功能的使用

2、学会自己编写程序,进行编译、仿真调试

3、学会使用单片机的P0口作为I/O口去控制外围电路,实现LED灯以固定的频率进行闪烁。

二、实验设备:

1、PC机

2、SW-51PROC单片机综合实验平台

三、实验内容:

1、编写一段程序,用单片机P0口的8个输出去控制8个LED灯,实现如下功能:

先使8个LED灯轮流点亮,从左向右移动,时间间隔0.5s。

以上过程循环实现。

四、实验步骤:

1、实验原理图:

2、硬件连线方式:

用杜邦线将“MCU”区的P0口“P0.0-P0.7”与“8-LED”模块区的“L1-L8”依次相连。

编写程序思路:

用单片机P0口的8位输出控制8个LED灯,每次只点亮一只LED,8只LED灯依次点亮,如此循环即可形成流水灯。

3、实验箱的时钟:

晶振频率为11.0592MHz

Tose=1/(11.0592*1000000)=0.0904us

1个机器周期为0.0904us*12=1.085us

4、源程序:

************************************************************************************/

#include

#defineucharunsignedchar

#defineuintunsignedint

#definePORTP0

ucharcodedis[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,

0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd};

/***********************************延时函数****************************************/

voiddelay_50ms(uintt)

{

uinti;

for(;t>0;t--)

for(i=6245;i>0;i--);

}

/************************************主函数*****************************************/

voidmain(void)

{

uchar*p=dis;

while

(1)

{

for(p=dis;p<(dis+14);p++)

{

PORT=*p;

delay_50ms(10);

}

}

}

/*************************************结束*******************************************/

5、运行程序:

把编写好的程序输入PC机中,用Keil软件进行编译,编译无误的情况下,运行该程序,此时LED灯会依次轮流点亮。

6、实验报告要求:

1、实验名称

2、实验目的

3、实验设备

4、实验内容

5、实验原理(图要画完整)及控制方法合过程详细的说明

6、实验编写的程序

ORG0000H

LJMPMAIN

ORG0050H

MAIN:

MOVR0,#14

MOVDPTR,#TABLE

L0:

MOVR3,#0

L1:

MOVA,R3

MOVCA,@A+DPTR

MOVP0,A

ACALLDELAY1

INCR3

DJNZR0,L1

SJMPL0

DELAY1:

MOVR1,#250

LOOP1:

MOVR2,#250

LOOP2:

NOP

NOP

NOP

NOP

NOP

DJNZR2,LOOP2

DJNZR1,LOOP1

RET

TABLE:

DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH

END

7、实验结果

8、心得和建议

(1)首先知道LED的工作原理。

共阴级共阳极,此实验板是共阳极,要亮,的加一个高电平。

由于这8个LED灯与P0口相连,所以直接通过P0口控制其亮灭就可以。

依次开启每个灯,同时开启时要亮一定的时间。

时间可以自己定义,也可以利用定时器实现。

具体的汇编程序如下:

ORG0000H

LJMPMAIN

ORG0050H

MAIN:

MOVR0,#14

MOVDPTR,#TABLE

L0:

MOVA,#0

L1:

MOVCA,@DPTR+A

MOVP0,A

ACALLDELAY1

INCA

DJNZR0,L1

SJMPL0

DELAY1:

MOVR1,#250

LOOP1:

MOVR2,#250

LOOP2:

NOP

NOP

NOP

NOP

NOP

DJNZR0,LOOP2

DJNZR1,LOOP1

RET

TABLE:

DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH

END

大家可以换一种亮灭的方式,只是通过修改表中的相应的信息,同时将程序做适当的修改,就可以达到预想的效果。

实验四数码管动态扫描实验

一、实验目的:

学习计数器的设计、分析合测试方法。

学习硬件扫描显示电路的设计方法。

二、实验设备:

1、PC机

2、SW-51PROC单片机综合实验平台

三、实验内容:

编写一段程序,用单片机P0口和P2口的I/O输出去控制8位的数码管显示,实现如下功能:

使数码管上显示1、2、3、4、5、6、7、8。

四、实验步骤:

1、实验原理图:

2、硬件连线方式:

1、MCU模块的P0口的“p0.0-p0.7”分别连接到“8-SEG模块”的“a-dp”依次相连。

2、MCU模块的P2口的“p2.0-p2.7”分别连接到“8-SEG模块”的“DS1-DS8”依次相连。

3、源程序:

******************************************************************/

#include

#defineucharunsignedchar

#defineuintunsignedint

/************************段码表*********************************/

ucharcodeled[]=

{

0Xc0,/*0*///七段译码表

0Xf9,/*1*/

0Xa4,/*2*/

0Xb0,/*3*/

0X99,/*4*/

0X92,/*5*/

0X82,/*6*/

0Xf8,/*7*/

0X80,/*8*/

0X90,/*9*/

0X88,/*A*/

0X83,/*b*/

0Xc6,/*C*/

0Xa1,/*d*/

0X86,/*E*/

0X8e,/*F*/

};

uchar*p[]={led+1,led+2,led+3,led+4,led+5,led+6,led+7,led+8};

/*********************延时函数*********************************/

voiddelay_us(uintt)//us

{

do

t--;

while(t>1);

}

voiddelay_ms(uintt)//ms

{

while(t!

=0)

{

delay_us(142);

t--;

}

}

/************************扫描*********************************/

voiddisplay()

{

uchari;

uchar**pt=p;

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

{

switch(i)

{

case0:

P2=0x7f;break;

case1:

P2=0xbf;break;

case2:

P2=0xdf;break;

case3:

P2=0xef;break;

case4:

P2=0xf7;break;

case5:

P2=0xfb;break;

case6:

P2=

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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