单片机即单片机微型单片机(MCU),将单片机主机(CPU,内存和I/O接口)集成在一小块硅片上的微型机。

51系列是八位单片机。

96是16位单片机。

单片机发展趋势

  • CPU的改进

      采用双CPU结构,以提高处理能力;增加数据总线宽度;采用流水线结构。

  • 存储器的发展

       加大存储容量;片内EPROM开始FLASH化;程序保密化。

  • 片内I/O的改进

       增加并行口的驱动能力;增加I/O口的逻辑控制能力;通信及网络功能加强。

单片机中表示数的方法

进位计数制(二进制,八进制,十六进制)

MCS-51单片机的结构与原理

  • 硬件结构系统

有一个8位CPU,存储器和I/O输入输出部分;由三条总线连接:数据总线,地址总线,控制总线。

单片机就是将这三个部件加上三条总线把它们合成了一个芯片。

CPU工作原理

CPU是“中央处理器”的简称,它就像计算机的大脑一样。

每个CPU里面都有个以固定频率通断的电路,它同步于所有部件,这个电路叫“时钟”,在有的CPU里面这个时钟每秒通断两次。

现在CPU用(GHz)来计算速度,G表示10亿,Hz表示每秒的次数,所以说现在的CPU每秒钟可以通断数十亿次。所以我们的电脑可以处理十分复杂的数据。

CPU的底部有大量引脚用于发送和接受信息,CPU被安装在主板上,主板用于连接计算机里面的所有组件,主板的右边安装了RAM “随机存储器”的缩写,它包含了所有CPU要处理的数据。

CPU与RAM的交互

RAM包含一系列地址,每个地址对应的都是一块数据,任何地址的数据都可以随意访问,当计算机要执行程序时,它向RAM发送一个地址以获得那个程序,但RAM不会有任何操作除非CPU接通set或enable线路。如果enable线路被接通,RAM将自动返回那个地址的数据给CPU,不管数据内容是什么,那块数据将被CPU处理,处理完那个数据以后,它就像RAM发送另一个数据,如此反复上述过程。如果CPU需要存储数据到RA它将输出地址和数据,接通set 之后,RAM将自动在那个地址上覆盖新的数据。

RAM中的数据

1.RAM中最重要的数据就是指令,可以让CPU执行相应命令。

2.数据里面也包含了数字:可以用来相加减或者用于别的操作。

3.还有一种数据是地址,RAM地址对应的数据也是地址,可以利用地址来完成很多任务。

4.RAM中还存储了一些字符,在里面实际上一一些列1和0存在。(ASCLL码)

CPU处理指令

CPU内部有一个控制单元(Control Unit),它可以从RAM接受指令,然后解析这个指令变成其它元件能够理解的命令,而控制单元麾下最重要的元件是“算术逻辑单元”(ALU)用来执行所有的数学运算。ALU接收数据返回结果,ALU引出了8根线,连接到名为“寄存器”(register)的元件上,寄存器是一个很简单的元件,用于暂时储存一个数字。当ALU输出一个结果到寄存器的时候,并且控制单元接通寄存器的set线路,寄存器才会存储数据,当需要把数字从寄存器输出过来时,和RAM原理差不多,我们需要一个enable线路连接到控制单元。寄存器的输出线路会连接到CPU总线上,(总线是一组连接计算机里多个元件的线路)总线上有很多带有独立set和enable线路的寄存器,于是控制单元接通需要储存数字的寄存器的set线路,那个数字就被存到寄存器里面了,最后,控制单元断开第一个寄存器的enable线路清空整个总线。用于在多个操作之间存储数据的寄存器有直接连接到总线上的输出路线。

寄存器

1.工作寄存器

R0~R7(8位)暂时存放运算数据和中间结果。有4个工作寄存区0区~3区,每个区都有8个寄存器 R0~R7.

2.累加器Acc(8位):需要ALU处理的数据和计算结果多数要经过A累加器。

3.寄存器B(8位):与A累加器配合执行乘,除运算,也可用作通用寄存器。

4.程序状态字PSW(8位):可以把ALU运算过程的标志状态记录下来,CY,AC,FO,RS1,RSO,OV -P.

CY

AC

F0

RS1

RS0

OV

P

进位标志位

辅助进位标志位

用户标志位

寄存器组选择位

寄存器组选择位

溢出标志位

无定义

奇偶标志位

5.数据指针DPTR(16位):存放片外存储器地址,作为片外存储器的指针。可以分成两个8位寄存器DPH,DPL使用。

6.堆栈指针SP(8位):堆栈是按照“先进后出”原则存取数据的存储区,MCS-51堆栈设在片内RAM区30H~7FH空间内,复位时SP=07H。堆栈功能,保护断点和现场信息。

7.程序计数器PC(16位):CPU总是按照PC的指示读取程序,当发生转移,子程序调用,中断和复位等操作,PC被强制改写,程序执行顺序也发生改变。复位时,PC=000H。

MCS-51最多可以外扩64K字节程序存储器。

中断源与入口地址

中断源

入口地址

外部中断0(INT0)

0003H

定时器0(T0)

000BH

外部中断1(INT1)

 0013H

定时器1(T1)

001BH

串行口(T1或R1)

0023H

特殊功能寄存器SFR:PC ACC B寄存器 DPTR

外部数据存储器可以没有。

I/O端口

  • MCS-51有4个双向的8位并行I/O口:P0~P3
  • 每一个口都有一个8位的锁存器
  • 复位后它们的初始状态全为“1”
  • P0口是三态(0,1,高阻状态)双向口:可做并行I/O 口,数据线总线口;当外部扩展了存储器或I/O端口,则只能作数据总线和地址总线低8位。

复位电路

复位后PC 的值=0000H,故复位后程序的入口地址为0000H。

