Hefei University
单片机原理及接口技术报告
课题名称: 单片机原理及接口技术 姓 名: ******
学 号: ********* 指导教师: 储忠老师 完成时间: 2015.5.31
目 录
实验一 构建单片机最小系统和实验环境熟悉 ....................... - 1 - 实验二 跑马灯实验及74HC138译码器 .................................. - 5 - 实验三 8255控制交通灯实验 ................................................. - 8 - 实验四 8253方波实验 ........................................................... - 13 - 附实物图 ...................................................................................... - 13 -
实验一 构建单片机最小系统和实验环境熟悉
一、预习要求
1.构建单片机最小系统,熟悉51单片机的结构及编程方法
2.按照程序流程图编写出程序
二、实验目的
1.熟悉星单片机最小系统的组成和工作原理,熟悉Keil C51集成环境软件的使用方法。
2.熟悉MCS51汇编指令,能自己编写简单的程序,控制硬件。
三、实验内容
单片机最小系统实验:
1、熟悉单片机最小系统的组成和工作原理,熟悉Keil C51集成环境软件的安装和使用方法。
2、作出单片机最小系统的组成原理图,分析其各构成单元的工作原理。 存储单元数据传输实验
1、熟悉MCS51汇编指令。
2、进行存储单元数据传输实验,编写程序。
3、运行程序,验证译码的正确性。
四、实验原理
1、作出单片机最小系统的组成原理图
2、分析单片机最小系统的工作原理
1. 运算器
- 1 -
运算器包括算术逻辑运算单元ALU、累加器ACC、寄存器B、暂存器TMP、程序状态字寄存器PSW、十进制调整电路等。它能实现数据的算术逻辑运算、位变量处理和数据传送操作。
(1) 算术逻辑单元ALU
ALU在控制器根据指令发出的内部信号控制下,对8位二进制数据进行加、减、乘、除运算和逻辑与、或、非、异或、清零等运算。它具有很强的判跳、转移、丰富的数据传送、提供存放中间结果以及常用数据寄存器的功能。MCS-51中位处理具有位处理功能,特别适用于实时逻辑控制。
(2)累加器ACC
累加器ACC是8位寄存器,是最常用的专用寄存器,它既可存放操作数,又可存放运算的中间结果。MCS—51系列单片机中许多指令的操作数来自累加器ACC。累加器非常繁忙,在与外部存储器或I/O接口进行数据传送时,都要经过A来完成。
(3)寄存器B
寄存器B是8位寄存器,主要用于乘、除运算。乘法运算时,B中存放乘数,乘法操作高8位结果存于B寄存器中。除法运算时,B中存放除数,除法操作后,余数存于寄存器B中。寄存器B也可作为一般的寄存器用。
(4)程序状态字PSW
程序状态字是8位寄存器,用于指示程序运行状态信息。其中有些位是根据程序执行结果由硬件自动设置的,而有些位可由用户通过指令方法设定。PSW中各标志位名称及定义如
下
CY(PSW.7):进(借)位标志位,也是位处理器的位累加器C。在加减运算中,若操作结果的最高位有进位或有借位时,CY由硬件自动置1,否则清“0”。在位操作中,CY作为位累加器C使用,参于进行位传送、位与、位或等位操作。另外某些控制转移类指令也会影响CY位状态。
AC(PSW.6):辅助进(借)位标志位。在加减运算中,当操作结果的低四位向高四位进位或借位时此标志位由硬件自动置1,否则清“0”。
- 2 -
F0(PSW.5):用户标志位,由用户通过软件设定,决定程序的执行方式。 RS1(PSW.4),RS0(PSW.3):寄存器组选择位。用于设定当前通用寄存器组的组,其对应关系如下:
OV(PSW.2):溢出标志位。它反映运算结果是否溢出,溢出时OV=1;否则OV=0。OV可作为条件转移指令中的条件。
PSW.1:未定义位。
P(PSW.1):奇偶标志位。P=1,表示ACC中1的个数为奇数;否则P=0。P也可以作为条件转移指令中的条件。
2. 控制器
控制器包括定时控制逻辑(时钟电路、复位电路),指令寄存器,指令译码器程序计数器PC,堆栈指针SP,数据指针寄存器DPTR以及信息传送控制部件等。
(1)时钟电路
MCS—51系列单片机芯片内部有一个高增益反相放大器,输入端为XTAL1,输出端为XTAL2,一般在XTAL1与XTAL2之间接石英晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,就是单片机的内部时钟电路,如图(A)所示。时钟电路产生的振荡脉冲经过二分频以后,才成为单片机的时钟信号。电容C1和C2为微调电容,可起频率稳定、微调作用,一般取值在5~30pf之间,常取30pf。晶振的频率范围是1.2MHz~12MHz ,典型值取6 MHz。XTAL1接地,XTAL2接外部震荡器,外接信号应是高电平持续时间大于20ns的方波,且脉冲频率应低于12 MHZ。如图(B)所示。
(2)复位电路
对于使用12MHZ的晶振的单片机,复位信号持续时间应超过4μs才能完成复位操作。产生复位信号的电路有上电自动复位电路和按键手动复位电路两种方 - 3 -
式。
上电自动复位是通过外部复位电路的电容充电来实现的,该电路通过电容充电在RST引脚上加了一个高电平完成复位操作。上电自动复位电路如图(a)所示。 按键手动复位电路。按键手动复位是通过按键实现人为的复位操作,按键手动复位电路如图(b)所示。
3、进行存储单元数据传输实验,观察实验结果,验证程序是否正确。 五:实验小节
单片机系统电路的基本模块有:复位电路,晶振电路,电源接口,下载接口等主要模块。在单片机最小系统的构建中,EA脚拉高是非常必要的,它可以影响单片机的正常工作。在检测单片机是否正常工作,可以通过检测晶振两端的信号的波形形状。在单片机正常工作条件下,其信号为正弦波。经过一周的时间基本完成单片机最小系统板的焊接部分和单片机的工作原理,以及对单片机外围电路的焊接,知道了硬件部分的重要性,单片机最小系统板的焊接最主要是晶振部分和下载接口的焊接,它为单片机提供了做工作的频率,同时也为单片机提供下载程序的接口,是单片机的非常重要的外围电路。
六、思考题
1、在单片机最小系统的构建中,应注意哪些因素。
答:
(1)51单片机现在多用AT89S51,不用晶振,晶体加两个电容就可以了。
(2)复位电路中的电容是虑波稳定作用,并联在一个电阻上,一端接地,一端通过开关接高电位就可以了。
(3)晶振:一般选用 11.0592M ,因为可以准确地得到 9600 波特率和 19200 波特率。
- 4 -
实验二 跑马灯实验及74HC138译码器
一、预习要求
1.熟悉51单片机的结构及编程方法
2.按照程序流程图编写出程序
二、实验目的
1.熟悉集成环境软件或熟悉Keil C51集成环境软件的使用方法。
2.熟悉MCS51汇编指令,能自己编写简单的程序,控制硬件。
三、实验内容
74HC138译码器实验:
1、设计74HC138接口电路,编写程序:使用单片机的P1.0、P1.1、P1.2控制74HC138的数据输入端,通过译码产生8选1个选通信号,轮流点亮8个LED指示灯。
2、运行程序,验证译码的正确性。
四、实验原理
参考实验原理图如下:
(译码器电路图)
- 5 -
五、实验方法及步骤
跑马灯实验步骤:
1、设计接口电路。
2、编写程序或运行参考程序。
3、实验结果:通过LED指示灯(8个指示灯轮流点亮),观察实验的输出结果是否正确。
演示程序
ORG 0000H
AJMP MAIN
ORG 0050H
MAIN:
MOV A,#8
CLR C
LOOP:
DEC A
MOV P1,A
LCALL DELAY
JZ MAIN
AJMP LOOP
DELAY: MOV R5,#20
DEL1: MOV R6,#100
DEL2: MOV R7,#248
DEL3: DJNZ R7,DEL3
DJNZ R6,DEL2
DJNZ R5,DEL1
RET
END
运行结果
- 6 -
六、实验总结
本次实验利用两种控制方式实现了流水灯功能。单片机端口主要是利用基本的数据传输指令实现了流水灯功能,其中加入了一些花样的灯光显示功能;74LS138控制流水灯实验主要是利用138的片选,根据输入不同的A、B、C选中不同的输出端口,进而驱动LED显示。进行本次实验需要知道基本的数据传输指令以及74LS138的真值表,知道这些完成本次实验还是比较简单的。
七、思考题
1、在单片机系统中,74HC138通常用来产生片选信号,请考虑一下,应如何处理?
答:取三根底地址线,接到74LS138译码器的输入端,译码产生,8个使能控制信号。
- 7 -
实验三 8255控制交通灯实验
一、预习要求
1.熟悉51单片机的结构及编程方法
2.按照要求画出流程图及程序
二、实验目的
1、 了解8255芯片的工作原理,熟悉其初始化编程方法以及输入、输出程序设计技巧。学会使用8255并行接口芯片实现各种控制功能,如本实验(控制交通灯)等。
2、 熟悉8255内部结构和与单片机的接口逻辑,熟悉8255芯片的3种工作方式以及控制字格式。
3、尝试自行编写程序,填写实验报告。
三、实验内容
1、设计8255接口电路,编写程序:使用8255的PA0..2、PA5..7控制LED指示灯,实现交通灯功能。
2、连接线路验证8255的功能,熟悉它的使用方法。
- 8 -
四、实验原理
实验电路图
五、实验程序及结果
实验程序:
CONTROL EQU 7FFFH
PORTA EQU 7FFCH
ORG 0
START:
MOV DPTR,#7FFFH
MOV A,#80H
MOVX @DPTR,A
MOV DPTR,#7FFCH
MOV A,#0FFH
MOVX @DPTR,A
LOOP:
MOV A,#21H
MOV DPTR,#7FFCH
MOVX @DPTR,A
CALL DELAYLONG
MOV A,#12H;11H
MOV DPTR,#7FFCH
MOVX @DPTR,A
CALL DELAYSHORT
MOV A,#00H;01H
MOV DPTR,#7FFCH
MOVX @DPTR,A
- 9 -
CALL DELAYSHORT
MOV A,#12H;11H MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT
MOV A,#00H;01H MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT
MOV A,#12H;11H MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT
MOV A,#00H;01H MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT
MOV A,#0CH
MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYLONG
MOV A,#12H;0AH MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT
MOV A,#00H;08H MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT
MOV A,#12H;0AH MOV DPTR,#7FFCH MOVX @DPTR,A CALL DELAYSHORT
MOV A,#00H;08H MOV DPTR,#7FFCH MOVX @DPTR,A
- 10 -
CALL DELAYSHORT
MOV A,#12H;0AH
MOV DPTR,#7FFCH
MOVX @DPTR,A
CALL DELAYSHORT
MOV A,#00H;08H
MOV DPTR,#7FFCH
MOVX @DPTR,A
CALL DELAYSHORT
AJMP LOOP
DELAYLONG:
MOV R7,#40
L1:MOV R6,#200
L2:MOV R5,#250
DJNZ R5,$
DJNZ R6,L2
DJNZ R7,L1
RET
DELAYSHORT:MOV R4,#200
L3:MOV R3,250
DJNZ R3,$
DJNZ R4,L3
RET
END
实验结果:
- 11 -
六、实验总结
通过本次交通灯实验,学会了使用8255芯片的初始化和编程方法。同时认识到通过8255实现了I/O口的扩展。本实验使用的是8255的方式0。利用8255完成交通灯的四中状态切换。第一种状态是东西方向是绿灯,南北方向是红灯。第二种状态是东西方向是黄灯并且闪烁,南北方向是红灯。第三种状态是东西方向是红灯,南北方向是绿灯。第四种状态是东西方向是红灯,南北方向是黄灯,最后变到第一种状态。在实现具体的硬件时,采用8255控制十二个LED,三个一组,分成四组来模拟实际交通灯。其中的对面两组状态变化是相同一致的。在完成仿真后在硬件电路中调试时,发现了一个问题。显示的状态不对。经过检查电路后发现电路的连线错了。重新调试后,发现状态对了,交通灯正常了。通过问题的解决,我对程序和电路有了更深的认识和理解。
- 12 -
实验四 8253方波实验
一、预习要求
1.熟悉51单片机的结构及编程方法
2.按照要求画出流程图及程序
二、实验目的
了解8253的内部结构、工作原理;了解8253与单片机的接口逻辑;熟悉8253的控制寄存器和初始化编程方法,熟悉8253的6种工作模式。
三、实验内容
1、设计接口电路,编写程序:使用8253的计数器0和计数器2实现对输入时钟频率的两级分频,得到一个周期为1秒的方波,用此方波控制蜂鸣器,发出报警信号,也可以将输入脚接到逻辑笔上来检验程序是否正确。
2、连接线路,验证8253的功能,熟悉它的使用方法。
四、实验原理
参考电路原理图如下:
五、实验程序及结果
实验程序:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define CH0 XBYTE[0xfcff] //通道0地址
#define CH1 XBYTE[0xfdff]//通道1地址
#define CH2 XBYTE[0xfeff] //通道2地址
#define CON XBYTE[0xffff] //控制口地址
- 13 -
sbit P1_0=P1^0;
void T0_Init()
{
TMOD=0x02;//选择通道0,方式2
TH0=(65536-50)/256;
TL0=(65536-50)%256;
ET0=1; //通道0中断使能
TR0=1; //启动定时器0
EA=1; //开总中断
}
void main(void)
{
T0_Init();//定时器中断初始化
CON=0X16;//写通道0控制字,只读低字节,方式3 CH0=0x64;
CON=0X96;//写通道2控制字,只读低字节,方式3 CH2=0xc8;
while(1);
}
void T0_20k()interrupt 1
{
P1_0=~P1_0;
}
实验结果:
两个红灯交替闪烁,周期为1秒。
- 14 -
六、实验总结
利用8253实现方波发生器,由于没有用到蜂鸣器,故利用二极管的通断来
反应方波发生器的成功实现,但在用二极管实现时,需注意频率的问题,如果频率过大,会导致效果不明显甚至看不到。本次实验能成功实现二极管的关断与导通,并且效果较明显。
- 15 -
附实物图:
- 16 -
- 17 -
- 18 -