单片机原理及应用实验指导书.docx
- 文档编号:25530024
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:32
- 大小:394.04KB
单片机原理及应用实验指导书.docx
《单片机原理及应用实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用实验指导书.docx(32页珍藏版)》请在冰豆网上搜索。
单片机原理及应用实验指导书
单片机原理及应用
实验指导书
河北工业大学
计算机科学与软件学院
实验一指令系统和汇编语言程序设计实验
本章实验主要包括指令系统和汇编语言程序设计两部分。
采用软件模拟调试的方法,目的在于通过这些实验可以使学生巩固所学知识,加深对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;(50H)=3BH
MOV51H,#2FH;(51H)=2FH
MOVA,#12H;(0E0H)=12H
PUSH50H;(SP)=60H,(60H)=3BH
PUSH51H;(SP)=61H,(61H)=2FH
PUSHACC;(SP)=62H,(61H)=12H
POP0E0H;(SP)=61H
POP51H;(SP)=60H
POP50H;(SP)=5FH
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;(A)=58H
SWAPA;(A)=85H
MOV40H,A;(40H)=85H
SJMP$
END
2)XCHD指令
ORG0000H
AJMP00C0H
ORG00C0H
MAIN:
MOVA,#30H;(A)=30H
MOVR0,#30H;(R0)=30H
MOV@R0,#09H;(30H)=09H
XCHDA,@R0;(A)=39H,(30H)=00H
MOV41H,A;(41H)=39H
SJMP$
END
3)XCH指令
ORG0000H
AJMP00D0H
ORG00D0H
AMIN:
MOVR0,#50H;(R0)=50H
MOV50H,#1;(50H)=01H
MOVA,#89H;(A)=89H
XCHA,50H;(A)=01H,(50H)=89H
MOVR7,#3;(R7)=03H
XCHA,R7;(A)=03H,(R7)=01H
XCHA,@R0;(A)=89H,(50H)=03H
SJMP$
END
5.外部数据存储器数据传送(MOVX指令)
将内部RAM中40H单元的内容送到外部数据存储器(或I/O口)3695H单元。
1)DPTR作指针
ORG0000H
AJMP00F0H
ORG00F0H
MAIN:
MOV40H,#99H;(40H)=99H
MOVA,40H;(A)=40H
MOVDPTR,#3695H
MOVX@DPTR,A;(3695H)=99H
SJMP$
END
2)Ri作指针
ORG0000H
AJMP0100H
ORG0100H
MAIN:
MOV40H,#68H;(40H)=68H
MOVA,40H;(A)=68H
MOVP2,#36H;(P2)=36H
MOVR0,#95H;(R0)=95H
MOVX@R0,A;(3695H)=68H
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:
MOVR0,#05H
MOVA,R0
JZLOAD
JNBACC.7,GO
MOVA,#0FFH
SJMPLOAD
GO:
MOVA,#01H
LOAD:
MOVR1,A
SJMP$
END
\
2)用三分支结构程序实现:
ORG0000H
AJMP0050H
ORG0050H
MAIN:
MOVRO,#05H
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、实验编写的程序
7、实验结果
8、心得和建议
(1)首先知道LED的工作原理。
共阴级共阳极,此实验板是共阳极,要亮,的加一个高电平。
由于这8个LED灯与P0口相连,所以直接通过P0口控制其亮灭就可以。
依次开启每个灯,同时开启时要亮一定的时间。
时间可以自己定义,也可以利用定时器实现。
具体的汇编程序如下:
ORG0000H
LJMPMAIN
ORG0050H
MAIN:
MOVR0,#14
MOVDPTR,#TABLE
L0:
MOVR3,#0
L1:
MOVA,R3
MOVCA,@DPTR+A
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
大家可以换一种亮灭的方式,只是通过修改表中的相应的信息,同时将程序做适当的修改,就可以达到预想的效果。
实验四数码管动态扫描实验
一、实验目的:
学习计数器的设计、分析合测试方法。
学习硬件扫描显示电路的设计方法。
二、实验设备:
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;b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用 实验 指导书