复位后PSW=00H,用户标志F0为0状态。

复位后SP=07H,设定堆栈栈底为07H

复位后P1,P2,P3口锁存器全为1状态,使这些双向口皆处于输入状态。

内部RAM不受复位影响。

引脚功能

1.端口线(32条)

P1,2,3,4的0~7号管脚。

2.电源线(2条):VCC+5V电源线,VSS为地线。

3.控制线(6条)

  • ALE/PROG:地址锁存允许/编程线
  • EA/VPP:允许访问片外存储器/编程电源线
  • PSEN:片外ROM选通线
  • RST/VPD:复位/备用电源线
  • XTAL1和XTAL2:片内震荡电路输入/输出线

机器周期*振荡频率=12;

指令编码格式

1.指令编码格式:一条指令表示计算机所完成的某种操作

MOV A(寄存器),R1  (把R1 的内容送到A里面来)

在我们的单片机里一共有111条指令,49条就是一个字节。

  • 单字节指令(49条)
  • 双字节指令(46条)
  • 三字节指令(16条)

egg: 一字指令空操作NOP的编码格式(延时)(一条NOP指令就是1微秒)

2.指令分类

按照指令功能分为:

数据传送类指令(29条);

算术运算类指令(24条);

逻辑运算类指令(24条);

控制转移类指令(17条);

在上述111条指令中,64条指令执行的时间为一个机器周期,45条指令执行的时间为两个机器周期;只有乘法,除法指令执行时间为四个机器周期,当主频为12 MHz时,典型指令执行时间为1微秒。

单片机每秒钟100万条指令。

3.寻址方式

寻址方式是指操作数存放 存储单元地址的表示形式。

MCS-51指令提供七种寻址方式:

  • 立即寻址:把操作数(立即数)包含在指令字节中。在指令格式中,在立即数前冠以符号“#”表示立即寻址方式。
  • 直接寻址:把操作数的地址包含在指令字节中,而操作数本身则存放在该地址指示的数据存储单元中。在操作格式中,操作数的地址直接写在指令中。
  • 寄存器寻址方式:把操作数存放在指定的寄存器中,能实现这种寻址的寄存器有:R0~R7,A,B,DPTR。
  • 寄存器间接寻址方式:把操作数的所在地址存放在指定的寄存器中,能实现这种寻址方式的寄存器:R0,R1,DPTR。在指令格式中,在寄存器前面冠以符号“@”表示。

【FFH】单片机_单片机

  • 基址加变址寻址方式(间接寻址):该方式把DPTR或PC寄存器作为基址寄存器,累加器作为变址寄存器。(A)+()PC

或(A)+(DPTR)的和作为操作数的16位地址。

【FFH】单片机_数据_02

  • 相对寻址方式:以程序计数器PC的当前值为基准,加上指令中给出的相对偏移量rel以形成目标地址。相对偏移量rel给出相对于PC当前值的跳转范围,其值是一个带符号的8 位二进制数,取值范围为-128~127,以补码的形式置于操作码之后存放。
  • 位寻址方式:51具有位处理功能,可以对二进制“位”进行操作。

            内部RAM中的20H-2FH字节地址范围,共128位,位地址为00H-7FH。

             特殊功能寄存器的可寻址位,可寻址位的特殊功能寄存器有B,ACC,PSW,IP,IE,SCON,TCON,P0~P3,共11个。

             PSW中的CY作为位累加器。

4.算术运算指令

1.加法类运算指令

  • 加法指令(影响CY,OV,AC,P)
  • 带进位位CY的加法(影响CY,OV,AC,P)
  • 加1指令

2.减法运算指令

  • 带借位位CY的减法(影响CY,OV,AC,P)
  • 减1指令

3.乘除指令

  • 乘法指令:MUL AB;(影响OV,P),若(B)>0,则OV=1;否则OV=0。
  • 除发指令:DIV AB;(影响OV,P),若除数为0,则OV=1,表示除法无意义。

5.逻辑运算类指令

  • 单操作数逻辑运算指令
  1. 累加器清零  CLR A
  2. 累加器取反  CPL A
  3. 累加器循环左移 RL A
  4. 累加器循环右移 RR A
  5. 累加器带进位CY循环左移 RLC A
  6. 累加器带进位CY循环右移 RRC A
  • 双操作数逻辑运算指令
  1. 逻辑与:ANL
  2. 逻辑或:ORL
  3. 逻辑异或:XRL

6.控制转移类指令

  • 无条件转移:长转移指令 格式:LJMP 标号(转移至标号处执行,转移范围64KB)

                         短转移指令 格式:SJMP 标号(转移至标号处执行,转移范围为256B)

                         绝对转移指令 格式:AJMP 标号(转移范围为2KB)

                          相对转移指令 格式:JMP 标号(转移目标地址为(A)+(DPTR))

  • 条件跳转指令:累加器判零转移指令(JZ、JNZ)

                            比较转移指令 CJNE 

                             减‘1’不为零转移指令 DJNZ

7.位操作指令

  • 位传送指令:MOV C,bit .....
  • 位置位和清除指令 CLR C / SETB C;
  • 位运算指令(ANL ORL CPL取反)
  • 位控制转移指令

【FFH】单片机_单片机_03

汇编伪指令

1.汇编起始地址命令:ORG

格式: ORG 地址

功能:规定程序的起始地址,省略时起始地址从0000H开始

2.汇编终止命令:END

格式:END 表达式

功能:源程序汇编终止

3.赋值命令: EQU

格式: 字符名称 EQU 表达式

功能: 将表达式的值赋给字符名称,表达式可以是常数,地址,标号和表达式

4.定义数据命令: DB,DW

5.定义存储区:DS

6.位定义命令:BIT