单片机原理与应用实验指导书.docx
《单片机原理与应用实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机原理与应用实验指导书.docx(56页珍藏版)》请在冰豆网上搜索。
单片机原理与应用实验指导书
单片机原理与应用实验指导书
南昌大学信息工程学院电气与自动化系
目录
第一章系统安装与启动............................................................................................................1
第二章MCS-51单片机硬件接口实验部分.............................................................................2
实验一I/O口输入、输出实验..................................................................................................2
实验二外部中断实验...............................................................................................................5
实验三定时/计数器实验...........................................................................................................7
实验四交通灯控制实验............................................................................................................9
实验五串转并与并转串实验...................................................................................................16
实验六8255输入、输出实验.................................................................................................19
实验七8255控制键盘与显示实验........................................................................................22
实验八并行A/D转换实验........................................................................................................27
实验九并行D/A转换实验.......................................................................................................31
实验十LCD显示实验................................................................................................................36
第一章系统安装与启动
一、实验系统工作在51实验模式
当用户需要进行MCS-51单片机实验内容时,应进入这种工作模式。
1)将JD2(CPU插座)与JD3(CPU51插座)用“CPU转接板”连接起来,JD1(CPU88插座)
空置。
2)用配套的串行通讯电缆,将9芯电缆的一端与实验机上(CPU模块处)的9芯插座SCOM1
相连,另一端与PC机的串行口相连。
3)先打开电源开关,再打开直流开关,在PC机上打开THGMW-51软件,运行实验程序,具
体操作参见本实验指导书后面章节内容。
二、51实验模式下各开关和跳线器的初始状态设置
1)A1区直流开关:
实验内容若不用到A区模拟模块,则开关置位在下方,模拟模块电源
为关闭状态。
2)B2区JT1B跳线器:
短路帽置位在左边,LED点阵显示模块电源为关闭状态。
3)B3区JT2B跳线器:
短路帽全部置位在下方,LCD液晶显示模块电源、背光为关闭状态。
4)C1区JT1C跳线器和C3区JT2C跳线器的短路帽位置随意,由相关实验决定。
5)C3区JT3C跳线器:
短路帽置位在左边,语音接口模块电源为关闭状态。
6)E4区JT1E跳线器:
两只短路帽置位在左边,八位逻辑电平输出有效。
7)E7区S11E、S12E开关:
开关全部置位上方(ON),由8279来控制键盘、显示。
8)F3区JT1、JT2跳线器:
短路帽全部置位在上方。
9)A5区S4A多位开关:
开关置位最右端(温度控制),做温度控制实验用。
1
第二章MCS-51单片机硬件接口实验部分
实验一I/O口输入、输出实验
一、实验目的
掌握单片机P1口、P3口的使用方法。
二、实验内容
以P1口为输出口,接八位逻辑电平显示,LED显示跑马灯效果。
以P3口为输入口,接八
位逻辑电平输出,用来控制跑马灯的方向。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明和电路原理图
P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当
P1口作为输入口时,必须先对它置高电平使内部MOS管截止。
因为内部上拉电阻阻值是20K~40K,
故不会对外部输入产生影响。
若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是
不正确的。
本实验需要用到CPU模块(F3区)和八位逻辑电平输出模块(E4区)和八位逻辑电平显示模
块(B5区),八位逻辑电平输出电路原理图参见图1-1。
八位逻辑电平显示电路原理图参见图1-2。
2
五、实验预习要求
学习教材的相关内容,根据实验要求画出程序流程图,写出实验程序。
六、实验步骤
1)系统各跳线器处在初始设置状态。
用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);
用8位数据线连接八位逻辑电平显示模块的JD4B到CPU模块的JD8(P1口)。
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序
运行。
3)观察发光二极管显示跑马灯效果,拨动K0可改变跑马灯的方向。
七、实验参考程序
本实验参考程序
;//******************************************************************
;文件名:
PortforMCU51
;功能:
I/O口输入、输出实验
;接线:
用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);
;用8位数据线连接八位逻辑电平显示模块的JD2B到CPU模块的JD8(P1口)。
;//******************************************************************
DIRBITP3.0
ORG0000H
LJMPSTART
ORG0100H
START:
Output1:
mova,#0fEH
movr5,#8
loop1:
3
CLRC
movC,DIR
JCOutput2
movP1,a
rla
AcallDelay
djnzr5,loop1
SjmpOutput1
Output2:
mova,#07fH
movr5,#8
loop2:
CLRC
movC,DIR
JNCOutput1
movP1,a
rra
AcallDelay
djnzr5,loop2
SjmpOutput2
Delay:
movr6,#0
DelayLoop1:
movr7,#0
DelayLoop2:
NOP
NOP
djnzr7,DelayLoop2
djnzr6,DelayLoop1
ret
4
实验二外部中断实验
一、实验目的
学习外部中断技术的基本使用方法。
二、实验内容
INT0端接单次脉冲发生器。
按一次脉冲产生一次中断,CPU使P1.0状态发生一次反转,P1.0接LED灯,以查看信号反转。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明和电路原理图
1)外部中断的初始化设置共有三项内容:
中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。
中断方式设置一般有两种方式:
电平方式和脉冲方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。
因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)和INT1(P3.3)引入。
2)中断服务的关键:
a、保护进入中断时的状态。
堆栈有保护断点和保护现场的功能使用PUSH指令,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。
b、必须在中断服务程序中设定是否允许中断重入,即设置EX0位。
c、用POP指令恢复中断时的现场。
3)中断控制原理:
中断控制是提供给用户使用的中断控制手段。
实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:
TCON、IE、SCON及IP。
4)中断响应的过程:
首先中断采样然后中断查询最后中断响应。
采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0或IE1置“1”;否则继续为“0”。
所谓查询就是由CPU测试TCON和SCON中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。
中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就响应一次中断。
本实验需要用到CPU模块(F3区)和八位逻辑电平显示模块(B5区)、单次脉冲模块(E3
区)。
五、实验预习要求
学习教材的相关内容,根据实验要求画出程序流程图,写出实验程序。
六、实验步骤
1)系统各跳线器处在初始设置状态,用导线连接单次脉冲模块的输出端到CPU模块的P32;CPU模块的P10接八位逻辑电平显示模块的灯。
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)连续按动单次脉冲产生电路的按键,发光二极管L0每按一次状态取反,即隔一次点亮。
七、实验参考程序
本实验参考程序
5
;//*************************************************
;文件名:
EXintforMCU51
;功能:
外部中断实验
;接线:
导线连接单次脉冲模块的输出端到CPU模块的P32,
;CPU模块的P10接八位逻辑电平显示模块的L0灯。
;//*************************************************
LEDBITP1.0
LEDBufBIT20H
org0
ljmpStart
org3
Interrupt0:
pushPSW;保护现场
cplLEDBuf;取反LED
movc,LEDBuf
movLED,c
popPSW;恢复现场
reti
Start:
clrLEDBuf
clrLED
movTCON,#01h;外部中断0下降沿触发
movIE,#81h;打开外部中断允许位(EX0)及总中断允许位(EA)
OK:
ljmpOK
end
6
实验三定时/计数器实验
一、实验目的
学习MCS-51内部计数器的使用和编程方法。
二、实验内容
使用MCS-51内部定时/计数器,定时一秒钟,CPU运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明
关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。
内部计数器在单片机中主要有定时器和计数器两个功能。
本实验使用的是定时器,定时为一秒钟。
定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
TMOD用于设置定时器/
计数器的工作方式0-3,并确定用于定时还是用于计数。
TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
假设实验系统的晶振是12MHZ,程序工作于方式2,即8位自动重装方式定时器,定时器100uS中断一次,所以定时常数的设置可按以下方法计算:
机器周期=12÷12MHz=1uS
(256-定时常数)×1uS=100uS
定时常数=156。
然后对100uS中断次数计数10000次,就是1秒钟。
在本实验的中断处理程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
本实验需要用到CPU模块(F3区)和八位逻辑电平显示模块(B5区)。
五、实验预习要求
学习教材的相关内容,根据实验要求画出程序流程图,写出实验程序。
六、实验步骤
1)系统各跳线器处在初始设置状态,用导线连接CPU模块P10到八位逻辑电平显示模块的L0。
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)运行程序观察发光二极管隔一秒点亮一次,点亮时间为一秒。
七、实验参考程序
本实验参考程序
;//*************************************************
;文件名:
TimerforMCU51
;功能:
定时/计数器实验
;接线:
导线连接CPU模块P10到八位逻辑电平显示模块的L0.
;//*************************************************
Tickequ10000;10000x100us=1s
T100usequ156;100us时间常数(6M)
C100usequ30h;100us记数单元7
LEDBufbit20h
org0
ljmpStart
org000bh
T0Int:
pushPSW
mova,C100us+1
jnzGoon
decC100us
Goon:
decC100us+1
mova,C100us
orla,C100us+1
jnzExit;100us记数器不为0,返回
movC100us,#27H;#high(Tick)
movC100us+1,#10H;#low(Tick)
cplLEDBuf;100us记数器为0,重置记数器
;取反LED
Exit:
popPSW
reti
Start:
movTMOD,#02h;方式2,定时器
movTH0,#t100us
movTL0,#t100us
movIE,#10000010b;EA=1,IT0=1
setbTR0;开始定时
clrLEDBuf
clrP1.0
movC100us,#27H;#high(Tick)
movC100us+1,#10H;#low(Tick)
Loop:
movc,LEDBuf
movP1.0,c
ljmpLoop
end
8
实验四交通灯控制实验
一、实验目的
掌握十字路口交通灯控制方法。
二、实验内容
利用系统提供的双色LED显示电路,和四位静态数码管显示电路模拟十字路口交通信号灯。
4位LED数码管显示时间,LED显示红绿灯状态。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明和电路原理图
交通信号灯控制逻辑如下:
假设一个十字路口为东西南北走向。
开始为四个路口的红灯全部亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后(20秒),东西路口的绿灯,闪烁若干次后(3秒),东西路口的绿灯熄灭,同时东西路口的黄灯亮,延时一段时间后(2秒),东西路口的红灯亮,南北路口的绿灯亮,南北路口方向通车,延时一段时间后(20秒),南北路口的绿灯闪烁若干次后(3秒),南北路口的绿灯熄灭,同时南北路口的黄灯亮,延时一段时间后(2秒),再切换到东西路口的绿灯亮,南北路口的红灯亮,之后重复以上过程。
双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,共用负极,当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。
本实验需要用到CPU模块(F3区)、静态数码管/双色LED显示模块(B4区)。
双色LED显示电路原理参见图4-1。
图4-1双色LED显示电路
9
五、实验程序参考框图
实验示例程序参考框图如图4-2。
图4-2程序流程图
六、实验预习要求
学习教材的相关内容,根据实验要求画出程序流程图,写出实验程序。
七、实验步骤
1)系统各跳线器处在初始设置状态。
P10同时接G1、G3;P11同时接R1、R3;P1.2同时接G2、G4;P1.3同时接R2、R4;
P1.6、P1.7分别接静态数码显示的DIN、CLK。
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)观察十字路口交通灯效果。
八、实验参考程序
本实验参考程序
;//*******************************************************************
;文件名:
交通灯程序FORMCU51
;功能:
双色LED模拟交通灯信号,并通过调用静态数码显示状态时间。
;接线:
P1.0同时接G1、G3,P1.1接R1、R3,P1.2接G2、G4,P1.3同时接R2、R4,
;P1.6、P1.7接静态数码显示的DIN、CLK。
;//*******************************************************************10
SECOND1EQU30H;东西秒寄存器
SECOND2EQU31H;南北秒寄存器
DBUFEQU40H;显示缓冲1
TEMPEQU44H;显示缓冲2
LED_G1BITP1.0;东西绿灯
LED_R1BITP1.1;东西红灯
LED_G2BITP1.2;南北绿灯
LED_R2BITP1.3;南北红灯
DinBITP1.6;串行显示数据
CLKBITP1.7;串行显示时钟
ORG0000H
LJMPSTART
ORG0100H
START:
LCALLSTATE0;调用状态0
LCALLDELAY;调用延时
MOVTMOD,#01H;置T0工作方式1
MOVTH0,#3CH;置T0定时初值50mS
MOVTL0,#0B0H
SETBTR0;启动T0CLREA
LOOP:
MOVR2,#20;置1S计数初值50mS*20=1S
MOVR3,#20;红灯20S
MOVSECOND1,#25;东西秒显示初值25S
MOVSECOND2,#25;南北秒显示初值25S
LCALLDISPLAY
LCALLSTATE1;调用状态1
WAIT1:
JNBTF0,WAIT1;查询50mS到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50mS
MOVTL0,#0B0H
SETBTR0;启动T0
DJNZR2,WAIT1;判1S到否?
未到继续状态1
MOVR2,#20;置50mS计数初值10
DECSECOND1;东西秒显示减一
DECSECOND2;南北秒显示减一
LCALLDISPLAY
DJNZR3,WAIT1;状态1维持20S
;***************************************************
MOVR2,#5;置50mS计数初值5*4=20
MOVR3,#3;绿灯闪3S
MOVR4,#4;闪烁间隔200mS
MOVSECOND1,#5;东西秒显示初值5S
MOVSECOND2,#5;南北秒显示初值5S
LCALLDISPLAY
WAIT2:
LCALLSTATE2;调用状态2
JNBTF0,WAIT2;查询50mS到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50mS
MOVTL0,#0B0H
DJNZR4,WAIT2;判200mS到否?
未到继续状态2
CPLLED_G1;东西绿灯闪
MOVR4,#4;闪烁间隔200mS
DJNZR2,WAIT2;判1S到否?
未到继续状态2
MOVR2,#5;置50mS计数初值
DECSECOND1;东西秒显示减一
DECSECOND2;南北秒显示减一
LCALLDISPLAY
DJNZR3,WAIT2;状态2维持3S
;***************************************************
MOVR2,#20;置50mS计数初值
MOVR3,#2;黄灯2S
MOVSECOND1,#2;东西秒显示初值2S
MOVSECOND2,#2;南北秒显示初值2S
LCALLDISPLAY
WAIT3:
LCALLSTATE3;调用状态3
JNBTF0,WAIT3;查询30mS到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50mS
MOVTL0,#0B0H
DJNZR2,WAIT3;判1S到否?
未到继续状态3
MOVR2,#20;置50mS计数初值11
DECSECOND1;东西秒显示减一
DECSECOND2;南北秒显示减一
LCALLDISPLAY
DJNZR3,WAIT3;状态3维持2S
;***********************