51单片机实验代码.docx
- 文档编号:26098713
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:55
- 大小:457.89KB
51单片机实验代码.docx
《51单片机实验代码.docx》由会员分享,可在线阅读,更多相关《51单片机实验代码.docx(55页珍藏版)》请在冰豆网上搜索。
51单片机实验代码
实验二清零程序
一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。
二、实验内容把2000H~20FFH的内容清零。
三、实验程序框图
;(0000H)送DPTR
;0送(DPTR
;DPTR+1
;字节数加1
;不到FF个字节再清
四、实验步骤用连续或单步的方式运行程序,检查2000~20FF中执行程序前后的内容变化。
五、思考假使把2000H~20FFH中的内容改成FF,如何修改程序。
六、程序清单文件名:
ORG0000H
LJMPSE01
ORG0640H
SE01:
MOVR0,#00H
MOVDPTR,#2000H
LOO1:
CLRA
MOVX@DPTR,A
INCDPTR
INCRO
CJNER0,#00H,LOO1
LOOP:
SJMPLOOP
END
实验三拆字程序
一、实验目的掌握汇编语言设计和调试方法
二、实验内容把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。
三、实验程序框图
四、实验步骤用连续或单步方式运行程序,检查2000H~2002H中内容变化情况。
五、思考如何用断点方式调试本程序六、程序清单文件名:
ORG0000H
LJMPSE02
ORG0660H
SE02:
MOVDPTR,#2000H
MOVXA,@DPTR
MOVB,A
SWAPA
ANLA,#0FH
INCDPTR
MOVX@DPTR,A
INCDPTRMOVA,BANLA,#0FHMOVX@DPTR,ALOOP:
JMPLOOP
END
;送2001H
;(2000)内容屏蔽高位
;送2002H
实验四数据区传送子程序
一、实验目的掌握RAM中的数据操作
二、实验内容把R2、R3源RAM区首地址内的R6R7字节数据传送到R4R5目的RAM区。
三、实验程序框图
CJNER6,#00H,LO45
LOOP:
SJMPLOOP
NOP
;字节数减1
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,#0FFH;灭掉所有发光二极管
LCALLDELAY
SJMPSTART;重复闪动
DELAY:
MOVR3,#7FH;延时子程序
DEL2:
MOVR4,#0FFH
DEL1:
NOP
DJNZR4,DEL1
DJNZR3,DEL2
RET
END
;程序:
用于关控制发二极管的显示方式
LED_PORTEQUP1
ORG0000H
LJMPSTART
ORG0100H
START:
CLREA
MOVP3,#B
MOVA,P3
ANLA,#00010000B
JZDDPING
MOVLED_PORT,#00H
SJMPSTART
DDPING:
MOVLED_PORT,#55HSJMPSTART
;关闭所有中断
;使P3口锁存器置位
;读P3口引脚线信号
;逻辑与操作,屏蔽掉无关位
;判断是否接地,若是,跳转到DDPING^行
;否则,高电平,点亮所有发光二极管
;接地,发光二极管交叉亮灭
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
30pF
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.把“单片机系统”区域中的—端口用8芯排线连接到“动态静态数码显示模块”区域中的a—h端
口上;要求:
对应着a,对应着b,……,对应着ho
(2.把“单片机系统”区域中的端口用8芯排线连接到“动态数码显示模块”区域中的任一个公共端
上。
实验原理
AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。
只要通过设置特殊功能寄存器TMOD即可完成。
定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。
现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536US,即,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms
即要定时1秒需要经过20次的50ms的定时。
对于这20次我们就可以采用软件的方法来统计了。
因此,我们设定TM0900000001B,即TMOb01H
下面我们要给T0定时/计数器的THO,TL0装入预置初值,通过下面的公式可以计算出
TH0=(216—50000)/256
16
TL0=(2—50000)MOD256
当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄
存器中的TF0标志位,如果TF0=1表示定时时间已到。
实验结果
汇编源程序
SECONDTCOUNT
START:
DISP:
WAIT:
NEX:
NEXT:
TABLE:
汇编源程序
SECONDTCOUNT
START:
INT0X:
查询法)
EQU30H
EQU31H
ORG00H
SETB
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
SETB
MOVSECOND,#00H
MOVA,SECOND
ANLA,#0FH
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
MOVTCOUNT,#00H
MOVTMOD,#01H
MOVTH0,#(65536-50000)/256
MOVTL0,#(65536-50000)MOD256
SETBTR0
SETBET0
SETBEA
SJMP$
MOVTH0,#(65536-50000)/256
MOVTL0,#(65536-50000)MOD256
INCTCOUNT
MOVA,TCOUNT
CJNEA,#20,NEXT
MOVTCOUNT,#00H
INCSECOND
MOVA,SECOND
ANLA,#0FH
MOVDPTR,#TABLEMOVCA,@A+DPTR
MOVP0,A
NEXT:
RETI
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
实验7外部中断实验
一、实验目的中断实验输出控制,学习中断程序设计方法,理解中断机制理解下降沿中断和低电平中断的区别。
二、实验要求编写主程序实现系统的初始化,若有不同的初始化方式,应有状态指示;编写中断服务程序,服务程序操作以能明确判断发生一次中断为准,且有声光指示作为人机界面。
实验前必须认真复习中断相关内容,并在实验报告上写出预习报告,给出实验方案,经过实验指导教师检查合格后,方可进行实验。
实验结束后撰写实验报告画出实验原理图,给出程序流程及实现的全部代码。
实验原理
用8051单片机设计一交通信号灯模拟控制系统,能够完成正常情况下的轮流放行以及特殊情况和紧急情况下的红绿灯控制
1•掌握单片机中断系统、定时/计数器的编程应用。
2•通过对交通灯控制程序的编写与调试,掌握中断程序的结构。
3•正常情况下AB道(AB道交叉组成十字路口,A是主道,B是支道)轮流放行,A道放行1分
钟(其中5秒用于警告),B道放行30秒(其中5秒用于警告)。
4.一道有车而另一道无车时,使有车车道放行,K5键按下表示A道有车,K1键按下表示B道有车。
5.K9键按下表示有紧急车辆通过时,A、B道均为红灯。
控制码表
控制码
(P1口数据)
状态说明
(空)
(空)
B线
绿灯
B线
黄灯
B线
红灯
A线
绿灯
A线
黄灯
A线
红灯
1
1
1
1
0
0
1
1
F3H
A线放行,
B线禁止
1
1
1
1
0
1
0
1
F5H
A线警告,
B线禁止
1
1
0
1
1
1
1
0
DEH
A线禁止,
B线放行
1
1
1
0
1
1
1
0
EEH
A线禁止,
B线警告
(二)实验连线表
单片机
发光二极管
按键
连接1
连接2
INTO
KR1
连接3
T0
KR2
连接4
T1
KR3
连接5
INT1
(三)实验结果
紧急情况时的中断服务程
序(INTO)
主程序
一道有车、一道无车时的中断服务程序(INT1)
交通信号灯模拟控制系统程序流程图
中断响应
A红灯、B红灯
延时
20s
~~T"
恢复现场
保护现场
返回
程序:
ORG0000H
LJMPMAIN
ORG0003H
LJMPEMERG
ORG0013H
LJMPONEBUSY
BANK0_REGEQU00H;选择第0组寄存器
BANK1_REGEQU08H;选择第1组寄存器
BANK2_REGEQU10H;选择第2组寄存器
BANK3_REGEQU18H;选择第3组寄存器
;指向主程序
;指向紧急车辆出现中断程序外部中断0
;指向一道有车另一道无车中断程序外部中断1
ORG0100H
MAIN:
MOVSP,#0DFH
SETBPX0
MOVTCON,#00H
MOVTMOD,#10H
MOVIE,#85H
MOVPSW,#BANK0_REG
;置外部中断0为高优先级中断
;置外部中断0,1为电平触发
;置定时器1为方式1
;开CPU中断,开外中断0,1中断
DISP:
MOV
P1,#0F3H
;A绿灯放行,B红灯禁止
MOVR2,#6EH
;置秒循环次数
LCALL
DELAY
;调用秒延时子程序
DJNZ
R2,DISP1
;55秒不到继续循环
MOV
R2,#06
;置A绿灯闪烁循环次数
CPL
;A绿灯闪烁
LCALL
DELAY
DJNZ
R2,WARN1
;闪烁次数未到继续循环
MOV
P1,#0F5H
;A黄灯警告,B红灯禁止
MOVR2,#04H
LCALL
DELAY
DJNZ
R2,YEL1
;2秒未到继续循环
MOVP1,#0DEH
;A红灯,B绿灯
MOVR2,#32H
LCALL
DELAY
DJNZ
R2,DISP2
;25秒未到继续循环
MOVR2,#06H
DISP1:
WARN1:
YEL1:
DISP2:
WARN2:
CPL;B绿灯闪烁
LCALLDELAY
DJNZR2,WARN2
MOVP1,#0EEH;A红灯,B黄灯
MOVR2,#04H
YEL2:
LCALLDELAY
DJNZR2,YEL2
LJMPDISP;循环执行主程序
;紧急情况中断子程序
;P1口数据压栈;R3寄存器压栈
;TH1压栈;TL1压栈;A,B道均为红灯;置秒循环初值
;20秒未到继续循环
EMERG:
PUSHP1
PUSH03H
PUSHTH1
PUSHTL1
MOVP1,#0F6H
MOVR5,#28H
DELAY0:
LCALLDELAY
DJNZR5,DELAY0
POPTL1;弹栈恢复现场
POPTH1
POP03H
POPP1
RETI;返回主程序
J
;路有车一
路无车中断子程序
ONEBUSY
J
ONEBUSY:
CLREA
5
关中断
PUSH
P1
;压栈
PUSH
03H
PUSH
TH1
PUSH
TL1
SETB
EA
;开中断
JNB,BP
5
A道无车转向
MOVP1,#0F3H
;A绿灯,B红灯
SJMP
DELAY1
;转向5秒延时
BP:
JNB,EXIT;
B道无车退出中断
MOVP1,#0DEH
;A红灯,B绿灯
DELAY1:
MOVR6,#0AH
;置秒循环初值
NEXT:
LCALL
DELAY
DJNZ
R6,NEXT
;5秒未到继续循环
EXIT:
CLREA
POPTL1
5
弹栈恢复现场
POPTH1
POP03H
POPP1
SETB
EA
RETI
J
;延时子程序
DELAY:
MOVR3,#0AH
MOVTH1,#3CH
MOVTL1,#0B0H
SETBTR1
LP1:
JBCTF1,LP2
SJMPLP1
LP2:
MOVTH1,#3CH
MOVTL1,#0B0H
DJNZR3,LP1
RET
END
实验八定时器/计数器应用试验
一、实验目的掌握定时器/计数器编程方法,掌握相关寄存器的初始化及其意义;理解定时器/计数器的
本质,掌握定时器/计数器应用的两种方法:
查询和中断。
二、实验要求利用定时器实现一秒定时,或计数外部脉冲,分别采用查询和中断两种方式实现,加深对中断的理解加强对相关寄存器各个位的灵活应用能力。
人机界面方案自行设计。
实验前必须认真复习定时计数器相关内容,并在实验报告上写出定时计数器的初始化步骤,给出人机界面实现方案,经过实验指导教师检查合格后,方可进行试验。
实验结束后撰写实验报告画出实验原理图,给出程序流程及实现的全部代码。
实验连线表
单片机
MC8
按键
+5V/GND
+5V/GND
+5V/GND
SCL
SDA
GND
KC1
KR1
KR2
KR3
(三)程序流程图
闹钟修改功能子程序FTI0N1流程框图
程序清单:
数字时钟制作
BANK0_REG
EQU00H;选择第
0组寄存器
BANK1_REG
EQU08H;选择第
1组寄存器
BANK2_REG
EQU10H;选择第
2组寄存器
BANK3_REG
EQU18H;选择第
3组寄存器
LED_MAX_BITSEQU06H;LED最大位数
LED_SCL
EQU
LED_SDA
EQU
HD_K0
EQU
HD_K1
EQU
HD_K2
EQU
HD_CBP
EQU
K0_FLAG
EQU00H
K1_FLAG
EQU01H
K2_FLAG
EQU02H
SEC_FLAGEQU03H
MIN_FLAGEQU04H
HOUR_FLAGEQU05H
RMIN_FLAGEQU06HRHOUR_FLAGEQU07H
RTIM_FLAGEQU08H
;定义各标识位符号地址
;是否设定闹钟标识
ARM_FLAGEQU09H
TIMDATA
EQU3OH
RTIMDATAEQU31H
MSEC1
EQU32H
MSEC2
EQU33H
HOUR
EQU34H
MIN
EQU35H
SEC
EQU36H
RHOUR
EQU37H
RMIN
EQU38H
RSEC
EQU39H
COUNT
EQU3AH
LED_DIS_
PTREQU3BH
;时钟修改记忆单元
;闹钟修改记忆单元清零
ORG0000H
LJMPMAIN
ORG000BH
LJMPTIMER_INT
ORG0100H
MAIN:
CLREA
MOVPSW,#BANK0_REG
MOVSP,#0DFH
MOVR0,#20H
MOVR7,#80H-20H
;定时器中断服务程序
LCALLPUB_CLEAR_RAM1
LCALLLED_CLR
MOVLED_DIS_PTR,#HOUR
LCALLLED_DISP_DATA
MOVTMOD,#02H
MOVTL0,#06H
MOVTH0,#06H
SETBEA
SETBET0
SETBTR0
;清ORAM单元
;定时器T0方式2,
;定时25Ous初始值
;中断允许
;启动定时器
BEGIN:
LCALL
KEY_TEST
;调用判别键入测试程序
JC
RETEST
;有键输入则转去抖程序
JNBARM
_FLAG,BEGIN
;判别闹钟设定标识位,未设定则返回
LCALL
ALARM
;调闹钟程序
LJMP
BEGIN
;返回
RETEST:
LCALL
KEY_SCAN
JBK0_FLAG,PRO_K0
;判别是否时钟修改功能键
JBK1_FLAG,PRO_K1
;判别是否闹钟修改功能键
JBK2_FLAG,PRO_K2
;判别是否加1功能键
SJMP
BEGIN
PRO_K0:
LCALL
FTION0
;是时钟参数修改功能键则调用时钟修改程序
SJMP
BEGIN
PRO_K1:
LCALL
FTION1
;是闹钟参数修改功能键则调用闹钟设定程序
SJMP
BEGIN
PRO_K2:
LCALL
CUM;
是加1功能键则调用加1修改程序
SJMP
BEGIN
;时钟参数修改子程序FTION0
;功能:
根据时钟修改功能键按下的次数
;分别将时钟修改标识位SECBIT,MIN_FLAG,HOURBIT置1
;入口:
TIMDAT
;出口:
TIMDAT
FTION0:
JBRMIN_FLAG,BACK_B
JBRHOUR_FLAG,BACK_B;当正在设置闹钟不能设置时间,需先结束闹钟设置状态
CLRTR0;关定时器
CLRSEC_FLAG;时钟秒标识位清零
CLRMIN_FLAG;时钟分标识位清零
CLRHOUR_FLAG;时钟小时标识位清零
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 实验 代码