单片机29个实验.docx
《单片机29个实验.docx》由会员分享,可在线阅读,更多相关《单片机29个实验.docx(131页珍藏版)》请在冰豆网上搜索。
单片机29个实验
实验一:
扩展存储器读写实验
一.实验要求
编制简单程序,对实验板上提供的外部存贮器(62256)进行读写操作。
二.实验目的
1.学习片外存储器扩展方法。
2.学习数据存储器不同的读写方法。
三.实验电路及连线
将P1.0接至L1。
CS256连GND孔。
四.实验说明
1.单片机系统中,对片外存贮器的读写操作是最基本的操作。
用户藉此来熟悉MCS51单片机编程的基本规则、基本指令的使用和使用本仿真实验系统调试程序的方法。
用户编程可以参考示例程序和流程框图。
本示例程序中对片外存贮器中一固定地址单元进行读写操作,并比较读写结果是否一致。
不一致则说明读写操作不可靠或该存储器单元不可靠,程序转入出错处理代码段(本示例程序通过熄灭一个发光二极管来表示出错)。
读写数据的选用,本例采用的是55(0101,0101)与AA(1010,1010)。
一般采用这两个数据的读写操作就可查出数据总线的短路、断路等,在实际调试用户电路时非常有效。
用户调试该程序时,可以灵活使用单步、断点和变量观察等方法,来观察程序执行的流程和各中间变量的值。
2.在I状态下执行MEM1程序,对实验机数据进行读写,若L1灯亮说明RAM读写正常。
3.也可进入LCA51的调试工具菜单中的对话窗口,用监控命令方式读写RAM,在I状态执行SX0000↓55,SPACE,屏幕上应显示55,再键入AA,SPACE,屏幕上也应显示AA,以上过程执行效果与编程执行效果完全相同。
注:
SX是实验机对外部数据空间读写命令。
4.本例中,62256片选接地时,存储器空间为0000~7FFFH。
五.实验程序框图
实验示例程序流程框图如下:
六.实验源程序:
ORG0000H
LJMPSTART
ORG0040H
START:
MOVSP,#60H
MOVDPTR,#0000H;置外部RAM读写地址
MOVA,#55H;测试的数据一
MOVB,A
MOVX@DPTR,A;写外部RAM
MOVXA,@DPTR;读外部RAM
XRLA,B;比较读回的数据
JNZERROR
MOVA,#0AAH;测试的数据二
MOVB,A
MOVX@DPTR,A
MOVXA,@DPTR
XRLA,B
JZPASS;测试通过
ERROR:
SETBP1.0;测试失败,点亮LED
SJMP$
PASS:
CPLP1.0;LED状态(亮/灭)转换
MOVR1,#00H;延时
DELAY:
MOVR2,#00H
DJNZR2,$
DJNZR1,DELAY
LJMPSTART;循环测试
END
实验二P1口输入、输出实验
一.实验要求
1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
2.P1口做输入口,接八个扭子开关,以实验机上74LS273做输出口,编写程序读取开关状态,将此状态,在发光二极管上显示出来。
二.实验目的
1.学习P1口的使用方法。
2.学习延时子程序的编写和使用。
三.实验电路及连线
实验一时,P1.0-P1.7接L1-L8。
实验二时,P1.0-P1.7接K1-K8,PO0-PO7接L1-L8。
CS273接8300H。
四.实验说明
1.P1口是准双向口。
它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止。
因为内部上拉电阻阻值是20KΩ~40KΩ,故不会对外部输入产生影响。
若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。
2.延时子程序的延时计算问题
对于程序
DELAY:
MOVR0,#00H
DELAY1:
MOVR1,#0B3H
DJNZR1,$
DJNZR0,DELAY1
查指令表可知MOV,DJNZ指令均需用两个机器周期,而一个机器周期时间长度为12/11.0592MHz,所以该段程序执行时间为:
((0B3+1)×256+1)×2×12÷11059200=100.002mS
五.实验程序框图
主程序框图
(1):
程序框图
(2):
六.
1、主程序
ORG0000H
LJMPSTART
ORG0040H
START:
MOVSP,#60H
MOVA,#0FEH
ROTATE:
MOVP1,A;写P1口
RLA;循环左移
LCALLDELAY;延时
NOP
SJMPROTATE
DELAY:
;延时子程序(1秒)
MOVR0,#0AH
DELAY1:
MOVR1,#00H
DELAY2:
MOVR2,#0B2H
DJNZR2,$
DJNZR1,DELAY2
DJNZR0,DELAY1
RET
END
2、读P1口程序框
ORG0000H
LJMPSTART
ORG0040H
START:
MOVDPTR,#8300H;并行输出口地址
MOVP1,#0FFH;因P1口是准双向口,所以把P1口作为
;输入口时,应先置高电平.
READ:
MOVA,P1;读开关状态
MOVX@DPTR,A;把读入的数据输出
AJMPREAD
END
实验三P3口输出控制继电器实验
一.实验要求
利用P3.5输出高低,控制继电器的开合,实现对外部装置的控制。
二.实验目的
掌握继电器控制的基本方法和经验。
三.实验电路及连线
P3.5接JD。
R-MID接L1灯,R-CLOSE接GND。
四.实验说明
现代自动控制设备中,都存在一个电子电路与电气电路的互相连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(电动机,电磁铁,电灯等),另一方面又要为电子线路的电气电路提供良好的电隔离,以保护电子电路和人身的安全。
电子继电器便能完成这一桥梁作用。
继电器电路中一般都要在继电器的线圈两头加一个二极管以吸收继电器线圈断电时产生的反电势,防止干扰。
本电路的控制端为JD,当JD为高电平时,继电器不工作,当JD为低电平时,继电器工作,常开触点吸合。
执行时,对应的LED将随继电器的开关而亮灭。
五.实验程序框图
六.源程序
ORG0000H
LJMPSTART
ORG0040H
START:
MOVSP,#60H
JD:
CPLP3.5;P3.5取反
LCALLDELAY;延时
NOP
SJMPJD
DELAY:
;延时子程序(1秒)
MOVR0,#0AH
DELAY1:
MOVR1,#00H
DELAY2:
MOVR2,#0B2H
DJNZR2,$
DJNZR1,DELAY2
DJNZR0,DELAY1
RET
END
实验四简单I/O实验(交通灯控制)
一.实验要求
以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理。
二.实验目的
1.学习在单片机系统中扩展简单I/O接口的方法。
2.学习数据输出程序的设计方法。
3.学习模拟交通灯控制的方法。
4.学习双色灯的使用。
三.实验电路及连线
PO0-PO3接DG1-DG4,PO4-P07接DR1-DR4。
CS273接8300H。
四.实验说明
1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1南北绿灯通车,东西红灯。
过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。
再转状态3,东西绿灯通车,南北红灯。
过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。
最后循环至状态1。
2.双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。
当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。
五.实验程序框图
程序框图:
六.源程序
ORG0000H
LJMPSTART
ORG0040H
START:
MOVSP,#60H
LCALLSTATUS0;初始状态(都是红灯)
CIRCLE:
LCALLSTATUS1;南北绿灯,东西红灯
LCALLSTATUS2;南北绿灯闪转黄灯,东西红灯
LCALLSTATUS3;南北红灯,东西绿灯
LCALLSTATUS4;南北红灯,东西绿灯闪转黄灯
LJMPCIRCLE
STATUS0:
;南北红灯,东西红灯
MOVDPTR,#8300H
MOVA,#0FH
MOVX@DPTR,A
MOVR2,#10;延时1秒
LCALLDELAY
RET
STATUS1:
;南北绿灯,东西红灯
MOVDPTR,#08300H
MOVA,#5AH;南北绿灯,东西红灯
MOVX@DPTR,A
MOVR2,#50;延时5秒
LCALLDELAY
RET
STATUS2:
;南北绿灯闪转黄灯,东西红灯
MOVDPTR,#8300H
MOVR3,#03H;绿灯闪3次
FLASH:
MOVA,#5FH
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
MOVA,#5AH
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
DJNZR3,FLASH
MOVA,#0AH;南北黄灯,东西红灯
MOVX@DPTR,A
MOVR2,#10;延时1秒
LCALLDELAY
RET
STATUS3:
;南北红灯,东西绿灯
MOVDPTR,#8300H
MOVA,#0A5H
MOVX@DPTR,A
MOVR2,#50;延时5秒
LCALLDELAY
RET
STATUS4:
;南北红灯,东西绿灯闪转黄灯
MOVDPTR,#8300H
MOVR3,#03H;绿灯闪3次
FLASH1:
MOVA,#0AFH
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
MOVA,#0A5H
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
DJNZR3,FLASH1
MOVA,#05H;南北红灯,东西黄灯
MOVX@DPTR,A
MOVR2,#10;延时1秒
LCALLDELAY
NOP
RET
DELAY:
;延时子程序
PUSH2
PUSH1
PUSH0
DELAY1:
MOV1,#00H
DELAY2:
MOV0,#0B2H
DJNZ0,$
DJNZ1,DELAY2;延时100mS
DJNZ2,DELAY1
POP0
POP1
POP2
RET
END
实验五外部中断实验(急救车与交通灯)
一.实验要求
在实验四内容的基础上增加允许急救车优先通过的要求。
有急救车到达时,两向交通信号为全红,以便让急救车通过。
假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。
本实验以按键为中断申请,表示有急救车通过。
二.实验目的
1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
三.实验电路及连线
PO0-PO3接DG1-DG4,PO4-P07接DR1-DR4。
CS273接8300H。
K8接P3.2。
四.实验说明
中断服务程序的关键是:
1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。
2.必须在中断程序中设定是否允许中断重入,即设置EX0位。
本例中使用了INT0中断,一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。
本例的INT0程序保护了PSW,ACC,2等三个寄存器并且在退出前恢复了这三个寄存器。
另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。
本例中没有涉及这种情况。
实验开始时K8应在H(高电平)端,要产生中断时先拨向L(低电平)端再拨回H端。
五.实验程序框图
六.源程序
ORG0000H
LJMPSTART
ORG0003H;INT0中断入口地址
LJMPINT0
ORG0040H
START:
MOVSP,#60H
SETBEX0;INT0中断有效
SETBIT0
SETBEA
LCALLSTATUS0;初始状态(都是红灯)
CIRCLE:
LCALLSTATUS1;南北绿灯,东西红灯
LCALLSTATUS2;南北绿灯闪转黄灯,东西红灯
LCALLSTATUS3;南北红灯,东西绿灯
LCALLSTATUS4;南北红灯,东西绿灯闪转黄灯
LJMPCIRCLE
INT0:
PUSHPSW;保护现场
PUSH2
PUSHACC
MOVDPTR,#8300H
MOVA,#0FH;南北,东西都亮红灯
MOVX@DPTR,A
MOVR2,#100;延时10秒
LCALLDELAY
POPACC;恢复现场
MOVX@DPTR,A
POP2
POPPSW
RETI
STATUS0:
;南北红灯,东西红灯
MOVDPTR,#8300H
MOVA,#0FH
MOVX@DPTR,A
MOVR2,#10;延时1秒
LCALLDELAY
RET
STATUS1:
;南北绿灯,东西红灯
MOVDPTR,#8300H
MOVA,#5AH;南北绿灯,东西红灯
MOVX@DPTR,A
MOVR2,#50;延时5秒
LCALLDELAY
RET
STATUS2:
;南北绿灯闪转黄灯,东西红灯
MOVDPTR,#8300H
MOVR3,#03H;绿灯闪3次
FLASH:
MOVA,#5FH
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
MOVA,#5AH
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
DJNZR3,FLASH
MOVA,#0AH;南北黄灯,东西红灯
MOVX@DPTR,A
MOVR2,#10;延时1秒
LCALLDELAY
RET
STATUS3:
;南北红灯,东西绿灯
MOVDPTR,#8300H
MOVA,#0A5H
MOVX@DPTR,A
MOVR2,#50;延时5秒
LCALLDELAY
RET
STATUS4:
;南北红灯,东西绿灯闪转黄灯
MOVDPTR,#8300H
MOVR3,#03H;绿灯闪3次
FLASH1:
MOVA,#0AFH
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
MOVA,#0A5H
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
DJNZR3,FLASH1
MOVA,#05H;南北红灯,东西黄灯
MOVX@DPTR,A
MOVR2,#10;延时1秒
LCALLDELAY
NOP
RET
DELAY:
;延时子程序
PUSH2
PUSH1
PUSH0
DELAY1:
MOV1,#00H
DELAY2:
MOV0,#0B2H
DJNZ0,$
DJNZ1,DELAY2;延时100mS
DJNZ2,DELAY1
POP0
POP1
POP2
RET
END
实验六定时器实验
一.实验要求
由8031内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。
P1口的P1.0-P1.7分别接八个发光二极管。
要求编写程序模拟一时序控制装置。
开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮......一直循环下去。
二.实验目的
1.学习8031内部计数器的使用和编程方法。
2.进一步掌握中断处理程序的编程方法。
三.实验电路及连线
P1.0--P1.7接L1--L8
四.实验说明
1.关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。
内部计数器在单片机中主要有定时器和计数器两个功能。
本实验用的是定时器,有关计数器的说明请查阅实验七。
2.内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
因为实验系统的晶振是11.0592MHz,所以定时常数的设置可按以下方法计算:
机器周期=12÷11.0592MHz=1.0857μS
(65536-定时常数)*1.0857μS=50mS
定时常数=4C00H
3.定时器的有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
TMOD用于设置定时器/计数器的工作方式0~3,并确定用于定时还是用于计数。
TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行
或停止等。
4.在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
五.实验程序框图
程序框图:
六.实验程序
ORG0000H
AJMPSTART
ORG001BH;T1中断入口地址
AJMPINT_T1
ORG0100H
START:
MOVSP,#60H
MOVTMOD,#10H;置T1为方式1
MOVTL1,#00H;延时50mS的时间常数
MOVTH1,#4BH
MOVR0,#00H
MOVR1,#20
SETBTR1
SETBET1
SETBEA;开中断
SJMP$
INT_T1:
;T1中断服务子程序
PUSHACC;保护现场
PUSHPSW
PUSHDPL
PUSHDPH
CLRTR1;关中断
MOVTL1,#00H;延时50mS常数
MOVTH1,#4BH
SETBTR1;开中断
DJNZR1,EXIT
MOVR1,#20;延时一秒的常数
MOVDPTR,#DATA;置常数表基址
MOVA,R0;置常数表偏移量
MOVCA,@A+DPTR;读常数表
MOVP1,A;送P1口显示
INCR0
ANL00,#07H
EXIT:
POPDPH;恢复现场
POPDPL
POPPSW
POPACC
RETI
;LED显示常数表
DATA:
DB0FAH,0F5H,0AFH,05FH,0AAH,55H,00H,0FFH
END
实验七计数器实验
一.实验要求
8031内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。
使用8031的T1作定时器,50ms中断一次,看T0内每0.50ms来了多少脉冲,将其数值按二进制数在74LS273驱动LED灯上显示出来,5秒后再次测试。
二.实验目的
1.学习8031内部定时/计数器使用方法。
2.进一步掌握中断处理编程方法。
三.实验电路及连线
P3.4接一计数脉冲(25模块中的149.06K频率)。
PO0~PO7接L1~L8。
CS273接8300H。
四.实验说明
1.本实验中内部计数器起计数器的作用。
外部事件计数脉冲由P3.4引入定时器T0。
单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。
这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。
同时这就决定了输入波形的频率不能超过机器周期频率。
2.实验时P3.4对应的连线为149.06KHZ孔,0.5ms内来了80次(50H)脉冲。
五.实验程序框图
六.实验程序:
ORG0000H
AJMPSTART
ORG000BH;T0中断入口地址
RETI
ORG001BH;T1中断入口地址
AJMPINT_T1
ORG0040H
START:
MOVSP,#60H
MOVTMOD,#1DH;置T1为方式1
;置T0为方式1,计数方式,
;门控选通位有效
MOVTL0,#0H;计数器清零
MOVTH0,#0H
MOVTL1,#32H;延时0.50mS常数
MOVTH1,#0FEH
MOVR0,#20;延时5秒常数
SETBTR0;启动T0
SETBET0
SETBTR1;启动T1
SETBET1
SETBEA;开中断
SJMP$
INT_T1:
PUSHACC
PUSHPSW
CLRTR1
MOVTL1,#32H;延时0.50mS常数
MOVTH1,#0FEH
MOVR1,TL0;保存计数值
MOVR2,TH0
MOVTL0,#00H;清计数器
MOVTH0,#00H
SETBTR1
DJNZR0,EXIT
MOVR0,#20;延时5秒常数
MOVDPTR,#8300H;LED地址
MOVA,R1
MOVX@DPTR,A;把计数值在LED上显示
EXIT:
POPPSW
POPACC
RETI
END
实验八8255输入、输出实验
一.实验要求
编写程序,使用8255可编程并行口芯片,来检测八位拨动开关的状态,并控制八位发光二极管。
使得八位发光二极管的亮灭变化与八位拨动开关的状态相一致。
实验中用8255PB口作输入,PC口做输出。
二.实验目的
了解8255芯片结构及编程方法。
三.实验电路及连线
8255的PB0~PB7(PB口)接至八位拨动开关K1~K8。
将PC0~PC7(PC口)接至八位发光二极管L1--L8。
CS8255接8500H。
四.实验说明
可编程通用接口芯片8255A有三个八位的并行I/O口,请用户仔细阅读有关书籍掌握其特点和各种用法。
由于8255的A1、A2脚分别接至地址线的A0、A1。
所以相对应8255各口/寄存器的地址分配如下:
PA口:
8500H;PB口:
8502H;PC口:
8504H;控制寄存器地址:
8506H。
本示例程序中使用PB口作输入,检测八位拨动开关的状态;使用PC口作输出,控制八个发光二极管的亮灭。
五.实验程序框图
实验程序流程框图如下:
六.实验程序见:
;---------------------------------------------------------
D8255EQU8506H;8255状态/命令口地址
D8255AEQU8500H