- 1.单片机概述
- 2.单片机片内硬件结构
- 3.单片机的指令系统
- 4.汇编语言程序设计
- 5.单片机的中断系统
- 6.定时器/计数器
- 7.串行口
- 8.外部存储器的扩展
- 9.I/O扩展
- 10.输入/输出接口设计
写在前面:当初做这篇博客,就是为了重邮复试笔试单片机温故知新。18年复试大纲为
哈工大《单片机原理及应用》第二版,张毅刚
一到十章的内容。最后复试的结果也算差强人意,现更新博客,总结经验方法,让后来的学弟学妹们少走弯路。
重邮单片机笔试,难度不大且考的是51系列单片机,但大量用到汇编语言,所以需要加强对汇编指令的理解记忆。建议第一轮复试时,对照着视频学习,方便开始拾起原来学生时代的记忆。我这里推荐
哈尔滨工业大学《单片机原理》课程
,注册登录后,可以免费观看,下面给出连接。
-
基础知识:
-
C语言不具备上电立即运行的条件:全局变量没有初始化、系统堆栈没有初始化等。
-
总线的概念
- 地址总线:一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。
- 数据总线:CPU与内存或其他器件之间的数据传送是通过数据总线来进行的。数据总线的宽度决定了CPU和外界的数据传送速度。8根数据总线一次可传送一个8位二进制数据(即一个字节)。16根数据总线一次可传送两个字节。
- 控制总线:CPU对外部器件的控制是通过控制总线来进行的。在这里控制总线是个总称,控制总线是一些不同控制线的集合。有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。所以,控制总线的宽度决定了CPU对外部器件的控制能力。
- 地址总线:一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。
1.单片机概述
- 单片机的定义、发展历史、单片机的特点、单片机的发展趋势、嵌入式微控制器(单片机)与嵌入式数字信号处理器、嵌入式微处理器、嵌入式片上系统的概念。
2.单片机片内硬件结构
单片机的硬件组成、引脚功能、CPU组成和功能、存储器的结构、并行 i/o口、时钟电路与时序、复位操作和复位电路。
- AT89S51的硬件组成:它把那些作为控制应用所必须的基本功能部件都集成在一个尺寸有限的集成电路芯片上,具有如下功能部件和特性:
- (1)8位微处理器器(CPU)
- (2)数据存储器(
128B RAM
) - (3)程序存储器(
4KB Falsh ROM
) - (4)4个8位可编程并行I/O口(P0,P1,P2,P3)
- (5)1个全双工的异步串行口
- (6)2个全双工的异步串行口
- (7)1个看门狗定时器
- (8)中断系统具有5个中断源、5个中断向量
- (9)特殊功能寄存器(SFR)26个
- (10)低功耗节电模式有空闲模式和掉电模式,且具有掉电模式下的中断恢复模式。
- (11)3个程序加密锁定位
- (1)8位微处理器器(CPU)
- 引脚按其功能可分为3类
- (1)电源及时钟引脚
- (2)控制引脚
- (3)I/O引脚
- (1)电源及时钟引脚
- AT89S51的CPU是由运算器和控制器构成的
- 运算器:主要用来对操作数进行算术、逻辑和位操作运算。主要包括算术逻辑运算单元ALU、累加器A、程序状态寄存器PSW、位处理器及两个暂存区等。
- 控制器:主要包括程序计算器、指令寄存器、指令译码器、定时及控制逻辑电路等。其功能是控制指令的读入、译码和执行,从而对单片机的各功能部件进行定时和逻辑控制。
- 程序计时器PC是控制器中最基本的寄存器,它是一个独立的16位计数器,是不可访问的,即用户不能直接只用指令对PC进行读/写。
- PC的基本工作过程是:CPU读指令,PC的内容作为所取指令的地址发送给程序寄存器,然后程序存储器按此地址输出指令字节,同时PC自动加1,这也是为什么PC被称为程序计数器的原因。
- PC中内容变化轨迹决定了程序的流程。
- 程序计数器的计数宽度决定了程序存储器的地址范围。AT89S51中的PC位数为16位,故可对64KB(
= 2^16 B
)的程序存储器进行寻址。
- 程序计时器PC是控制器中最基本的寄存器,它是一个独立的16位计数器,是不可访问的,即用户不能直接只用指令对PC进行读/写。
- 运算器:主要用来对操作数进行算术、逻辑和位操作运算。主要包括算术逻辑运算单元ALU、累加器A、程序状态寄存器PSW、位处理器及两个暂存区等。
- 存储器结构:AT89S51单片机存储器结构的特点之一是将程序存储器和数据存储器分开(称为哈佛结构),并有各自的对这两个不同的存储器空间的访问指令。
-
程序存储器是只读存储器(ROM),用于存放程序和表格之类的固定常数。AT89S51单片机的片内程序存储器为4KB的Flash,地址范围为0000H~0FFFH。AT89S51有16位地址线,可外扩的程序存储器空间最大为64KB,地址范围为0000H~FFFFH。整个程序存储器空间可以分为片内和片外两部分,CPU究竟是访问片内还是片外的程序存储器,可由EA引脚上所接的电平来确定。
-
堆栈指针SP:堆栈指针SP的内容指示出堆栈顶部在内部RAM中的位置。AT89S51的堆栈结构属于向上生长型的堆栈(每向堆栈压入1个字节数据时,SP的内容自动加1)。堆栈的具体功能有两个:保护断点和现场保护。
-
- 时钟与时序:
- 时钟周期是单片机控制信号的基本时间单位。若时钟晶体的振荡频率为f,则时钟周期T=1/f。
- CPU完成一个基本操作所需要的时间称为机器周期。AT89S51的一个机器周期包括12个时钟周期。
- 指令周期是执行一条指令所需的时间。
- 时钟周期是单片机控制信号的基本时间单位。若时钟晶体的振荡频率为f,则时钟周期T=1/f。
- 复位
- 复位时单片机的初始化操作,只需给AT89S51的复位引脚RST加上大于2个机器周期的高电平就可使单片机复位。
- 当AT89S51进行复位时,PC初始化为0000H,使AT89S51单片机从程序存储器的0000H单元开始执行程序。
- 复位时单片机的初始化操作,只需给AT89S51的复位引脚RST加上大于2个机器周期的高电平就可使单片机复位。
3.单片机的指令系统
指令系统概述、指令格式、寻址方式、指令。
- 指令是CPU按照人们的意图来完成某种操作的命令,它以英文名称或缩写作为助记符。用助记符、符号地址标号等书写程序的语言成为汇编语言。
- 一条指令通常由两部分组成:操作码和操作数。操作码用来规定进行什么操作,而操作数则是指令操作的对象。操作数可能是一个具体的数据,也可能是指出到哪里取得数据的地址或符号。
- 指令的寻址方式:
- 1、寄存器寻址方式
- 寄存器寻址方式,就是指令中的操作数为某一寄存器的内容。
MOV A,Rn;
是把Rn中的源操作数送入到累加器A中。由于在指令中指定了从寄存器Rn中取得源操作数,所以称之为寄存器寻址方式。
- 寄存器寻址方式,就是指令中的操作数为某一寄存器的内容。
- 2、直接寻址方式
- 在这种寻址方式中,指令直接给出操作数的单元地址,改单元地址的内容就是操作数,直接的操作数单元地址用“direct”表示。
MOV A,40H;
表示把内部RAM40H单元的内容传送到A。指令中元操作数采用的是直接寻址方式。- 指令中的两个操作数都可由直接寻址方式给出。
MOV 42H,62H;
表示把片内RAM中62单元的内容送到片内RAM中的42H单元中。
- 在这种寻址方式中,指令直接给出操作数的单元地址,改单元地址的内容就是操作数,直接的操作数单元地址用“direct”表示。
- 3、寄存器间接寻址方式
- 寄存器寻址方式在寄存器中存放的是操作数,而寄存器间接寻址方式在寄存器中存放的是操作数的地址,即现从寄存器中找到操作数的地址,再按该地址找到操作数。由于操作数是通过寄存器间接得到的,因此成为寄存器间接寻址。
- 为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器名称前面加前缀标志“@”。
MOV A,@Ri;
其中Ri的内容为40H,即从Ri中找到源操作数所在的单元地址40H,然后把内部RAM40H地址单元中的内容传送给A。
- 寄存器寻址方式在寄存器中存放的是操作数,而寄存器间接寻址方式在寄存器中存放的是操作数的地址,即现从寄存器中找到操作数的地址,再按该地址找到操作数。由于操作数是通过寄存器间接得到的,因此成为寄存器间接寻址。
- 4、立即数寻址方式
- 立即数寻址方式就是在指令中给出操作数。出现在指令中的操作数也称立即数。为了与直接寻址指令中的直接地址加以区别,需要在操作数前面加前缀标志
#
. MOV A,#40H;
表示把立即数40H送给A,40H这个常数是指令代码的一部分。
- 立即数寻址方式就是在指令中给出操作数。出现在指令中的操作数也称立即数。为了与直接寻址指令中的直接地址加以区别,需要在操作数前面加前缀标志
- 5、基址寄存器加变址寄存器间接寻址
- 这种寻址方式时以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,并以两者内容相加形成的16位地址作为目的地址进行寻址的方式。
MOVC A,@A+DPTR;
其中,A原有的内容为05H,DPTR的内容为0400H。该指令执行的结果是把程序存储器0405H单元的内容传送给A。
- 这种寻址方式时以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,并以两者内容相加形成的16位地址作为目的地址进行寻址的方式。
- 6、相对寻址方式
- 相对寻址是以该转移指令的地址(PC值)加上它的字节数,再加上相对偏移量(rel),形成新的转移目的地址,从而程序转移到该目的地址。
- 目的地址 = 转移指令所在的地址 + 转移指令字节数 + rel;其中,偏移量rel是单字节的带符号的8位二进制补码数。它所能表示的数的范围是-128到+127.因此,程序的转移范围是以转移指令的下条指令首地址为基准地址,相对偏移在-128到+127单元之间。
SJMP rel;
在执行时,程序要转移到该指令的PC值加2在加上rel的目的地址处。
- 相对寻址是以该转移指令的地址(PC值)加上它的字节数,再加上相对偏移量(rel),形成新的转移目的地址,从而程序转移到该目的地址。
- 7、位寻址方式
- 位寻址是针对内部RAM和特殊功能寄存器具有位寻址功能的某位内容进行置1和清0操作。
MOV C,bit;
MOV C,40H;
该指令的功能就是把位地址为40H的值送到进位C.- 8051单片机内部有1个可位寻址区,地址为20H~2FH,共16个单元。其中每个单元中的每一位都可单独作为操作数,共128位。另外,如果SFR(特殊功能寄存器片—内高128单元)的地址值能被8整除,则该SFR也可以进行位寻址。可位寻址的SFR有ACC,B,PSW,P0,P1,P2,P3,IP,IE,TCON,SCON。
- 1、寄存器寻址方式
4.汇编语言程序设计
汇编语言程序设计概述、汇编语言源程序的汇编、语言程序设计举例。
PUSH direct;直接寻址字节压入栈顶
POP direct;栈顶字节弹到直接寻址字节
XCH A,Rn;寄存器和累加器交换
SWAP A;累加器内高低半字节交换
ADD A,Rn;寄存器内容加到累加器
ADDC A,Rn;带进位寄存器内容加到累加器
SUBB A,Rn;带借位累加器减去寄存器内容,如果位7需要借位,则Cy置1
MUL AB;A*B->BA,结果的高字节放在A,低字节房子B,如果乘积大于255,则溢出标志OV置1
DIV AB;A/B->A(商)B(余数)
CLR A;累加器清零,不影响Cy,Ac,OV等标志位
CPL A;将A中的内容按位取反
ANL A,Rn;逻辑与
ORL A,Rn;逻辑或
XRL A,Rn;逻辑异或
RL A;向左循环左移一位
RLC A;带进位向左循环左移一位
RR A;向右循环左移一位
RRC A;带进位向右循环左移一位
LJMP addr16;长转移指令。64KB地址空间
SJMP rel;相对转移指令。目的地址在这条指令的下一条指令首地址的-128B到127B之间
AJMP addr;绝对转移指令。2KB地址空间
JMP @A+DPTR;间接跳转指令
JZ rel/JNZ rel;累加器为为0/不为0转移
CJMP A,direct,rel;比较不相等转移
DJNZ Rn,rel;减一不为0转移
LCALL addr16;长调用,64KB。执行指令时,先把程序计数器PC加3(断电地址),并压入堆栈SP加2.
ACALL addr11;绝对调用,2KB
RET;从堆栈中退出PC的高8位和低8位,SP减2.从PC值开始继续执行程序
JC rel/JNC rel;进位Cy为1/为0转移
JB rel/JNB rel;直接寻址位为1/为0转移
JBC bit,rel;直接寻址位=1,则转移,并把寻址位清零。
5.单片机的中断系统
中断技术概述、中断系统结构、中断允许与优先级的控制、响应中断请求的条件、外部中断的响应时间 、外部中断的触发方式选择、中断请求的撤销、中断服务子程序的设计和多外部中断源系统设计 。
中断相应的主要过程是首先由硬件自动生成一条长跳转LCALL addr16
。这里的addr16就是程序存储区中相应的中断入口地址。
- 一个中断源的中断相应请求被相应,必须满足以下必要条件:
- 1.总中断允许开关接通,即IE寄存器中中断总允许位EA = 1;
- 2.该中断源发出中断请求,即该中断源对应的中断请求标志为1;
- 3.该中断源的中断允许位=1,即该中断被允许;
- 4.无同级或更高级中断正在被服务;
- 1.总中断允许开关接通,即IE寄存器中中断总允许位EA = 1;
两个中断入口间只相隔8字节,一般情况很难安放下一个完整的中断服务程序。因此通常总是在中断入口地址处放置一条无条件转移指令,使程序执行转向在其他地址存放的中断服务程序入口。
在一个单一中断的系统里,AT89S51单片机对外部中断请求的响应时间总是在3到8个机器周期之间。
6.定时器/计数器
定时器 /计数器的结构、定时器 /计数器的4种工作方式、对外部输入的计数信号要求、定时器 /计数器的编程和应用。
特殊功能寄存器TMOD用于选择定时器/计数器T0,T1的工作模式和工作方式。不论是工作在计数器模式还是定时器模式,实质都是对脉冲信号计数,只不过是计数信号来源不同。计数器模式是对加载T0(3P.4)和T1(P3.5)两个引脚上的外部脉冲进行计数,而定时器工作模式是对单片机的时钟振荡器信号经片内12分频后的内部脉冲计数。
- 方式0
- 定时器/计数器工作在方式0时,为13位计数器,由TLx(x=0,1)的低5位和THx的高8位构成。TLx低5位溢出则向THx进位,THx计数溢出则把TCON中的溢出标志TFx置1.
- 定时器/计数器工作在方式0时,为13位计数器,由TLx(x=0,1)的低5位和THx的高8位构成。TLx低5位溢出则向THx进位,THx计数溢出则把TCON中的溢出标志TFx置1.
- 方式1
- 方式1和方式0的差别仅仅在于计数器的位数不同,方式1位16位计数器,有THx高8位和TLx的低8位构成。
- 方式1和方式0的差别仅仅在于计数器的位数不同,方式1位16位计数器,有THx高8位和TLx的低8位构成。
- 方式2
- 方式0和方式1的最大特点是计数溢出后,计数器为全0.因此咋循环定时或循环计数时就存在指令反复转入初值的问题。这不仅影响定时精度,而且也给程序设计带来麻烦。方式2就是针对这个问题而设置的。
- 方式2位自动恢复初值(初值自动装入)的8位定时器/计数器。TLx作为常数缓冲器,当TLx技术溢出时,在溢出标志TFx置1的同时,还自动把THx中的初值送至TLx,使TLx从初值开始重新计数。
- 方式0和方式1的最大特点是计数溢出后,计数器为全0.因此咋循环定时或循环计数时就存在指令反复转入初值的问题。这不仅影响定时精度,而且也给程序设计带来麻烦。方式2就是针对这个问题而设置的。
- 方式3
- 方式3是为了增加一个附加的8位定时器/计数器设置的。一般情况下,当T1用作串行口的波特率发生器时,T0才工作在方式3.
- 对外部输入的计数信号要求:外部输入的计数脉冲的最高频率为系统振荡器频率的1/24.
7.串行口
串行口的结构、串行口的4种工作方式、多机通信、波特率的制定方法、串行口的应用。
-
串行口的控制寄存器共有两个:特殊功能寄存器SCON和PCON。
- 方式0
- 串行口的工作方式0为同步移位寄存器输入/输出方式。这种方式并不是用于两个单片机之间的异步通信,而是用于串行口外界移位寄存器,以扩展I/O口。方式0以8位数据为一帧,没有起始位和停止位,先发送或接受最低位。波特率是固定为Fosc/12.
- 方式0 的发送过程是,当CPU执行一条江数据写入发送缓冲器SBUF的指令时,产生一个证脉冲,串行口开始把SBUF中的8位数据以Fosc/12的固定波特率从RXD引脚串行输出,低位在前,TXD引脚输出同步移位脉冲,发送完8位数据,中断标志位TI置1.
- 串行口的工作方式0为同步移位寄存器输入/输出方式。这种方式并不是用于两个单片机之间的异步通信,而是用于串行口外界移位寄存器,以扩展I/O口。方式0以8位数据为一帧,没有起始位和停止位,先发送或接受最低位。波特率是固定为Fosc/12.
- 方式1
- 串行口的方式1位双机串行通信方式。方式1收发一帧数据为10位,1个起始位(0),8个数据位,1一个停止位(1),先发送或接受最低位。波特率是固定为Fosc/12
- 方式1时,串行口为波特率可变的8位异步通信接口。方式1的波特率=2(^SMOD/32) * 定时器T1的溢出率。
- 串行口以方式1输出时,当CPU执行一条数据写发送缓冲器SBUF的指令(
MOV SBUF,A
),就启动发送。串行口以方式1接收时,数据从RXD引脚输入。当检测到起始位的负跳变时,则开始接收。当采样到RXD端从1到0的负跳变时就启动检测器,接收的值是3此连续采样(第7,8,9个脉冲采样)取其中两次相同的值,以确认是否是真正的起始位开始,这样能比较好的的消除干扰引起的影响。 - 当一帧数据接收完毕后,必须同时满足以下两个条件,这次接收才真正有效。若不能满足这两个条件,收到的数据不能装入SBUF,这就意味着该帧数据丢失。
- 1.RI=0,即上一帧数据接收完成时,RI=1发出的中断请求已被相应,SBUF中的数据已被取走,说明接收SBUF已空。
- 2.SM2=0或收到的停止位=1(方式1时,停止位已进入RB8),则将收到的数据装入SBUF和RB8(转入的是停止位),且中断标志RI置1.
- 1.RI=0,即上一帧数据接收完成时,RI=1发出的中断请求已被相应,SBUF中的数据已被取走,说明接收SBUF已空。
- 串行口的方式1位双机串行通信方式。方式1收发一帧数据为10位,1个起始位(0),8个数据位,1一个停止位(1),先发送或接受最低位。波特率是固定为Fosc/12
- 方式2
- 串行口工作于方式2和方式3时,被定义为9位异步通信接口。每帧数据均为11位,1位起始位,8位数据位,1位可程控为1为0的第九位数据和1位停止位。
- 方式2波特率=(2^SMOD/64)*Fosc
- 发送前,先根据通信协议由软件设置TB8(如双机通信时的奇偶校验位或多机通信时地址/数据的标志位),然后将要发送的数据写入SBUF,即可完成发送。
- 串行口工作于方式2和方式3时,被定义为9位异步通信接口。每帧数据均为11位,1位起始位,8位数据位,1位可程控为1为0的第九位数据和1位停止位。
- 方式3
- 方式3为波特率可变的9位通信方式,除了波特率外,方式3和方式2相同。
- 方式3波特率=(2^SOMD/32)/定时器T1的溢出率。
- 方式3为波特率可变的9位通信方式,除了波特率外,方式3和方式2相同。
- 波特率计算
- 串口工作在方式0
- 波特率=Fosc/12;
- 串口工作在方式2,波特率仅与SMOD有关
- 波特率=(2^SMOD/64)*Fosc;
- 串口工作在方式1或方式3,常用定时器T1作为波特率发生器,其中定时器通常设置为方式2(自动装初值)。
- 波特率=(2^SMOD/32)Fosc/(12(256-X));
- 串口工作在方式0
8.外部存储器的扩展
系统扩展结构、地址空间分配和外部锁存器、程序存储器的扩展、静态数据存储器的拓展、存储器的综合扩展 。
- AT89S51,P0口作为低8位地址/数据总线,有作数据总线(分时复用),因此需要增加一个地址锁存器。
- P2口的全部8位口线用作系统的高8位地址线,再加上地址锁存器提供的低8位地址,便形成了系统完整的16位地址总线。从而使单片机系统的寻址范围达到了64KB。
- 控制信号线:
- PSEN信号作为外扩程序存储器的读写选通控制信号。
- RD和WD信号作为外扩数据存储器和I/O接口寄存器的读/写选通控制信号。
- ALE信号作为P0口发出的低8位地址的锁存控制信号。
- EA信号作为片内、片外程序存储器的选择控制信号。接地时,片内4Kflash不起作用。
- PSEN信号作为外扩程序存储器的读写选通控制信号。
9.I/O扩展
单片机的i/o扩展概述、I/O接口芯片82C55和81C55的工作方式以及程序设计。
- 扩展的I/O的接口功能
- 1.实现和不同外部设备的速度匹配
- 2.输出数据锁存。因为与外部设备相比,由于单片机的工作速度快,数据在数据总线上保留的时间十分短暂,无法满足慢速外部设备的数据接收。所以在扩展的I/O接口电路中应有输出数据锁存器,以保证输出数据能为慢速的接收设备所接收。
- 3.输入数据三态缓冲
- 1.实现和不同外部设备的速度匹配
- 常用的I/O口编址有两种方式,一种是独立编址方式;另一种是统一编址方式。
-
I/O数据传送的方式有:同步传送、异步传送(查询传送或者称为有条件传送)和中断传送。
- 82C55:控制字相当于对82C55引脚I/O复用初始化,在利用A0,A1,RD,WD.来选中ABC端口来读写数据。
10.输入/输出接口设计
LED数码管的显示原理、键盘的工作原理、LCD工作原理,以及它们的程序设计。