随着微电子技术的快速发展,以ARM为主的32位MCU(微控制器)已普及开来,8位MCU已被很多人认为将被淘汰,更何况其中的老古董MCS-51系列单片机。但从目前的形势来看,8位MCU还牢牢占据着工业控制领域的主导地位,一个原因是8位MCU的开发成本比较低,也有大量的成熟设计方案,还有一个原因是历史的延续,新的产品还处在不断变化中,老产品则是经数十年的淘汰而留存下来的精品。
MCS-51系列单片机正是如此,自1980年由Intel推出后,获得很大成功,并不断改进而形成系列,成为最普遍使用的单片机内核和指令系统。后来,ATMEL、NXP等多家著名半导体公司推出兼容和增强的51系列单片机,应用普遍,因此成为单片机教学的主要示例,熟悉其结构和指令的工程师数量庞大。这几年,随着AVR、PIC等更高性能单片机的推广使用,特别是ARM Cortex-M系列32位MCU价格的持续走低,原来主要以生产51兼容的通用单片机的半导体公司才逐渐淡出市场,但仍有大量以51为内核的计量、无线通信等专用芯片存在。在成本敏感度高的中国市场,以51为内核的STC仍然很受欢迎,看来还要持续一段时间。所以,在今后的一段时间内,51系列单片机还有市场,还有一些人仍要从51开始学习单片机,所以单片机的介绍也要从MSC-51开始。MSC-51系列最典型的型号是ATMEL公司的AT89C51。
一、AT89C51基本描述:
1.AT89C51内核的主要组成结构:
AT89C51是以ALU位中心的8位微控制器(MCU),完成运算和控制功能;内部有128B的数据存储器(内部RAM),地址范围00H~7FH;有21个特殊功能寄存器,在内部RAM的SFR块中(又称专用寄存器),离散分布于地址80H~FFH中。计数器PC,是一个独立的16位专用寄存器,其内容为将要执行的指令地址(程序存储器地址)。
51系列单片机在存储器配置上采用“哈佛”结构,即物理上具有独立的程序寄存器和数据寄存器,但逻辑上采用相同的地址空间,利用不同的指令和寻址方式进行访问。AT89C51内部有4kB FLASH,用来存储程序、原始数据、表格等,称为程序存储器(片内ROM);有4个8位可编程I/O口(P0、P1、P2、P3);一个UART串行通信口;2个16位定时/计数器;5个中断源,两个中断优先级的中断控制系统;一个片内振荡器和时钟电路。
2.AT89C51的主要引脚功能:
GND和Vcc:电源引脚,Vcc接直流电源,5.00V±20%。
RST:复位输入端,此引脚上至少要出现2个机器周期的高电平(12个振荡周期)。
ALE/PROG-:地址锁存允许/编程脉冲,对内部FLASH编程时用于输入编程脉冲。
PSEN-:外部ROM读取选通信号,每个机器周期出现2次有效信号,作为外ROM的OE。
EA-/Vpp:内/外ROM选择及内ROM编程电源,低电平时只访问片外ROM。
3.AT89C51的时钟周期:
当外接12MHz晶振时,振荡周期1/12us、状态时钟周期1/6us、机器周期1us。
4.AT89C51对外部储存器的访问:
当访问外部存储器时,用来锁存P0口输出的低8位地址。即使不访问外部存储器,仍以不变的周期输出信号,频率为振荡频率的1/6。但每当访问外部数据寄存器时,将跳过一个ALE脉冲。
5.AT89C51的复位信号及影响的寄存器:
要实现复位操作,必须使RST引脚至少保持两个机器周期的高电平,再从高电平变为低电平。完成复位后,MCU从ROM中的0000H单元开始执行程序。复位电路常用10uF电容与10k电阻组合。
寄存器 | 复位后内容 | 寄存器 | 复位后内容 | 寄存器 | 复位后内容 | 寄存器 | 复位后内容 |
ACC | 00H | B | 00H | PSW | 00H | SP | 00H |
TL0 | 00H | TH0 | 00H | TL1 | 00H | TH1 | 00H |
DPTR | 0000H | P0~P3 | FFH | SCON | 00H | TMOD | 00H |
IP | xxx00000B | IE | 0xx00000B | PCON | 0xxx0000B | TCON | 00H |
SBUF 不定
二、存储器组成:
AT89C51由程序存储器ROM和数据存储器RAM组成。ROM分为片内和片外,片内ROM为4KB,地址范围0000H~0FFFH;片外ROM可扩展到64KB。RAM可分为片内和片外,片内RAM由128B(00H~7FH)的片内数据寄存器和21个特殊功能寄存器(在80H~FFH中)组成;片外RAM可扩展到64KB。
1.程序寄存器ROM:
AT89C51有4KB片内ROM,用于存储编好的程序、表格、常数,简称程序内存。当程序内存不够用时,可扩展片外程序存储器。片内与片外的地址空间是统一编址的,地址范围为0000H~FFFFH,总共64KB。
MCU工作时,只能读取ROM,所以称为只读存储器。MCU复位后,程序计数器PC的内容为0000H,所以系统必须从0000H单元开始取指令并执行程序,用户程序的第1条指令应放置在这里。
片外ROM的低4KB地址与片内ROM重叠,选择由EA-引脚来控制。EA-=0,复位后系统从片外ROM的0000H地址单元开始执行,且只能执行片外ROM中的程序;EA-=1,复位后系统从片内ROM的0000H地址单元开始执行程序,当PC值大于0FFFH时自动转到片外ROM执行程序。
ROM内有5个特殊地址,是MCU的5个中断服务子程序的入口地址,相邻中断入口地址间隔为8个单元。
外中断0 | 0003H | 外中断1 | 0013H | 串口中断 | 0023H |
定时/计数器中断0 | 000BH | 定时/计数器中断1 | 001BH |
当程序中使用中断时,一般在这些入口地址放置一条跳转指令,而相应的中断服务程序放于转移地址中。如果中断服务程序不超过8个单元,则可放入相应的入口地址开始的8个单元中。如果没有用到中断功能,这些单元也可作为一般用途的程序存储器。
2.数据存储器RAM:
AT89C51片内数据存储器RAM的容量为128B,地址范围为00H~7FH。使用时可分为4个区,即工作寄存器区、可位寻址区、数据缓冲区和堆栈区。堆栈区的栈底地址复位后默认为07H,可由程序中的指令改变。
字节地址 | 位地址 | ||||||||
7F~~~30 | 数据缓冲区 | ||||||||
2F |
位
寻
址
区 | 7F | 7E | 7D | 7C | 7B | 7A | 79 | 78 |
2E | 77 | 76 | 75 | 74 | 73 | 72 | 71 | 70 | |
2D | 6F | 6E | 6D | 6C | 6B | 6A | 69 | 68 | |
2C | 67 | 66 | 65 | 64 | 63 | 62 | 61 | 60 | |
2B | 5F | 5E | 5D | 5C | 5B | 5A | 59 | 58 | |
2A | 57 | 56 | 55 | 54 | 53 | 52 | 51 | 50 | |
29 | 4F | 4E | 4D | 4C | 4B | 4A | 49 | 48 | |
28 | 47 | 46 | 45 | 44 | 43 | 42 | 41 | 40 | |
27 | 3F | 3E | 3D | 3C | 3B | 3A | 39 | 38 | |
26 | 37 | 36 | 35 | 34 | 33 | 32 | 31 | 30 | |
25 | 2F | 2E | 2D | 2C | 2B | 2A | 29 | 28 | |
24 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | |
23 | 1F | 1E | 1D | 1C | 1B | 1A | 19 | 18 | |
22 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | |
21 | 0F | 0E | 0D | 0C | 0B | 0A | 09 | 08 | |
20 | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 | |
18~1F | 3组(R0~R7)工作寄存器组 | ||||||||
10~17 | 2组(R0~R7)工作寄存器组 | ||||||||
08~0F | 1组(R0~R7)工作寄存器组 | ||||||||
00~07 | 0组(R0~R7),默认工作寄存器组 |
工作寄存器:片内RAM中最低的32个单元(00H~1Fh)是工作寄存器区,按地址由小到大分为4个组,每个组有8个8位寄存器,地址由低到高依次命名为R0~R7。当前工作寄存器只能有一个组,选用哪个组由PSW中的RS0和RS1位确定,可由指令设置。复位初始化后RS0=0、RS1=0,使用0组,为默认工作寄存器组。
位寻址区:片内RAM中,20H~2FH地址单元构成固定的可位寻址存储区。每个单元有8位,16个单元共128位,每个位都有一个位地址。它们可以位寻址、位操作,即可对该位进行置1、清0、求反操作等。指令系统中有位操作指令。程序中没有位操作时,该区的地址单元可做他用。
数据缓冲区:片内RAM中,30H~7FH地址单元一般可做数据缓冲区,用于存放各种数据和中间结果。没有使用的工作寄存器单元和没有使用的可位寻址单元都可用做数据缓冲区。
堆栈区:是在片内RAM中开辟的一片特殊数据存储器,对堆栈存取数据按“先进后出”原则。用堆栈指针SP指向栈顶地址,堆栈的最低地址叫栈底,对堆栈存取数据时栈顶地址相应变化,即SP的内容相应变化。复位后,栈底地址单元为07H,因为此时堆栈内还未存放数据,堆栈指针SP的内容与栈底值相同,也为07H。可以根据需要设置SP的初值。
3.特殊功能寄存器SFR:
特殊功能寄存器,也称专用寄存器,是MCU各功能部件所对应的寄存器,用来存放相应功能部件的控制命令、状态或数据。AT89C51内的端口锁存器、程序状态字、定时器、累加器、堆栈指针、数据指针,以及其他控制寄存器都是特殊功能寄存器。SFR离散地分布在片内RAM的高128B(80H~FFH)中,共21字节。
SFR符号及名称 | 字节 地址 | 位地址、位标志 | |||||||
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||
B:B寄存器 | F0 | F7 | F6 | F5 | F4 | F3 | F2 | F1 | F0 |
B.7 | B.6 | B.5 | B.4 | B.3 | B.2 | B.1 | B.0 | ||
ACC:累加器 | E0 | E7 | E6 | E5 | E4 | E3 | E2 | E1 | E0 |
ACC.7 | ACC.6 | ACC.5 | ACC.4 | ACC.3 | ACC.2 | ACC.1 | ACC.0 | ||
PSW程序状态字 | D0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
CY | AC | F0 | RS1 | RS0 | OV | - | P | ||
IP:中断优先级寄存器 | B8 | - | - | - | BC | BB | BA | B9 | B8 |
- | - | - | PS | PT1 | PX1 | PT0 | PX0 | ||
P3:P3口 | B0 | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
P3.7 | P3.6 | P3.5 | P3.4 | P3.3 | P3.2 | P3.1 | P3.0 | ||
IE:中断允许寄存器 | A8 | AF | AE | AD | AC | AB | AA | A9 | A8 |
EA- | - | - | ES | EY1 | EX1 | ET0 | EX0 | ||
P2:P2口 | A0 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 |
P2.7 | P2.6 | P2.5 | P2.4 | P2.3 | P2.2 | P2.1 | P2.0 | ||
SBUF:串口数据缓冲寄存器 | 99 | 不可位寻址 | |||||||
SCON:串口控制寄存器 | 98 | 9F | 9E | 9D | 9C | 9B | 9A | 99 | 98 |
SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI | ||
P1:P1口 | 90 | 97 | 96 | 95 | 94 | 93 | 92 | 91 | 90 |
P1.7 | P1.6 | P1.5 | P1.4 | P1.3 | P1.2 | P1.1 | P1.0 | ||
TH1:T1寄存器高8位 | 8D | 不可位寻址 | |||||||
TH0:T0寄存器高8位 | 8C | 不可位寻址 | |||||||
TL1:T1寄存器低8位 | 8B | 不可位寻址 | |||||||
TL0:T0寄存器低8位 | 8A | 不可位寻址 | |||||||
TMOD:定时/计数器方式寄存器 | 89 | ||||||||
GATE | C/T- | M1 | M0 | GATE | C/T- | M1 | M0 | ||
TCON:定时/计数器控制寄存器 | 88 | 8F | 8E | 8D | 8C | 8B | 8A | 89 | 88 |
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | ||
PCON:电源控制寄存器 | 87 | ||||||||
SMOD | - | - | - | GF1 | GF0 | PD | IDL | ||
DPH:数据指针高8位 | 83 | 不可位寻址 | |||||||
DPL数据指针低8位 | 82 | 不可位寻址 | |||||||
SP:栈指针寄存器 | 81 | 不可位寻址 | |||||||
P0:P0口 | 80 | 87 | 86 | 85 | 84 | 83 | 82 | 81 | 80 |
P0.7 | P0.6 | P0.5 | P0.4 | P0.3 | P0.2 | P0.1 | P0.1 |
其中地址能被8整除(字节末位为0H或8H)的寄存器既可字节寻址又可位寻址,其他只可字节寻址。可位寻址的特殊寄存器的每一位都有位地址,有的还有位名称、位编号。
ACC:累加器,助记符为A,是一个最为常用的特殊功能寄存器。
B:乘除法指令中要用通用的寄存器,也可做一般寄存器用。
PSW:程序状态字,是一个8位寄存器,用来存放指令执行后的有关状态。各位定义为:
PSW.7 | PSW.6 | PSW.5 | PSW.4 | PSW.3 | PSW.2 | PSW.1 | PSW.0 |
C | AC | F0 | RS1 | RS0 | OV | - | P |
C:进位标志,用于表示加减运算过程中累加器最高位有无进位或借位。移位操作也影响。
AC:辅助进位,加减运算时低4位向高4位进位或借位。
F0:用户标志位,是一个供用户定义的标志位。
RS1和RS0:工作寄存器选择位,用于设定当前使用的工作寄存器的组号。
OV:溢出标志,指示运算过程是否发生了溢出。
P:奇偶标志位,表明累加器A中“1”的个数的奇偶性,奇数置1,偶数置0。
SP:堆栈指针。系统复位后初始化为07H,数据从08H开始存放,这里属于工作寄存器组1~3,如果程序设计中要用到,就要把SP设置为1FH或更大。MCU调用子程序或响应中断时,自动发生数据的入栈、出栈操作,还有对堆栈操作的指令。
SBUF:串行数据缓冲器,实际上有发送缓冲器和接收缓冲器两个独立的寄存器。
TH0/TL0和TH1/TL1:分别是定时/计数器的16位计数寄存器,也可单独作4个8位寄存器。
4.片外RAM:
片内RAM不够用时,可扩展片外RAM,最大范围0000H~FFFFH,共64KB。片外RAM与片内RAM有部分地址重叠,但操作片内RAM和片外RAM用不同的指令,片内用MOV,片外用MOVX。
上一篇:51单片机入门 - 串口工作原理知识点汇总
下一篇:51单片机入门 - 自己动手搭建实验板
推荐阅读最新更新时间:2024-11-10 11:14
推荐帖子
- 【ESK32-360测评】合泰与血压算法移植(2)
- 之前算法移植还没有说完,一直在忙于其它的事情,先进行血压的基本性的需求:1.泵阀、压力传感器介绍以及基本的电路泵阀控制电路然后将泵阀的IO口线接到我们的合泰线路板上。2.压力芯片的选择通过SPI接口接到合泰的开发板上,从后面焊接出来。3.泵阀袖带以及气路的接法以上都接完之后,就将算法开始进行移植,以下是算法的关键部分代码。4.关键部分代码其中bpm_main()为BMP的状态机;uart_main()为将血压数据传到电脑上;
- 单片大白菜 国产芯片交流
- 什么是TCP协议
- 什么是TCP协议英文原义:TransmissionControlProtocol中文释义:(RFC-793)传输控制协议该协议主要用于在主机间建立一个虚拟连接,以实现高可靠性的数据包交换。IP协议可以进行IP数据包的分割和组装,但是通过IP协议并不能清楚地了解到数据包是否顺利地发送给目标计算机。而使用TCP协议就不同了,在该协议传输模式中在将数据包成功发送给目标计算机后,TCP会要求发送一个确认;如果在某个时限内没有收到确认,那么TCP将重新发送数据包。另外,在传输的过程中,如果
- dontium RF/无线
- 【LSM6DSOX的FSM有限状态机理解】--状态机指令介绍,附【中文版指令集】
- 在LSM6DSOX开箱与体验Portnotopen¬supported问题解决中分享了初次尝试使用LSM6DSOX传感器的过程和其中遇到的问题解决方案。在【LSM6DSOX的FSM有限状态机理解】--状态机简介中对LSM6DSOX传感器中的FSM有限状态机本质进行了简要的介绍。在【LSM6DSOX的FSM有限状态机理解】--编程模块简介中对FSM编程模块的结构、变量结合Unico中FSM界面进
- justd0 ST MEMS传感器创意设计大赛专区
- samr21 运行contiki examples
- contiki系统的网络能力很强大,里面有最新的6LoWPAN协议和Rime协议还有思科提供的ipv6,可以很轻松的实现基于IP的物联网。想要把contiki移植到samr21平台上最重要的就是要实现下面这些函数:(contiki把整个框架已经写好了,我们只要去针对不同的平台是实现这些函数即可)/***ThestructureofadevicedriverforaradioinContiki.*/structradio_driver{int(*
- songjw Microchip MCU
- 串口通讯
- 单片机接收小程序,当用串口调试工具发送字符时,接收没问题而发送字符串时,通讯异常,会丢失或者乱码,而单片机发送字符串,是OK的是不是很奇怪啊串口通讯你的波特率是多少,会不会与你单片机的接收程序有关.在串口中断服务程序中,不能占用太长时间.否则会影响字符串的接收.“当用串口调试工具发送字符时,接收没问题而发送字符串时,通讯异常,会丢失或者乱码,而单片机发送字符串,是OK的”没看明白到底有什么问题。“而发送字符串时,通讯异常,会丢失或者乱码,”是指什么发送字符串?什
- stycx 嵌入式系统
- 关于CE5的补丁,做个调查,顺便散分!!!
- 大家做的产品,无论是量产的还是正在开发中的,都打上了CE5的补丁了吗?这些补丁全部打上之后对系统的性能会有改善或者倒退的影响吗?我现在正在做的产品没有打任何补丁,但是总感觉电源管理有些问题,有时候睡眠唤醒收不到PBT_TRANSITION以及PBT_RESUME消息,除此之外目前还没有遇到非常严重的系统级别的bug。不知道大家有没有遇到这个PM的问题,欢迎大家踊跃发言。另,最近降薪了,30%的降幅,很是郁闷,特此散分!!!!关于CE5的补丁,做个调查,顺便散分!!!没打过补丁!关注一
- 1230 嵌入式系统
设计资源 培训 开发板 精华推荐
- LT6656AIS6-5、5V 电压基准作为微功率稳压器的典型应用
- TB62778FNG 3.3V 和 5V 电源电压运行的 8 通道恒流 LED 驱动器的典型应用
- LTM8042IV-1 降压-升压模式的典型应用电路,以 500mA 的电流驱动 5 个白光 LED,采用 PWM 调光
- RT9503A 带电源通路的全集成线性单节锂离子电池充电器的典型应用电路
- 具有 10V 栅极驱动器的 LTC3892EFE-1 高效率、双路 5V/12V 输出同步降压转换器的典型应用电路
- 5.1V 直流转直流单路输出电源
- ZGENPRP0100MDS,基于 Z8 Encore XP 系列 MDS 兼容处理器模块的通用模块化开发系统
- 【训练营】物联网门锁-894446A
- MC33074DR2G 二阶低通有源滤波器的典型应用
- #第八届立创电赛#电子钟实现