51单片机实验代码.docx
《51单片机实验代码.docx》由会员分享,可在线阅读,更多相关《51单片机实验代码.docx(47页珍藏版)》请在冰豆网上搜索。
![51单片机实验代码.docx](https://file1.bdocx.com/fileroot1/2022-10/17/f93ab494-8889-4e3a-a31a-392f56304906/f93ab494-8889-4e3a-a31a-392f563049061.gif)
51单片机实验代码
实验二清零程序
一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。
二、实验内容把2000H~20FFH的内容清零。
三、实验程序框图
四、实验步骤用连续或单步的方式运行程序,检查2000~20FF中执行程序前后的内容变化。
五、思考假使把2000H~20FFH中的内容改成FF,如何修改程序。
六、程序清单文件名:
SW01.ASM
ORG0000H
LJMPSE01
ORG0640H
SE01:
MOVR0,#00H
MOVDPTR,#2000H
;(0000H)送DPTR
LOO1:
CLRA
MOVX@DPTR,A
;0送(DPTR)
INCDPTR
;DPTR+1
INCRO
;字节数加1
CJNER0,#00H,LOO1
;不到FF个字节再清
LOOP:
SJMPLOOP
END
实验三拆字程序
一、实验目的掌握汇编语言设计和调试方法
2002H高位
二、实验内容把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、清零,一般本程序用于把数据送显示缓冲区时用。
三、实验程序框图
四、实验步骤用连续或单步方式运行程序,检查2000H~2002H中内容变化情况。
五、思考如何用断点方式调试本程序
六、程序清单文件名:
SW02.ASM
ORG0000H
LJMPSE02
ORG0660H
SE02:
MOVDPTR,#2000H
;(2000)tAfB
;交换
;屏蔽高位
MOVXA,@DPTR
MOVB,A
SWAPA
ANLA,#0FH
INCDPTR
MOVX@DPTR,A;送2001H
INCDPTR
MOVA,B
ANLA,#0FH;(2000)内容屏蔽高位
MOVX@DPTR,A;送2002H
LOOP:
JMPLOOP
END
实验四数据区传送子程序
一、实验目的掌握RAM中的数据操作
二、实验内容把R2、R3源RAM区首地址内的R6、R7字节数据传送到R4、R5目的RAM区。
三、实验程序框图
四、实验步骤在R2、R3中输入源首址(例如0000H),R4、R5中输入的目的地址(例如2000H),
R6、R7中输入字节数(例如1FFFH),运行程序,检查0000H~1FFFH中内容是否和2000H~3FFFH中内容完全一致。
五、程序清单文件名SW04.ASM
ORG0000H
LJMPSE22
ORG07B0H
SE22:
MOVDPL,R3
MOVDPH,R2
;建立源程序首址
MOVXA,@DPTR
MOVDPL,R5
;取数
MOVDPH,R4
;目的地首址
MOVX@DPTR,A
CNER3,#0FFH,LO42
INCR2
;传送
LO42:
INCR3
CJNER5,#0FFH,LO43
INCR4
;源地址加1
LO43:
INCR5
CJNER7,#00H,LO44
;目的地址加1
CJNER6,#00H,LO45;字节数减1LOOP:
SJMPLOOP
NOP
LO44:
DECR7
SJMPSE22
LO45:
DECR7
DECR6
SJMPSE22;未完继续
END
实验五简单I/O口应用
一、实验目的掌握P1口作为I/O口的使用方法,理解读引脚和读锁存器的区别。
二、实验要求运行不同的程序,观察发光二极管的亮灭状态,比较程序的特点,了解汇编语言设计
的基本思路和指令应用。
三、思想描述
流程图:
;程序:
所有发光二极管不停地闪动
程序流程图
LED_PORTEQUP1
ORG0000H程序从地址0000H开始存放
LJMPSTART
ORG0100H
START:
CLREA;关闭所有中断
MOVLED_PORT,#OOH;点亮所有发光二极管
LCALLDELAY涎时
MOVLED_PORT,#OFFH;灭掉所有发光二极管
LCALLDELAY
SJMPSTART;重复闪动
DELAY:
MOVR3,#7FH涎时子程序
DEL2:
MOVR4,#0FFH
DEL1:
NOP
DJNZR4,DEL1
DJNZR3,DEL2
RET
END;程序:
用于关控制发二极管的显示方式
LED_PORTEQUP1
ORG
LJMP
0000H
START
ORG
0100H
START:
CLREA
;关闭所有中断
MOV
P3,#11111111B
;使P3口锁存器置位
MOV
A,P3
;读P3口引脚线信号
ANL
A,#00010000B
;逻辑与操作,屏蔽掉无关位
JZDDPING;判断
P3.4是否接地,若是,跳转到DDPING执行
MOV
LED_PORT,#00H
;否则,P3.4高电平,点亮所有发光二极管
SJMP
START
DDPING:
MOV
LED_PORT,#55H
;P3.4接地,发光二极管交叉亮火
SJMP
START
END
只1
1Kx8
3
2
U1
18
2
9
D5
3
17
74LS240
+5V
a
5.1k
U3B
74ALS00
D2
R3
5.1k
74ALS00
U3A
IB-L12-^°
1
Pp
7
5
D3
5
D4
D7K
*
+5V
1Y1
1A1
1Y2
1A2
1Y3
1A3
1Y4
1A4
2Y1
2A1
2Y2
2A2
2Y3
2A3
2Y4
2A4
1G
2G
4
2
6~
~3~
8
41
11
5
16
15
―8"
1
9
30pF
19
18
U2
P1.0/T
P0.0/AD0
P1.1/T
P0.1/AD1
.P1.2
P0.2/AD2
P1.3
P0.3/AD3
.P1.4
P0.4/AD4
.P1.5
P0.5/AD5
.P16
P06/AD6
.P1.7
P0.7/AD7
P3.3/INT1
P2.0
P3.2INT0
P2.1
P2.2
.P35/T1
P23
P34/T0
P24
P2.5
.TA/vp
P2.6
P2.7
]XLAT1
&XLAT2
P3.0/RXD
P3.1/TXD
.RESET
ALE/P
PSEN
P3.77RD
P3.6/WR
15
14
31
MCU8052
13
120e
39
38
37
36
33
32
21
22
23
25
26
28
10
11
30
Title
Size
A4
Number
Revision
Date:
2-Aug-2004
Sheetof
File:
EJZV2ddb
DrawnBy•
实验六P3口输入P1口输出实验
一、实验目的P3口输入P1口输出,实现I/O控制。
二、实验要求撰写实验报告,给出输入输出实现方式,画出实验原理图,给出程序流程及实现的全部代码。
三、思想描述:
系统板上硬件连线
(1.把“单片机系统”区域中的PO.O—P0.7端口用8芯排线连接到“动态静态数码显示模块”区域中
的a—h端口上;要求:
P0.0对应着a,P0.1对应着b,……,P0.7对应着h。
(2.把“单片机系统”区域中的P2.0端口用8芯排线连接到“动态数码显示模块”区域中的任一个公
共端上。
实验原理
AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。
只要通过设置特殊功能寄存器TMOD,即可完
成。
定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。
现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536US,即65.536ms,无法
达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定
时为50ms,即要定时1秒需要经过20次的50ms的定时。
对于这20次我们就可以采用软件的方法来统计了。
因此,我们设定TMOD=00000001B,即TMOD=01H
下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出
TH0=(216—50000)/256
TL0=(216—50000)MOD256
当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能
寄存器中的TF0标志位,如果TF0=1表示定时时间已到。
实验结果
开始
TH山TLU装入初值
Second置山数码县示气0"
TF0=0
Lj
訂ZS^Rt=TCDun.t+l
Second加1,并送出显示
汇编源程序
SECONDTCOUNT
START:
DISP:
WAIT:
NEX:
NEXT:
TABLE:
汇编源程序
SECONDTCOUNT
START:
INT0X:
查询法)
EQU30H
EQU31H
ORG00H
SETBP2.0
MOVSECOND,#00H
MOVTCOUNT,#00H
MOVTMOD,#01H
MOVTH0,#(65536-50000)/256
MOVTL0,#(65536-50000)MOD256
SETBTR0
MOVA,SECOND
ANLA,#0FH
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
JNBTF0,WAIT
CLRTF0
MOVTH0,#(65536-50000)/256
MOVTL0,#(65536-50000)MOD256
INCTCOUNT
MOVA,TCOUNT
CJNEA,#20,NEXT
MOVTCOUNT,#00H
INCSECOND
MOVA,SECOND
CJNEA,#60,NEX
MOVSECOND,#00H
LJMPDISP
LJMPWAIT
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND
中断法)
EQU30H
EQU31H
ORG00H
LJMPSTART
ORG0BH
LJMPINT0X
SETBP2.0
MOVSECOND,#00H
MOVA,SECOND
ANLA,#0FH
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
MOVTCOUNT,#00H
MOVTMOD,#01H
MOVTH