单片机实验指导书.docx
- 文档编号:5385994
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:143
- 大小:576.41KB
单片机实验指导书.docx
《单片机实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书.docx(143页珍藏版)》请在冰豆网上搜索。
单片机实验指导书
实验一存储器块清零
一、实验目的
1.掌握汇编程序设计及其调试程序方法
2.掌握存储器的读写方法
二、实验内容
1.编写程序,将外部数据存储器中0100H-01FFH单元的内容全部清零。
2.修改程序,将存储器中0100H-01FFH单元的内容置成0FFH,0FEH,0FDH,……,01H,00H。
三、程序框图
图1数据块清零程序框图
四、程序清单
BlockEQU4000H
ORG0000H
MOVDPTR,#Block;DPTR=____________
MOVR0,#0;R0=__________
CLRA;A=_______
Loop:
MOVX@DPTR,A;[DPTR]=__________
INCDPTR;DPTR=__________
DJNZR0,Loop;R0=_______,Z=____,PC=__________
LJMP$;R0=_______,PC=__________
END
五、实验步骤
1.新建汇编文件(文件名.ASM),输入源程序,另存于D:
\M51的目录下。
2.汇编源程序。
3.分别用单步、断点和连续执行的方法调试程序,并观察寄存器和存储器的变化。
实验二数据块移动
一、实验目的
1.掌握汇编程序设计及其调试程序方法。
2.掌握数据块的移动方法。
二、实验内容
将指定源首地址和长度的存储块移到指定目标位置
1.编写程序,用地址加一的方法将0000H-00FFH单元的内容复制到0100H-01FFH的存储单元中。
2.编写程序,用地址减一的方法完成上述功能。
三、程序框图
图2程序框图1图3程序框图2
四、实验步骤
1.新建汇编文件(文件名.ASM),输入源程序,另存于D:
\M51的目录下。
2.汇编源程序。
3.分别用单步、断点和连续执行的方法调试程序,并观察寄存器和存储器的变化。
五、程序清单
1.用地址加一的方法实现数据块移动
;0000H-00FFH-->0100H-01FFH
DATA1EQU0000H
DATA2EQU0100H
ORG0000H
MOVDPTR,#DATA2
MOVP2,DPH
MOVR0,DPL
MOVDPTR,#DATA1
MOVR7,#00H
Loop1:
MOVXA,@DPTR
MOVX@R0,A
INCDPTR
INCR0
CJNER0,#00H,Goon1
INCP2
Goon1:
DJNZR7,Loop1
LJMP$
END
2.用地址减一的方法实现数据块移动
;0000H-00FFH-->0100H-01FFH
DATA1EQU00FFH
DATA2EQU01FFH
ORG0000H
MOVDPTR,#DATA2
MOVP2,DPH
MOVR0,DPL
MOVDPTR,#DATA1
MOVR7,#00H
Loop1:
MOVXA,@DPTR
MOVX@R0,A
DECDPL
MOVA,DPL
CJNEA,#00H,Coon1
DECDPH
Coon1:
DECR0
CJNER0,#00H,Goon2
DECP2
Goon2:
DJNZR7,Loop1
LJMP$
END
五、思考题
当源数据块的地址与目标数据块的地址重叠时,将会发生什么情况?
应采用哪种方法编写程序,才能保证所复制的数据与源数据完全一致。
先运行实验一的第二段程序,将本次实验的目标地址修改为0180H,观察哪个程序运行结果正确。
再将本次实验的目标地址分别修改为0080H,观察哪个程序运行结果正确。
实验三二进制到BCD码转换
一、实验目的
1.掌握简单的数值转换算法
2.基本了解数值的各种表达方法
二、实验内容
计算机中的数值有各种表达方式,掌握各种数制之间的转换是单片机应用的基础。
1.编写一个双字节二进制数到压缩BCD码的转换子程序,其:
入口条件:
待转换的双字节二进制数在R6、R7中。
出口信息:
转换后的三字节压缩BCD码整数在R3、R4、R5中。
2.编写一个双字节二进制数到分离BCD码的转换子程序,其:
入口条件:
待转换的双字节二进制数在R6、R7中
出口信息:
转换后的分离BCD码在5AH~5FH的6个单元中。
3.编写程序,将20H、21H的双字节二进制数转换为分离BCD码存放在5AH~5FH的6个单元中。
三、程序框图
四、程序清单
;主程序
XSQEQU60H
ORG0000H
MOVR6,#0FFH
MOVR7,#0FFH
LCALLFLBCD;调分离BCD码程序
SJMP$
;二进制数转换分离BCD码程序
FLBCD:
LCALLHB2;调BCD码转换程序
MOVA,R3
ANLA,#0F0H
SWAPA
MOVXSQ,A
MOVA,R3
ANLA,#0FH
MOVXSQ+1,A
MOVA,R4
ANLA,#0F0H
SWAPA
MOVXSQ+2,A
MOVA,R4
ANLA,#0FH
MOVXSQ+3,A
MOVA,R5
ANLA,#0F0H
SWAPA
MOVXSQ+4,A
MOVA,R5
ANLA,#0FH
MOVXSQ+5,A
RET
;二进制数转换压缩BCD码子程序
;入口条件:
待转换的十六进制数在R6、R7中,
;出口信息:
转换后的BCD码在R3、R4、R5中
HB2:
CLRA;
MOVR3,A;
MOVR4,A
MOVR5,A
MOVR2,#10H;双字节需循环16次
HB20:
MOVA,R7;高位移到CY中
RLCA
MOVR7,A
MOVA,R6
RLCA
MOVR6,A
MOVA,R5;BCD码带进位自身相加
ADDCA,R5
DAA;十进制调整
MOVR5,A
MOVA,R4
ADDCA,R4
DAA
MOVR4,A
MOVA,R3
ADDCA,R3
MOVR3,A;万位不超过6不用调整
DJNZR2,HB20;16位没有处理完转
RET
五、实验步骤
分别用单步、断点和连续执行的方法调试程序,并观察寄存器和存储器的变化。
六、思考题
如何将分立BCD码和压缩BCD码转换成二进制码。
实验四四位压缩BCD码加法实验
一、实验目的
1.了解设计压缩BCD码加法程序的方法
2.掌握加法指令、十进制调整指令的使用方法。
二、实验内容
把30H、31H单元中的四位十进制数与32H、33H单元中的四位十进制数相加,结果存放在30H、31H、32H单元。
(数据存放格式为低位在前,高位在后)
程序运行前,应先将30H-33H单元的加数和被加数赋值。
执行结果填在表1-1中。
表1
预置被加数
预置被加数
程序运行结果
(30H)
(31H)
(32H)
(33H)
(30H)
(31H)
(32H)
十进制
34
12
78
56
三、程序框图四、程序清单
DATA1EQU30H;加数地址
DATA2EQU32H;被加数地址
ORG0000H
MOVR0,#DATA1
MOVR1,#DATA2
MOVA,@R0
ADDA,@R1
DAA
MOV@R0,A
INCR0
INCR1
MOVA,@R0
ADDCA,@R1
DAA
MOV@R0,A
INCR0
CLRA
ADDCA,#0
MOV@R0,A
SJMP$
END
实验五布尔操作实验
一、实验目的
1.掌握位操作指令的使用方法
2.了解用程序实现组合逻辑电路的功能
二、实验内容
用程序实现图6所示组合逻辑电路的功能
位地址:
07H06H05H04H03H02H01H00H
V
W
U
X
Y
Z
Q
字节地址:
20H
三、程序清单
QBIT00H
ZBIT02H
YBIT03H
XBIT04H
UBIT05H
WBIT06H
VBIT07H表2
执行前
执行后
(20H)
F0
(20H)
F4
(20H)
(20H)
ORG0000H
MOVC,V
ORLC,W
MOVPSW.4,C
MOVC,X
ORLC,/Y
ANLC,PSW.4
ANLC,/Z
MOVQ,C
SJMP$
END
程序执行前,将表2中值填入20H单元,执行结果填入表中,并对执行结果加以说明。
实验六排序实验
一、实验目的
了解数据排序的简单算法。
二、实验内容
寄存器50H~5FH单元中存放16个数据,编写一个程序将数据按照从小到大的次序排列。
“冒泡排序”算法是:
从第一个数据开始相邻的数据比较,若次序不对,两数据交换位置,第一遍比较(N-1)次后,最大的数据已排到数组的尾部,第二遍仅需比较(N-2)就够了,共比较(N-1)遍就完成排序,这样共有两重循环。
带标志位的“冒泡排序”算法:
设置一个标志位,进入外循环时标志位清0,在内循环中相邻两数交换位置时,标志位置1,内循环结束后测试标志位,若为0表示内循环没有进行数据交换,数据排序已经完成,可以结束外循环,不必循环(N-1)遍,从而节省了操作时间。
三、程序框图四、程序清单
SizeEQU10H;数据个数
ArrayEQU50H;数据起始地址
ChangeEQU0;交换标志
ORG0000H
MOVR6,#Size-1
SORT:
MOVA,R6
MOVR7,A
MOVR0,#Array
CLRChange
SORT1:
MOVA,@R0
MOVR2,A
INCR0
MOVB,@R0
CJNEA,B,SORT2
SJMPSORT3
SORT2:
JCSORT3;前小后大,不交换
SETBChange;前大后小,置交换标志
XCHA,@R0;交换
DECR0
XCHA,@R0
INCR0
SORT3:
DJNZR7,SORT1
JNBChange,SORT4
DJNZR6,SORT
SORT4:
LJMP$
END
实验七I/O接口实验一
一、实验目的
1、掌握单片机I/O接口的使用方法。
2、熟悉延时子程序的编写和使用。
二、实验内容
用P1口设计一个交通信号控制器,分别用红、黄、绿两组发光二极管作为交通指示信号。
程序使两组发光二极管同时按红、黄、绿和绿、黄、红循环点亮。
修改程序,使红、绿灯点亮时间比黄灯点亮时间长一倍。
三、实验电路及连线
连线
连接孔1
连接孔2
1
P1.7
L0
2
P1.6
L1
3
P1.5
L2
4
P1.3
L6
5
P1.2
L5
6
P1.1
L4
四、程序框图四、程序清单
ORG0000H
LOOP:
MOVA,#88H
MOVR2,#3
OUTP1:
MOVP1,A
RLA;右移一位
CALLDELAY
DJNZR2,OUTP1
LJMPLOOP
DELAY:
;延时程序
MOVR6,#0
MOVR7,#0
DELAY1:
DJNZR7,$
DJNZR6,DELAY1
RET
查指令表可知:
执行DJNZ指令需两个机器周期时间,当晶振为
6MHz时,一个机器周期为12/6MHz(μS),执行延时程序所需时间为:
(256+1)×256×2×12/6=263168(μS)
实验八I/O接口实验二
一、实验目的
1、了解单片机与外设传送信息的方式。
2、掌握查询方式的原理、特点及编程方法。
二、实验内容
假设在工业过程控制中,有一台机器当K1=0时正常工作,L0(绿灯)亮,一旦出现故障(K2=0),则绿灯灭,停止工作,同L2(红灯)闪烁报警,待故障排除(K2=1)时,解除报警,继续工作(红灯灭。
绿灯亮)。
完成硬件连接,并编写程序,编写程序,用单片机实现这样的过程。
三、实验电路及连线
连线
连接孔1
连接孔2
1
P1.7
L0
2
P1.6
L1
3
P1.3
S0
4
P1.2
S1
四、程序框图五、程序清单
通过查询开关K1、K2的输入状态,ORG0000H
决定输出控制状态:
是绿灯亮(正常工MAIN:
MOVP1,#0FH
作),还是红灯闪烁(故障报警)。
L1:
JBP1.3,L1
L2:
CPLP1.7
ACALLDLY
JBP1.2,L2
CLRP1.7
SETBP1.6
L3:
LCALLDLY
JNBP1.2,L3
SJMPMAIN
DLY:
MOVR6,#80H
MOVR7,#00H
DLY1:
DJNZR7,$
DJNZR6,DLY1
RET
六、思考题
修改程序,实现在任何时候断开K1时,均
能使绿灯熄灭。
实验九外部中断实验
一、实验目的
1、了解单片机与外设传送信息的方式。
2、掌握中断方式的原理、特点及编程方法。
二、实验内容
当INT0中断时,读取开关K1、K2的状态,并用LED0、LED1指示出K1、K2的状态。
完成硬件连接,并编写程序,实现上述功能。
三、实验电路及连线
连线
连接孔1
连接孔2
1
P1.7
L0
2
P1.6
L1
3
P1.3
S0
4
P1.2
S1
5
INT0
单脉冲输出
四、程序框图四、程序清单
ORG0000H
LJMPMAIN
ORG0013H
LJMPWBINT
MAIN:
MOVP1,#0FH
SETBIT0
SETBEX0
SETBEA
SJMP$
WBINT:
MOVP1,#0FH
MOVC,P1.3
CPLC
MOVP1.7,C
MOVC,P1.2
CPLC
MOVP1.6,C
MOVR7,#80H
MOVR6,#00H
WBINT1:
DJNZR6,$
DJNZR7,WBINT1
RETI
实验十数码管显示实验
一、实验目的
1、掌握数码管动态显示的编程方法。
2、了解输出端口的扩展方法。
二、实验内容
1.用两片8D锁存器74HC374扩展两个8位输出口,实现对数码管的显示控制。
2.设计一个数码管的动态显示程序,将显示缓冲区5AH-5FH中的内容在数码管上显示出来。
三、实验电路及连线
连线:
KEY_CS连接CS0字形代码表
字形
DP
g
f
e
d
c
b
a
字形码
0
0
0
1
1
1
1
1
1
3FH
1
0
0
0
0
0
1
1
0
06H
2
0
1
0
1
1
0
1
1
5BH
3
0
1
0
0
1
1
1
1
4FH
4
0
1
1
0
0
1
1
0
66H
5
0
1
1
0
1
1
0
1
6DH
6
0
1
1
1
1
1
0
1
7DH
7
0
0
0
0
0
1
1
1
07H
8
0
1
1
1
1
1
1
1
7FH
9
0
1
1
0
1
1
1
1
6FH
A
0
1
1
1
0
1
1
1
77H
B
0
1
1
1
1
1
0
0
7CH
C
0
0
1
1
1
0
0
1
39H
D
0
1
0
1
1
1
1
0
5EH
E
0
1
1
1
1
0
0
1
79H
F
0
1
1
1
0
0
0
1
71H
暗
0
0
0
0
0
0
0
0
00H
段码输出地址:
8004H;
位码输出地址:
8002H
四、实验说明
1.六个数码管的8位段码、6位位码是由两片74LS374输出控制,实现动态方式显示。
位码经ULN2003倒相驱动后,选择相应的显示位。
将KEY/LEDCS接到CS0上,则段码地址为8004H,位码地址为8002H。
2.调用显示程序前,应先在显示缓冲区5AH—5FH存入六个字节00H—0FH的显示数据。
五、程序框图
程序框图如图所示。
六、程序框图
OUTBITEQU8002H;位控制口
OUTSEGEQU8004H;段控制口
XSQEQU5AH;显示缓冲
ORG0000H
LJMPMAIN
MAIN:
MOVSP,#60H
MOVXSQ,#01H
MOVXSQ+1,#02H
MOVXSQ+2,#03H
MOVXSQ+3,#04H
MOVXSQ+4,#05H
MOVXSQ+5,#06H
MAIN1:
LCALLDISP
LJMPMAIN
DISP:
MOVR2,#00100000B
;从左边开始显示
MOVR1,#6;共6个数码管
MOVR0,#XSQ
DISP1:
MOVDPTR,#OUTBIT
MOVA,#0
MOVX@DPTR,A;关所有数码管
MOVA,@R0
MOVDPTR,#LEDMAP
MOVCA,@A+DPTR;查表取段码
MOVDPTR,#OUTSEG
MOVX@DPTR,A;输出段码
MOVA,R2
MOVDPTR,#OUTBIT
MOVX@DPTR,A;输出位码
RRA;为显示下一位作准备
MOVR2,A
INCR0
MOVR7,#00H
DJNZR7,$;延时
DJNZR1,DISP1
RET
LEDMAP:
;数码管段码表
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
DB00H
END
七、思考题
延时时间延长至1秒以上,观察程序执行结果有何变化。
实验十一键盘扫描、显示实验
一、实验目的
1、掌握键盘扫描原理及编程方法。
2、掌握输入、输出端口的扩展方法及键盘、显示电路的设计方法。
二、实验内容
在数码管显示实验电路的基础上,用8路双向驱动器74LS245扩展4路输入端口,与位码输出端口组成键盘扫描电路,并编写一个键盘扫描和数码显示程序,把按键输入的键码在数码管上显示出来。
实验程序可分为三个模块
1.主程序:
循环调用显示模块和键盘扫描模块,如果有键按下,则将所按下的键码送显示缓冲区。
2.显示模块:
将显示缓冲区的内容在数码管上动态显示。
3.键盘扫描模块:
扫描键盘,并获取按键的键码。
三、实验电路及连线
连线:
KEY_CS连接CS0
段码输出地址:
8004H;
列扫描地址:
8002H
行码地址:
8001H
四、实验说明
实验箱提供了一个6×4的小键盘,向列扫描地址(8002H)逐列输出低电平,然后从行码地址(8001H)读回。
如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。
这样就可以通过输出的列码和读取的行码来判断按下的是什么键。
在判断有键按下后,要有一定的延时,防止键盘抖动。
地址中的X是由KEY/LEDCS决定,参见地址译码。
做键盘和LED实验时,需将KEY/LEDCS接到相应的地址译码上。
以便用相应的地址来访问。
例如将KEY/LEDCS信号接CS0上,则列扫描地址为8002H,行码地址为8001H。
列扫描码还可以分时用作LED的位选通信号。
五、程序框图
五、程序清单
OUTBITEQU8002H;位控制口
OUTSEGEQU8004H;段控制口
JPINEQU8001h;键盘读入口
XSWEQU20H;按键显示位置
XSQEQU5AH;显示缓冲
ORG0000H
LJMPMAIN
MAIN:
MOVSP,#60H
MOVXSQ,#20H;清显示
MOVXSQ+1,#20H
MOVXSQ+2,#20H
MOVXSQ+3,#20H
MOVXSQ+4,#20H
MOVXSQ+5,#20H
MOVXSW,#XSQ;
MAIN1:
LCALLDISP;调显示程序
LCALLJPSM;调键盘扫描
CJNEA,#10H,MAIN2
MAIN2:
JNCMAIN1;非数字键转
MOV
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)