单片机的技术总结.docx
- 文档编号:28899815
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:20
- 大小:83.51KB
单片机的技术总结.docx
《单片机的技术总结.docx》由会员分享,可在线阅读,更多相关《单片机的技术总结.docx(20页珍藏版)》请在冰豆网上搜索。
单片机的技术总结
第一章单片机的内部结构
一.单片机的时序
1.时序的由来
单片机执行指令的过程就是顺序地从ROM(程序存储器)中取出指令一条一条的顺序执行,然后进行一系列的微操作控制,来完成各种指定的动作.它在协调内部的各种动作时必须要有一定的顺序,换句话说就是这一系列微操作控制信号在时间上要有一个严格的先后次序,这种次序就是单片机的时序。
2.时序的周期
计算机每访问一次存储器的时间,我们把它称为一个机器周期.它是一个时间基准。
就象我们日常生活中使用的秒一样.计算机中一个机器周期包括12个振荡周期。
振荡周期就是振荡源的周期,也就是我们使用的晶振的时间周期.一个12M的晶振它的时间周期是T=1/f,也就是1/12微秒。
那么使用12M晶振的单片机它的一个机器周期就应该等于12*1/12微秒,也就是1uS.
在89C51单片机中有些指令只要一个机器周期,而有些指令则需要两个或三个机器周期,另外还有两条指令需要4个机器周期.如何衡量指令执行时间的长短我们就要用到一个新的概念:
指令周期—即执行一条指令所需的机器周期.INTEL公司规定了每一条指令执行的机器周期.
振荡周期:
指振荡源的周期,若为内部产生方式时,为石英晶体的振荡周期。
时钟周期:
(称S周期)为振荡周期的两倍,时钟周期=振荡周期P1十振荡周期P2。
机器周期:
一个机器周期含6个时钟周期(S周期)。
指令周期:
完成一条指令占用的全部时间.805l的指令周期含1—4个机器周期,其中多数为单周期指令,还有2周期和4周期指令.
若fosc=6MHz,则805l的:
振荡周期=1/6us;时钟周期=1/3us;
机器周期=2us;指令周期=2—8us.
二.单片机的时钟电路
单片机是在一定的时序控制下工作的,时钟是时序的基础。
单片机本身就如同一个复杂的同步时序电路,为了保证同步工作方式的实现,电路就要在唯一的时钟信号控制下按时序进行工作。
1内部时钟电路
在MCS—51单片机的内部有一个高增益的反相放大器,其输入端为引脚XTAL1(19脚),输出端为XTAL2(18脚),我们只要在外部接上两个电容和一个晶振,就能构成一个稳定的自激振荡器,看上面的图,晶振的大小与单片机的振荡频率有关,我们到串行接口时再详细讲解.电容的大小影响着振荡器振荡的稳定性和起振的快速性,通常选择10-30P的瓷片电容或校正电容;另外在设计电路时晶振和电容应尽可能的靠近芯片,以减少PCB板的分布电容保证振荡器工作的稳定性,提高系统的抗干扰能力。
2外部时钟电路
除了内部时钟方式外,单片机还可以采用引入外部时钟的振荡方式,当我们的系统由多片单片机组成时,为了保证各单片机之间时钟信号的同步,就应当引入唯一的公用的外部脉冲信号作为各单片机的振荡脉冲,此时应将XTAL2悬空不用,外部脉冲信号由XTAL1引入。
如下图所示。
三.单片机并行口的结构分析
先来看看输入结构
1.输入结构
I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。
读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器.只有读端口时才真正地把外部的数据读入到内部总线,上面图中的两个三角形表示的就是输入缓冲器.CPU将根据不同的指令,分别发出“读端口”或“读引脚”信号,以完成不同的操作,这是由硬件自动完成的,不需要我们操心。
读引脚时,也就是把端口作为外部输入线时,首先要通过外部指令把端口锁存器置1,然后再实行读引脚操作,否则就可能读入出错。
看上面的图,如果不对端口置1,端口锁存器原来的状态有可能为“0”(Q端为0,Q^为1)加到场效应管栅极的信号为“1”,该场效应管就导通,对地呈现低阻抗,此时即使引脚上输入的信号为“1",也会因端口的低阻抗而使信号变低,使得外加的1信号读入后不一定是“1”.若先执行置“1”,操作则可以使场效应管截止,引脚信号直接加到三态缓冲器中,实现正确的读入。
由于在输入操作时还必须附加一个准备动作,所以这类I/O口被称为“准双向"口。
89C51的P0、P1、P2、P3口作为输入时都是“准双向"口。
从图中可以看出除了P1口外P0、P2、P3口都还有其他的功能。
2.端口的工作原理
1)P0口
从图中可以看到P0口的内部有一个2选1的选择器,它受内部信号的控制。
如果在图中的位置则处在I/O口工作方式,此时相当于一个“准双向口"(输入时须先将口置“1”).每根口线可以独立定义为输入或输出,但是须在口线上加上拉电阻。
如果将开关往另一个方向,则就是另一个功能—作为地址/数据复用总线用。
此时不能逐位定义为输入/输出,它有两种用法:
当作数据总线用时,输入8位数据;而当作地址总线用时,则输出低8位地址。
当P0口作为地址/数据复用总线用之后就再也不能作I/O口使用了.地址/数据复用其实是当单片机的并行口不够用时,需要扩展输入输出口时的一种用法.
2)P1口
同P0不同,P1口只能作为I/O口使用,但它的内部有一个上拉电阻,所以连接外围负载时不需要外接上拉电阻.这一点P1、P2、P3都一样务必请记住。
3)P2口
P2口作为I/O口线用时与P0口一样,当内部开关向另一个方向时,即作地址输出时,可以输出程序存储器或外部数据存储器的高8位地址,并与P0口输出的低地址一起构成16位的地址线(注意和数据总线的区别,数据总线是8位的,很多书上都会提到51单片机是8位数据总线16位地址总线,但都不会解释有什么不同)。
16位的地址可以寻址64K的程序存储器或外部数据存储器。
这里要注意的是当P2口作为地址总线时这高8位地址线是8位一起输出的,不能象I/O口线那样逐位定义,这和P0口是一样的
4)P3口
P3口作为I/O口线用时同其他的端口相同,也是“准双向口”。
不同的是P3口的每一位都有另一种功能,也叫第二功能.各位的功能如下,它们的具体作用我们用到时再详细解释.
端口位
第二功能
注释
P3.0
RXD
串行口输入
P3。
1
TXD
串行口输出
P3。
2
INTO
外部中断0
P3.3
INT1
外部中断1
P3.4
T0
计数器0计数输入
P3。
5
T1
计数器1计数输入
P3.6
WR
外部RAM写入选通信号
P3。
7
RD
外部RAM读出选通信号
讲到这里也许您会问:
既然单片机的引脚有第二功能,那么CPU是如何来识别的呢?
其实单片机的第二功能是不需要人工干预的,也就是说只要CPU执行到相应的指令就自动转成了第二功能。
四.单片机I/O口的连接方法
当单片机的I/O口作输出时可以直接与外部设备连接,不过由于在实际的应用中由于其驱动电流是有限的(DATASHEET上说是20mA),所以我们常常需要通过接口电路来扩展它的驱动能力.在单片机的后向通道控制系统中常用的功率控制器件有:
机械继电器、晶闸管、固态继电器等等.下面我们将以机械继电器和固态继电器的应用为例介绍其具体的使用方法.
1.单片机与机械继电器的接口
单片机的一个I/O口只能灌入20mA的电流,所以往往不足以驱动一些功率开关。
比如稍大一点的机械继电器等,此时就应该采用必要的扩展电路。
我们通常采用下面的接法。
如图,为了防止前向通道信号的干扰,常采用一些光电隔离器件,比如光电耦合器4N25,PC814等,当单片机的P1。
0脚输出为低电平时,光藕受电导通,Q1饱和开通,继电器吸合负载电路接通。
另外,为了防止电压间的互相干扰,继电器的工作电压VDD与单片机的工作电压VCC不要使用同一个电源,接地端也不要连在一起即所谓的模拟地与数字地分开。
驱动管的电流要大于继电器的工作电流.
2.单片机与固态继电器的接口
普通继电器由于开关速度慢、易跳火、易机械磨损,通常用于要求不高的场合。
在某些特殊应用场合比如防火防爆等系统中,则应采用固态继电器.固态继电器是一种无触点的电子继电器,它的输入端只要很小的控制电流,可以与单片机的I/O口直接连接;输出则采用双向晶闸管控制,其输入输出间均通过内部光电耦合器隔离,可以防止信号间的干扰,是单片机接口的理想器件。
随着其技术的成熟,应用的广泛,价格也已经非常的便宜,1A/250V的目前在10元左右。
它与单片机的连接方法如图所示,当—端所接的P1.0为低电平时,SSR导通负载工作。
除了以上两种连接方法外,单片机与TTL,CMOS管等都可以连接。
五.存储器的地址
1内部R0M的寻址范围
89C51的内部有4K的FLASHROM空间,其寻址范围为000H—FFFH(15*162+15*161+15*160=0-4095),这4K的ROM空间就是用来存放我们为单片机编写的程序用的。
单片机执行指令时就是一条一条顺序地从ROM中寻找指令进行执行。
2内部RAM的寻址范围
89C51内部共有128个字节的RAM空间,其寻址范围为00H—7FH。
它被分成三个区域:
第一个区域00H-1FH,安排了4组工作寄存器,每组用8个字节共32个字节,分别为R0-R7.当然在同一时刻,只能用其中的一组工作寄存器,怎么来控制它,就要用到程序状态字PWS中的RS0、RS1两位。
第二个区域20H—2FH,共16个字节。
除了可以作为一般的RAM单元读写外还可以对每个字节的每一位(即每一个抽屉中的每一个小盒子)进行操作,并且对这些位都规定了固定的位地址:
从20H单元的第0位开始到2FH单元的第7位结束共128位。
第三个区域就是一般的RAM单元地址,为30H-7FH共80个字节。
实际上在89C51单片机的内部还有一个部分,从80H-FFH是专门用于特殊功能寄存器SFR的。
89C51共用21个特殊功能寄存器.它们每个也都有8位的,这些特殊功能寄存器的使用和前面的128个字节RAM不同,所以很多书上的解释都是89C51有128个字节的内部RAM,实际上它们也属于内部RAM一部分。
为了加深印象大家可以打开DUG8051软件看一下它们的内部组成。
六.单片机的特殊功能寄存器
在单片机中除了前面介绍的RAM、ROM、P0—P3和CPU外,还有许多特殊功能寄存器,英文简写SFR。
下表例出的就是MCS-51单片机中几个常用的特殊功能寄存器.
1。
累加器ACC
通常用A表示。
我们知道单片机在做运算时它的中间结果需要放在某个地方,这个地方就是累加器。
它的名字很特殊,功能也很特殊,几乎所有的运算类指令都离不开它。
2.寄存器B
B寄存器在做乘法时用来存放一个乘数,在做除法时用来存放一个除数,不做乘除法时随你怎么用。
3。
程序状态字PSW
它是一个很重要的东西,里面放了CPU工作时的很多状态.知道它就可以了解CPU当前的工作状态。
它有点象平时看书用的目录,我们浏览它就可以了解一本书的内容。
它是一个8位的寄存器,用到了其中的7位其格式如下:
D7
D6
D5
D4
D3
D2
D1
D0
CY
AC
F0
RS1
RS0
0V
P
下面来逐位介绍它的功能
1)CY进位标志位
MCS-51是一种8位的单片机,它的运算结果只能表示到28(即0-255),但我们有时候的运算结果要超过255,这时就要用CY位。
例如79H+87H(01111001+01010111)=100000000这里的“1"就进到了CY中去了。
2)AC半进位标志位
当D3位向D4位进位/借位时,AC=1,通常用于十进制调整运算中。
3)F0用户自定义标志位
由编程人员自行决定什么时候用,什么时候不用。
4)RS1RS0工作寄存器组选择位
RS1
RS0
工作寄存器组
0
0
0组00H—07H
0
1
1组08H—0FH
1
0
2组10H-17H
1
1
3组18H-1FH
前面讲到单片机共有四个工作寄存器组(0组—3组),它们就是由RS1、RS0来控制,这两位就在这里共有四种组合状态.看上面的表格:
每个工作寄存器组有8个字节,分别记为R0-R7,当然在某一时刻,CPU只使用其中的一组。
假设PSW为“11H”(即00010001)那么RS1=1,RS0=0,则用到了第2组寄存器组(地址10H—17H),RO—R7即为10H—17H,用DBG8051软件输入数值,看看内部RAM中地址为10H-17H中的值是不是为输入值。
5)0V溢出标志位
什么时候溢出我们讲到定时器时再研究.
6)P:
奇偶检验位
每次运算结束后若A中二进制数“1”的个数为奇数,则P=1,否则P=0。
例:
某运算结果是58H(01011000),显然“1”的个数为奇数,所以P=1。
4.DPTRDPHDPL数据指针
数据指针是一个16位的寄存器,我们可以用它来访问外部RAM,也可以访问外部ROM中的表格。
5.SP堆栈指针
先进去的后出来,而后进去的先出来这种符合“先进后出,后进先出”存放规则的现象我们就把它叫做堆栈。
(其实栈在中文中的意思就是码头)
在单片机中,我们可以在内部RAM中构造出(注意:
是可以构造)这样一个区域,这个区域存放数据的规则就符合堆栈中“先进后出,后进先出"的原则。
存储器地址可以读出它里面的内容,但如果我们要读出的是一批数据,每一个数据都要给出一个地址就会很麻烦,为了简化操作就可以利用堆栈的存放方法来读取数据.单片机是一种通用的产品,每个人的实际需要各不相同。
有人需要多一些堆栈而有人则不需要那么多堆栈,所以INTEL公司就干脆不分了,把分的权利让给用户(编程者),也就是说我们可以根据自已的需要来决定。
所以单片机中堆栈的位置是可以变化的,而这种变化就体现在SP中值的变化。
看下面的图SP中的值等于27H,不就相当于是一个指针指向27H单元吗?
这就是堆栈指针的由来。
31H
←SP
31H
第一个数据
30H
30H
29H
29H
28H
28H
27H
27H
26H
26H
25H
25H
24H
24H
当然在MCS-51单片机中,指针开始所指的位置并非就是数据存放的实际位置而是数据存放的前一个位置。
例如一开始堆栈指针是指向27H单元的,那么第一个数据的存放位置就在28H单元中而不是27H单元中这一点请大家注意.
6.电源控制寄存器PCON
单片机在以电池供电的系统,中有时为了节电我们需要让它尽量降低电源的消耗,所以单片机就有多种的工作方式,其中一种就是低功耗方式,PCON寄存器就是用来控制单片机进入低功耗方式的。
第二章单片机的工作方式
一.单片机的工作方式
单片机共有复位、程序执行、低功耗和编程与加密四种工作方式:
1.复位方式
1)为什么要复位
大家知道单片机执行程序时总是从地址0000H开始的,所以在进入系统时必须对CPU进行复位,也叫初始化。
另外,由于程序运行中的错误或操作失误使系统处于死锁状态时,为了摆脱这种状态也需要进行复位,就象电脑死机了要重新启动一样.
2)复位的原理
单片机复位的方法其实很简单,只要在RST引脚(9脚)上加一个持续时间为24个振荡周期(即两个机器周期)的高电平就可以了。
3)如何进行复位
复位操作有上电自动复位、按键复位和外部脉冲复位3种方法,它们的电路分别如下:
上电自动复位是通过外部复位电路的电容充电来实现的,看图1,当电源刚接通时电容C对下拉电阻开始充电,由于电容两边的电压不能突变,所以RTS端维持高电平,只要这个充电时间不超过1ms,一般都就可以实现对单片机的自动上电复位,即接通电源就完成了系统的初始化。
在实际的工程应用中,如果没有特殊要求,一般都采用这种复位方式;按键复位的电路如图2所示,它其实就是在上电复位的基础上加了R1和SA,这种电路一般用在需要经常复位的系统中;外部脉冲复位的电路如图3所示,外部复位通常用于要求比较高的系统,比如希望系统死锁后能自动复位.外部复位是由专门的集成电路来实现的,也就是我们通常俗称的“看门狗”电路。
这种电路有很多,它们不但能完成对单片机的自动复位功能,而且还有管理电源、用作外部存储器等功能。
比如X25045,MAX813L等等就是比较常用的此类芯片.
4)复位后的状态
这就是单片机复位后内部系统的状态:
单片机的初始化状态
寄存器
复位时的内容
PC
0000H
ACC
00H
B
00H
PSW
00H
SP
07H
DPTR
0000H
P0-P3
FFH
TMOD
00000000B
TCON
0X000000B
TL0
00H
TH0
00H
TL1
00H
TH1
00H
SCON
00H
SBUF
不定
PCON
0XXX0000B
2.程序执行方式
程序执行是单片机的基本工作方式,由于复位后PC=0000,所以程序就从地址0000H开始执行。
此时单片机就根据指令的要求完成一系列的操作,控制比如前面讲的让LED灯闪烁起来。
不过在实际使用中程序并不会从0000H开始执行,而总是安排一条跳转指令,比如LJMPSTART.
3.低功耗操作方式
在以电池供电的系统中有时为了降低电池的功耗,在程序不运行时就要采用低功耗方式,低功耗方式有两种—待机方式和掉电方式
低功耗方式是由电源控制寄存器PCON来控制的。
电源控制寄存器是一个逐位定义的8位寄存器,其格式如下:
MSB
SB
SMOD
——
--
--
GF1
GF0
PD
IDL
其中SMOD为波特率倍增位,在串行通讯时用;GF1为通用标志位1;GF0为通用标志位0;PD为掉电方式位,PD=1进入掉电方式;IDL为待机方式位,IDL=1进入待机方式。
也就是说只要执行一条指令让PD位或IDL位为1就可以了,我们来看单片机是如何进入或退出掉电工作方式和待机工作方式的:
1)待机方式
①进入待机方式
当使用指令使PCON寄存器的IDL=1,则进入待机工作方式。
此时CPU停止工作,但时钟信号仍提供给RAM定时器,中断系统和串行口;同时堆栈指针SP,程序计数器PC,程序状态字PSW,累加器ACC以及全部的通用寄存器都被冻结起来,单片机的消耗电流从24mA降为3。
7mA,这样就可以节省电源的消耗.
②退出待机方式
退出待机方式可以采用引入中断的方法,在中断程序中安排一条RETI的指令就可以了.其实待机方式和我们使用电脑时的睡眠方式有异曲同工之妙.
2)掉电方式
①进入掉电方式
当使用指令使PCON寄存器的PD=1,则进入掉电工作方式。
此时单片机的一切工作都停止,只有内部RAM的数据被保持下来。
掉电方式下电源可以降到2V,耗电仅50uA.此时就相当于把显示器和硬盘也关闭了.
②退出掉电方式
退出掉电工作方式的唯一方法是复位,不过应在电源电压恢复到正常值后再进行复位。
复位时间要大于1mS,在进入掉电方式前,电源电压是不能降下来的,因此可靠的单片机电路最好要有电源检测电路.显然掉电方式和待机方式是两种不同的低功耗工作方式,前者可以在无外部事件触发时降低电源的消耗,而后者则在程序停止运行时才使用.
4.编程和加密方式
单片机的编程与加密是由专门的设备来完成的,这种设备称为编程器或烧录器.
加密是为了保护编程者的劳动成果而设计的一种工作方式,不过有矛必然有盾,现在的高手实在是很多,听说即使用OTP特种加密方式也能解密,不过能加密总比不加密的好,所以大家在编程时应尽量采用加密功能。
第三章单片机的指令
一、数据传递类指令
数据传递类指令是单片机中用的最多的指令,在51系列单片机的111条指令中共有28条是数据传递类指令.
1以累加器为目的操作数的指令
(1)MOVA,Rn
(2)MOVRn,A
(3)MOVA,direct
(4)MOVA,@Ri
(5)MOVA,#data
指令
(1)把Rn中的数送入累加器A,Rn代表工作寄存器R0—R7(以后我们只要写到Rn都代表R0-R7,这一点请大家记住了);指令
(2)则相反,把累加器A中的数送入工作寄存器中;指令(3)是把直接地址中的数送入累加器A中,driect就代表直接地址(以后也相同);而指令(4)就是寄存器间接寻址。
这里再重复一遍就是看一下工作寄存器中是什么值,把这个值作为地址,把这个地址中的数送入累加器A中,Ri代表工作寄存器R0或者R1(以后如果写Ri都代表R0或R1);第(5)条指令就是把立即数直接送入累加器A中,很显然data就代表立即数,加#的数就代表送入的是这个数的本身。
2、以寄存器Rn为目的操作数的指令
(1)MOVRn,A
(2)MOVRn,direct
(3)MOVRn,#data
这组指令功能是把源地址单元中的内容送入工作寄存器源操作数不变
3、以直接地址为目的操作数的指令
(1)MOVdirect,A
例如MOV30H,A(将累加器A中的数送入内存单元30H)
(2)MOVdirect,Rn
例如MOV30H,R7(将寄存器R7中的数送入内存单元30H)
(3)MOVdirect,direct
例如MOV30H,20H(将内存单元20H中的数送入内存单元30H)
(4)MOVdirect,@Ri
例如MOV30H,@R0(看一下R0中是什么值,把这个值作为地址并将这个地址单元中的值送入30H中。
如执行指令前R0中的值为20H,则是将20H单元中的值送入30H中。
)
(5)MOVdirect,#data
例如MOV30H,#20H(将立即数20H送入内存单元30H,注意和第三条指令的区别MOV30H,20H这里的20H是一个16进制数。
)
4、以间接地址为目的操作数的指令
(1)MOV@Ri,A
(2)MOV@Ri,direct
(3)MOV@Ri,#data16
Ri只能用工作寄存器R0或者R1。
5、十六位数的传递指令
MOVDPTR,#data16
指令说明:
这是51单片机中唯一的一条16位立即数传递指令。
51系列单片机是一种8位单片机,8位单片机所能表示的最大数只能是28=0—255,立即数不能大于255。
如果现在有个数是1234H,我们要把它送入DPTR,INTEL公司已经把DPTR分成了两个寄存器DPH和DPL(看一下前面的特殊功能寄存器介绍),我们只要把12H(高8位)送入DPH,把34H(低8位)送入DPL中去就可以了,所以执行指令MOVDPTR,#1234H和执行指令MOVDPH,#12H
(1);MOVDPL,#34H
(2);是一样的.
6、累加器A与片外RAM之间的数据传递类指令
片外RAM(即片外数据存储器)—-单片机的内部RAM不够时,我们就要扩充RAM空间,89C51单片机的片外RAM可以扩展到64K(即从0000H-FFFFH),外部RAM进行数据传递必须通过累加器A,它们之间的传递指令共有以下四条。
(1)MOVXA,@Ri
(2)MOVX@Ri,A
(3)MOVXA,@DPTR
(4)MOVX@DPTR,A
指令说明:
A.在51系列单片机中所有要送入或读出外部RAM的数据必须先送到A中去,由此我们可以看出内外部RAM的区别:
内部RAM间可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 技术 总结