什么是单片机?
单片微型计算机是将计算机的基本部件微型化并集成到芯片中的微型计算机。它是计算机微型化的典型代表之一,通常包含中央处理单元(Cpu)、RAM、ROM、并行I/O,串行I/O定时器计数器、中断系统、系统时钟和系统总线。简称单片机。
单片机和微型计算机的区别?
相似之处:核心部件是基于计算机的基本原理
衡量性能的主要计数指标基本相同
指令系统的大部分功能也相同
程序操作原理也有许多相似之处
不同点:单片机将所有电路集成在芯片上,体积小,可靠性高。
微型计算机把CPU、存储器、I/O底板上由不同的芯片组成,如接口、定时器等,然后配备外设等,速度快,容量高。
单片机的基本结构
根据功能,单片机可分为九个部件,通过片内单一总线连接。
1.微处理器;2.数据存储器;(RAM);3、程序存储器(ROM);
4、I/O口; 5.串行口;6.定时/计数器;7.中断系统;8.特殊功能寄存器;
9、看门狗
外部引脚
可分为三部分:1、4组并行I/O2.电源时钟引脚占4个(GND、VCC、三、控制引脚占4个( E A  ̄ ( 外 部 R O M 使 能 ) 、 P S E N  ̄ ( 片 外 程 序 存 储 器 选 通 ) 、 A L E ( 地 址 锁 存 使 能 , 用 于 外 部 扩 展 R A M ) 、 R S T ( 复 位 引 脚 ) \overline{EA}(外部ROM使能)、\overline{PSEN}(选择片外程序存储器)ALE(地址锁定用于外部扩展RAM)、RST(复位引脚) EA(外部ROM使能)、PSEN(片外程序存储器选通)、ALE(地址锁存使能,用于外部扩展RAM)、RST(复位引脚))
运算器
相关寄存器
ACC
累加器,被统一编码在SFR的E0H单元。
PSW
程序状态字寄存器,位于SFR的D0H单元。
CY=进位标志位。有进位,借位时为1。 AC=辅助进位位
F0,F1:用户标志位,由用户自己定义 RS1、RS0: 工作寄存器组选择位
OV=溢出标志位。有溢出时为1 P:奇偶标志位,ACC中1为奇数为1。
PC
16位寄存器。用于保存正在执行指令的下一条指令。
存储器
51单片机的存储器结构为哈佛结构,程序存储器与数据存储器分开编址,不使用同一块物理地址单元。
RAM(数据存储器)
51系列单片机内部共有256个RAM单元,可以通过P0以及P2口外部扩展最多64K个字节的RAM单元。
在内部RAM中,前128个单元是通用RAM单元,用户可以自定义。而后128个字节是单片机的SFR区,是一些特殊功能寄存器。也就是说,特殊功能寄存器是作为RAM单元与通用RAM一起编址的。
值得注意的是,在52和32系列共有256B的通用RAM,因此SFR和和高128字节的通用RAM实际是冲突的,为了解决这个问题,在该系列的单片机中,只能通过间接寻址的方式对高128字节的RAM进行寻址,而通过直接寻址的方式对SFR进行寻址。
下图是51系列单片机的内部RAM示意图:
在内部RAM的00H到1FH空间内是工作寄存器区,在这里面共有4组从R0到R7的工作寄存器。通过调整程序状态字寄存器PSW中的RS0和RS1来实现选用。
从20H到2FH共16个字节,128位是位寻址区,可以通过MOVB指令实现对每一个bit位进行寻址。位地址从00H一直编码到7FH。实际来说,SFR中也包含一些位寻址区,因此,实际的位寻址空间是从00H到F7H。
后面一直到7FH地址空间内的单元都是通用RAM单元。可以用于保存数据以及堆栈。
7FH之后的单元位特殊功能寄存器区。具体地址单元所对应的寄存器见下图。
ROM
程序存储器主要用于存放程序以及一些固定的表格,在程序烧录后固定,不能在程序程序运行过程中对内容进行修改。
31、32内部没有程序存储器,只能外部扩展ROM。在51、52中,内部共有64KB的ROM,通过EA引脚的输入来区分访问的是外部ROM还是内部ROM。一般通过DPTR指针实现对ROM的访问。
中断程序的入口地址被保存在ROM的低字节空间内,具体入口地址见下图。
在单片机响应中断时,单片机硬件会自动跳转到对应的中断入口地址执行中断服务例程。一般来说,我们会在对应中断入口地址处写长跳转指令以转到真正的中断程序。
I/O口
51系列单片机共有4个8位并行I/O口:P0,P1,P2,P3。
在进行片外存储器扩展时,由P0口分时送出低八位地址数,P2送出高8位地址数据。
P0端口
值得注意的是,特殊功能寄存器中的P0所保存的内容实际是锁存器的内容,和引脚上的电平是否相同取决于外部电路的接法。P0的锁存器字节地址为80H,可以进行位寻址。其端口的内部结构图如下所示:
可以看到,P0口的实际数据输入来自两个方面。其中一个是经过锁存器的数据总线上的数据;其二是地址或数据口的数据。
当P0口用作扩展挖外部存储器执行MOVX A,DPTR一类的指令时,控制信号置1,多路选择开关打到上方,此时P0口的数据与单片机给出的地址/数据信号一致。(三极管的工作状体可以自己分析)
当P0口用作通用的并行I/O时,例如执行MOV P0,A一类的指令时,控制信号清0,多路选择开关MUX打到下方,P0口的数据来自锁存器。 此时由于上面一个三极管处于截至状态,要想使P0输出高电平,必须在P0口外接上拉电阻,否则只能输出高阻态或低电平。当从P0口读取数据时例如执行MOV A,P0时,读引脚缓冲器被打开,引脚的电平状态被读到数据总线上。当对P0执行运算操作时,实际是对P0所对应的锁存器里面的内容进行运算操作,需要清楚的是,要进行运算操作,首先必须读取P0的内容,在这个时候读锁存器缓冲被打开,我们读取的是特殊寄存器P0里面的内容而不是引脚上的实际电平,读取到锁存器内容后会进行运算并输出运算结果到锁存器,至于外部引脚能否继承新的内容要看外部电路的接法。
P1端口
P1口的锁存器地址为90H。书上提到P1只能作为I/0口。实际P1也具有一定的第二功能。
这块提的不多,暂时不是很了解,后面再说。
P1由于大多只做普通的通用I/O口,所以内部电路没有选择器,其内部电路如下图所示:
与P0不同的是,当P1作为输出口时,由于内部有上拉电阻,所以不用外接上拉电阻直接可以对外输出高电平。同样由于P0作为输入口时,由于内部无法实现高阻态,引脚并非悬空,所以P1口乃至P2、P3口都被称为准双向口。
P2端口
P2口的锁存器位于A0H。由于P2口也多用于外部扩展存储器的高八位地址。因此其内部结构中也存在一个多路选择器。其具体的电路结构如下所示:
在执行MOVX,MOVC等指令时,控制信号置1,P2负责传输高八位地址信号。当执行MOV等指令时,控制信号清0,P2用作通用I/O口。
值得注意的是,P2端口电路中的三极管的基极是Q取反的结果,与其他端口直接接Q非不同。
P3端口
P3是一个功能较为复杂的端口,具有相当丰富的第二功能。P3的锁存器位于B0H。其内部电路图如下所示:
P3的每一个引脚都有第二功能,具体内容见下表:
时钟
时钟周期为晶振的震荡周期,每12个时钟周期为一个机器周期,每一个机器周期有6个状态,12拍,一拍对应一个时钟周期。
指令周期指的是完成一条指令所需要的机器周期,一般为1个或两个或四个机器周期。