单片机实验教程.docx
- 文档编号:9891455
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:54
- 大小:1.07MB
单片机实验教程.docx
《单片机实验教程.docx》由会员分享,可在线阅读,更多相关《单片机实验教程.docx(54页珍藏版)》请在冰点文库上搜索。
单片机实验教程
单片机实验教程
应用技术学院电气系
邵淑华
目录
第一部分软件实训部分4
实训一数据传送4
实训二多字节十进制加法5
实训三找最大数6
实训四循环程序设计8
实训五排序9
第二部分硬件实训部分10
实训六P1口实训一10
实训七P1口实训二12
实训八简单I/O口扩展实验14
实训九定时器节日彩灯控制器15
实训十有中断申请的交通灯控制实训17
实训十一可编程并行接口芯片扩展键盘21
实训十二数字钟26
第三部分Keil使用简介32
第一部分软件实训部分
实训说明:
本时实训内容是参照北京理工大学ELΠ型教学实训系统来编写的
实训一数据传送
一实训目的
1熟悉单片机开发工具的使用,掌握在开发机上设计、调试和运行程序的方法。
2掌握数据传送指令的应用和手工汇编的方法。
二实训设备及工作环境
1硬件:
计算机一台EL-Ⅱ型综合单片机实训箱一台通讯电缆一根。
2软件:
Windows操作系统keilc51。
三实训内容:
编制数据块搬家程序。
要求先将8031单片机内部RAM的40H-4FH单元置初值A0H-AFH;然后将内部RAM40H-4FH单元的内容传送到外部RAM3800H-380FH;再将外部RAM7800H-780FH单元内容传回内部RAM50H-5FH单元。
四实训步骤:
1将目标程序输入到开发机中进行调试。
2执行程序、检查运行结果,查看外部RAM7800H-780FH单元和内部RAM50H-5FH单元中的内容。
五参考程序清单:
CSEGAT0000H
LJMPSTART
CSEGAT4100H
START:
MOVR0,#40H
MOVR2,#10H
MOVA,#0A0H
A1:
MOV@R0,A
INCR0
INCA
DJNZR2,A1
MOVR0,#40H
MOVDPTR,#7800H
MOVR2,#10H
A2:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR2,A2
MOVR0,#50H
MOVDPTR,#7800H
MOVR2,#10H
A3:
MOVXA,@DPTR
MOV@R0,A
INCR0
INCDPTR
DJNZR2,A3
A4:
AJMPA4
END
六实训报告要求:
1程序运行后,外部RAM7800H-780FH单元和内部RAM50H-5FH单元内容各是什么?
实训二多字节十进制加法
一实训目的:
1熟悉单片机实训开发系统的使用,掌握在开发机上调试运行程序的方法。
2熟练掌握加法汇编语言编程方法,及程序调试方法。
二实训设备及工作环境
1硬件:
计算机一台EL-Ⅱ型综合单片机实训箱一台通讯电缆一根。
2软件:
Windows操作系统keilc51。
三实训内容:
编制多字节十进制(BCD码)加法程序,要求:
先将加数1234存储于40H,41H单元,另一加数5678存储于50H,51H单元;两数相加后,结果存于50H,51H单元(低位存于50H,高位存于51H),最高位溢出位为52H。
四实训步骤:
1将目标程序输入开发机中进行调试。
2执行程序检验运行结果。
五参考程序清单:
CSEGAT0000H
LJMPSTART
CSEGAT4100H
START:
MOVR0,#41H
MOV@R0,#12H
DECR0
MOV@R0,#34H
MOVR1,#51H
MOV@R1,#56H
DECR1
MOV@R1,#78H
MOVR2,#02H
LCALLDACN
HERE:
AJMPHERE
DACN:
CLRC
DAL:
MOVA,@R0
ADDCA,@R1
DAA
MOV@R1,A
INCR0整
INCR1
DJNZR2,DAL
CLRA
MOV52H,A
MOVACC0,C
MOV52H,A
RET
END
六实训要求:
1修改程序计算5678h+6789h并检查结果是否正确。
2试编写6字节十六进制加法程序并保留进位位。
实训三找最大数
一实训目的:
1熟悉8031指令系统,掌握程序设计方法。
2掌握找最大数的汇编语言的编程方法。
二实训设备及工作环境
1硬件:
计算机一台EL-Ⅱ型综合单片机实训箱一台通讯电缆一根。
2软件:
Windows操作系统keilc51。
三实训内容:
将50H-59H十个单元中的最大数存于50H单元中。
四编程说明:
R0存放数据首地址指针,R2存放字节数,A中存放最大的数。
五实训步骤:
1输入程序代码并进行调试。
2检查程序运行后50H单元中是否为十个数中的最大数。
六参考程序清单1:
CSEGAT0000H
LJMPSTART
CSEGAT4100H
START:
MOVR0,#50H
MOVR2,#09H
MOVA,R0
MOVR1,A
MOVA,@R1
LP0:
:
MOVR3,A
INCR1
CLRC
SUBBA,@R1
JNCLP1
MOVA,@R1
SJMPLP2
LP1:
MOVA,R3
LP2:
DJNZR2,LP0
MOV@R0,A
HERE:
AJMPHERE
END
参考程序清单2:
CSEGAT0000H
LJMPSTART
CSEGAT4100H
START:
MOVR0,#50H
MOVR2,#09H
MOVA,@R0
INCR0
LOOP:
CLRC
SUBBA,@R0
JNCLOOP1
MOVA,@R0
SJMPLOOP2
LOOP1:
ADDA,@R0
LOOP2:
INCR0
DJNZR2,LOOP
MOV50H,A
HERE:
AJMPHERE
END
七实训报告要求:
1若想将50H-59H十个单元的无符号数中找最小的数程序如何修改?
实训四循环程序设计
一实训目的:
1熟悉8031指令系统,掌握程序设计方法。
2掌握循环程序设计的编写方法。
二实训设备及工作环境
1硬件:
计算机一台EL-Ⅱ型综合单片机实训箱一台通讯电缆一根
2软件:
Windows操作系统keilc51
三实训内容:
1设计一个循环程序得到相应的延时时间,同时可以改变参数来改变延时时间。
四实训说明:
1使用KEIL软件进行调试。
五参考程序清单:
CSEGAT0000H
LJMPSTART
CSEGAT4100H
START:
MOVR7,#200;1US
DEL1:
MOVR6,#123
NOP
DEL2:
DJNZR6,DEL2
DJNZR7,DEL1
here:
ajmphere
end
六、实训报告要求:
1画出程序流程图。
2修改程序使之改变延时时间。
实训五排序
一实训目的:
1熟悉8031指令系统,掌握程序设计方法。
2掌握排序程序的编写方法。
二实训设备及工作环境
1硬件:
计算机一台EL-Ⅱ型综合单片机实训箱一台通讯电缆一根
2软件:
Windows操作系统keilc51
三实训内容:
1将50h-59h单元的数据进行排序。
四实训说明:
1使用KEIL软件进行调试。
五参考程序清单:
CSEGAT0000H
LJMPSTART
CSEGAT4100H
START:
movr3,#09h
LOOP:
movr1,#50h
mova,r3
movr2,a
mova,@r1
incr1
loop1:
clrc
subba,@r1
jncno
adda,@r1
xcha,@r1
decr1
xcha,@r1
incr1
no:
mova,@r1
incr1
djnz,r2,loop1
djnzr3,loop
here:
ajmphere
end
七、实训报告要求:
3画出程序流程图。
4修改程序使之按照从大到小的顺序排列起来。
第二部分硬件实训部分
实训六P1口实训一
一实训目的
1掌握P1口做输出口的编程方法。
2掌握使用74LS32扩展输出口的接线及编程方法。
二实训设备及工作环境
1硬件:
计算机一台EL-Ⅱ型综合单片机实训箱一台通讯电缆一根。
2软件:
Windows操作系统keilc51。
三实验说明
P1口为准双向口,P1口的每一位都能独立地定义为输入位或输出位。
作为输入位时,必须向锁存器相应位写入“1”,该位才能作为输入。
8031中所有口锁存器在复位时均置为“1”,如果后来在口锁存器写过“0”,在需要时应写入一个“1”,使它成为一个输入。
可以用第二个实训做一下实训。
先按要求编号程序并调试成功后,可将PI口锁存器中置“0”,此时将PI做输入口,会有什么结果。
再来看一下延时程序的实现。
现常用的有两种方法,一是用定时器中断实现,一是用指令循环来实现。
在系统时间允许的情况下可以采用的后一中方法。
现要写一个延时0.1S的程序,可大致写出如下:
MOVR7,#200
(1)
DEL1:
MOVR6,#126
(2)
DEL2:
DJNZR6,DEL2(3)
DJNZR7,DEL1(4)
四连线方法:
执行程序1时:
P1.0~P1.7接发光二级管LED1~LED8。
执行程序2时:
P1.0~P1.7接开关K1~K8。
74LS273的00~07接发光二级管LED1~LED8;74LS273的片选端CS273接CS0。
五程序举例:
NAMET1_1;P1口输实训
CSEGAT0000H
LJMPSTART
CSEGAT4100H
START:
MOVA,#0FEH;先让第一个发光二极管点亮
LOOP:
MOVP1,A;从P1口输出到发光二极管
MOVR1,#5;延时05秒
DEL1:
MOVR2,#200
DEL2:
MOVR3,#126
DEL3:
DJNZR3,DEL3
DJNZR2,DEL2
DJNZR1,DEL1
RLA;左移一位,点亮下一个发光二极管
JMPLOOP
SJMPSTART
END
NAMET1_2;P1口输实训
PORTEQU0CFA0H;片选地址CS0
CSEGAT0000H
LJMPSTART
CSEGAT4100H
START:
MOVP1,#0FFH
LOOP:
MOVA,P1;从P1口读取开关状态
MOVDPTR,#PORT
MOVX@DPTR,A;从74LS273输出到发光二极管
LJMPLOOP;循环
END
六实训分析:
1如果使彩灯成从中间到两边循环点亮程序如何修改?
2如何改变彩灯的流水速度?
实训七P1口实训二
一实训目的
1掌握P1口控制发光二极管的方法。
2掌握流水灯的花样编写方法。
二实训设备及工作环境
1硬件:
计算机一台EL-Ⅱ型综合单片机实训箱一台通讯电缆一根。
2软件:
Windows操作系统keilc51。
三实训说明
P1口作为输入输出口。
P1.0P1.1接K1K2;P1.2P1.3接发光二级管L1L2;P1.6P1.7接L5L6。
K1作为左转弯开关,K2作为右转弯开关。
L1L2作为左转弯灯,L5L6作为右转弯灯。
要求编写程序实现如下功能:
按下K1时左转弯灯以一定频率闪烁,按下K2时右转弯灯以一定频率闪烁,K1K2同时按下或弹起,发光二极管灭。
实训中的“SETBP1.0SETBP1.1”改为“CLR”看看会有什么结果。
四连线方法
K1接P10K2接P11;
L1接P12L2接P13;
L5接P16L6接P17。
五程序举例
NAMET2;P1口输实训
CSEGAT0000H
LJMPSTART
CSEGAT4100H
START:
SETBP10
SETBP11;用于输入时先置位口内锁存器
MOVA,P1
ANLA,#03H;从P1口读入开关状态,取低两位
MOVDPTR,#TAB;转移表首地址送DPTR
MOVCA,@A+DPTR
JMP@A+DPTR
TAB:
DBPRG0-TAB
DBPRG1-TAB
DBPRG2-TAB
DBPRG3-TAB
PRG0:
MOVP1,#00;向P1口输出0,发光二极管全灭
JMPSTART
PRG1:
MOVP1,#0CH;只点亮L1L2,表示左转弯
AAA:
ACALLDELAY;延时05秒
MOVP1,#00
ACALLDELAY;再熄灭05秒
JMPSTART
PRG2:
MOVP1,#0C0H;只点亮L5L6,表示右转弯
JMPAAA
PRG3:
JMPPRG0;发光二极管全灭,此时K1=1,K2=1
DELAY:
MOVR1,#5;延时05秒
DEL1:
MOVR2,#200
DEL2:
MOVR3,#126
DEL3:
DJNZR3,DEL3
DJNZR2,DEL2
DJNZR1,DEL1
RET
END
六实训分析
1如果要改变灯的流水速度,程序如何修改?
2如果要改变灯的流水方向,程序如何修改?
实训八简单I/O口扩展实验
一实训目的
1掌握单片机系统中的扩展I/O口的方法。
2掌握数据输入输出程序的编制方法。
二实训设备及工作环境
1硬件:
计算机一台EL-Ⅱ型综合单片机实训箱一台通讯电缆一根。
2软件:
Windows操作系统keilc51。
三实训说明
MCS-51外部扩展空间很大,但数据总线口和控制信号线的负载能力是有限的,若需要扩展的芯片较多,则MCS-51总线口的负载过重,74LS244是一个扩展输入口,同时也是一个单向驱动器,以减轻总线口的负担。
程序中加一段延时程序,以减少总线口读写的频繁程度。
延时时间约为0.01秒,不会影响显示的稳定
四实验内容
利用74LS244作为输入口,读取开关的状态,并将此状态通过发光二极管显示出来。
五实验步骤
1.74LS244的IN0~IN7接开关的K1~K8,片选信号CS244接CS1.
2.74LS273的O0~O7接发光二极管的L1~L8,片选信号CS273接CS2
3.编程全速执行。
4.波动开关K1~K8,观察发光二极管状态的变化。
六.参考程序
;74LS244的IN0~IN7接开关的K1~K8,片选信号CS244接CS1。
;74LS273的O0~O7接发光二极管的L1~L8,片选信号CS273接CS2。
NAMET4;I/O口扩展实验
CSEGAT0000H
LJMPSTART
CSEGAT4100H
INPORTEQU0CFA8H;74LS244端口地址
OUTPORTEQU0CFB0H;74LS273端口地址
START:
MOVDPTR,#INPORT
LOOP:
MOVXA,@DPTR;读开关状态
MOVDPTR,#OUTPORT
MOVX@DPTR,A;显示开关状态
MOVR7,#10H;延时
DEL0:
MOVR6,#0FFH
DEL1:
DJNZR6,DEL1
DJNZR7,DEL0
JMPSTART
END
六实训分析
1说明74LS244芯片的特点及工作原理?
2说明74LS273芯片的特点及工作原理?
实训九定时器节日彩灯控制器
一实训目的
1学习8031定时器/计数器初值的计算方法。
2学习8031内容定时器设置和编程方法。
3进一步掌握定时器/计数器中断处理程序的编写方法。
4掌握花样流水灯的控制方法,并灵活运用。
二实训设备及工作环境
1硬件:
计算机一台EL-Ⅱ型综合单片机实训箱一台通讯电缆一根。
2软件:
Windows操作系统keilc51。
三实训原理说明
1定时常数的确定
定时器/计数器的输入脉冲周期与机器周期一样,为振荡频率的1/12。
本实训中时钟频率为24MHZ,一次中断方法定时不能完成05秒延时,需要循环定时完成。
如果使定时器1每次产生001秒定时中断,那么50次中断就可以产生05秒的定时。
实现方法:
令RO=50HCPU每次响应中断后将RO中计数器值减一,由RO来控制循环次数,50次中断即可实现05秒延时。
时间常数的计算方法:
机器周期=12/晶振频率=12/24*106=05*10-6S
设计数器值为X,则(216-x)*05*10-6S=001,可求得X=45535
化为十六进制则X=3800H,故初中始值为TH1=B1HTL1=DFH
2、初始化程序
包括定时器初始化和中断系统初始化,主要是对IPIETCONTMOD的相应位进行正确的设置,并将时间常数送入定时器中。
由于只有定时器中断,IP便不必设置。
3、编程说明
由8031内部定时器1`按方式1工作,即作为16位定时器使用,每01秒种T1溢出中断一次。
P1口的P10~P17分别接发光二级管的L1~L8。
要求编写程序模拟一循环彩灯。
彩灯变化花样可自行设计。
程序中给出的变化花样为:
1L1L2……L8依次点亮2L1L2……L8全亮,全灭等各种花样方式。
各时序间隔为05秒。
让发光二级管按以上规律循环显示下去。
其中,中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。
主程序则用来控制发光二级管的燃灭顺序。
四实训电路
五实训电路连线
P10~P17分别接发光二级管L1~L8
六实训程序清单
NAMECAIDENG;定时器实训
CSEGAT0000H
LJMPSTART
CSEGAT001BH;定时器/计数器1中断程序入口地址
LJMPINT
CSEGAT4100H
START:
MOVA,#01H;首显示码
MOVR1,#03H;03是偏移量,即从基址寄存器到表首的距离
MOVR0,#50H;50是计数值
MOVTMOD,#10H;计数器置为方式1
MOVTL1,#0DFH;装入时间常数
MOVTH1,#0B1H
ORLIE,#88H;CPU中断开放标志位和定时器
;1溢出中断允许位均置位
SETBTR1;开始计数
LOOP1:
CJNER0,#00,DISP
MOVR0,#50H;R0计数计完一个周期,重置初值
INCR1;表地址偏移量加1
CJNER1,#31H,LOOP2
MOVR1,#03H;如到表尾,则重置偏移量初值
LOOP2:
MOVA,R1;从表中取显示码入累加器
MOVCA,@A+PC
JMPDISP
DB01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0FEH,0FCH
DB0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH,00H,0FEH
DB0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH
DB0EFH,0F7H,0FBH,0FDH,0FEH,00H,0FFH,00H
DISP:
MOVP1,A;将取得的显示码从P1口输出显示
JMPLOOP1
INT:
CLRTR1;停止计数
DECR0;计数值减一
MOVTL1,#0DFH;重置时间常数初值
MOVTH1,#0B1H
SETBTR1;开始计数
RETI;中断返回
END
七实训调试与分析
1调试过程中会出现各式各样的错误,要细心改正。
调试通过后运行程序在实训箱上看结果。
2分析并解释程序中查表的内容。
3试修改程序,改变花样等的流水速度。
实训十有中断申请的交通灯控制实训
一实训目的
1学习在单片机系统中扩展简单I/O接口方法
2学习数据输出程序的设计方法
3学习模拟交通灯控制的实现方法
4学习外部中断技术的基本使用方法
二实训设备及工作环境
1硬件:
计算机一台EL-Ⅱ型综合单片机实训箱一台通讯电缆一根
2软件:
Windows操作系统keilc51
三实训原理与说明
首先必须了解交通路灯的燃灭规律。
本实训需要用到实训箱上八个发光二级管中的六个,即红黄绿各两个。
不妨将L1L3L5作为东西方向的指示灯,将L2L4L6作为南北方向的指示灯而交通灯的燃灭规律为:
初始状态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口灯灭,黄灯开始闪烁闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁闪烁若干次后,再切换到东西路口方向,重复上述过程。
各发光二级管共阳极,阴极接有与非门,因此使其点亮应使相应输入端为高电平。
当有急救车到达加入中断申请时,两个方向上的红灯亮,以便让急救车通过,假定急救车通过路口的时间为10秒,急救车通过后,交通灯恢复中断前的状态。
本实训以单脉冲为中断,表示有急救车通过。
本实训是中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。
要保护的地方,除了累加器ACC标志寄存器PSW外,还要注意:
一是主程序中的延时程序不能混用,本实训给出的程序中,住程序延时用的是R5R6R7,中断延时时用的是R3R4和新的R5。
第二主程序中每执行一步经74LS273端口输出数据的操作时,应先将所输出的数据保存到一个单元中。
因为进入中断程序后也要执行往74LS273端口输出数据的操作,中断返回时如果没有恢复中断前74LS273端口锁存器的数据,则显示往往出错,回不到中断前的状态。
还要注意一点,主程序中往端口输出数据操作要先保存再输出,例如有如下操作:
MOVA,#0F0H(0)
MOVXR1,A
(1)
MOVSAVE,A
(2)
程序如果正好执行到
(1)时发生中断,则转入中断程序,假设中断程序返回主程序前需要执行一句MOVA,SAVE指令,由于主程序中没有执行
(2)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 教程
![提示](https://static.bingdoc.com/images/bang_tan.gif)