前言:

我自己学习51单片机呢,也已经有一段时间了,趁着今天有空,把一些重要的知识归纳起来,以便以后回顾。

一、MCS-51的基本结构:

(1)、外部结构:

MCS-51系列单片机一般采用40只引脚的双列直插封装(DIP),以80c51为例,如下图:

80C51的引脚按功能划分可分为3类:

1、电源及晶振引脚;

(1)电源引脚:Vcc(第40脚):接+5V电源引脚        Vss(第20脚):接地引脚

(2)外接晶振引脚:XTAL1(第19脚)、XTAL2(第18脚),逻辑方向为:XTAL2-->XTAL1,外接晶振电路原理图如下:

注意:C1、C2一般取30pF左右,作用是帮助振荡器起振,晶体的振荡频率范围在1.2~13MHz。晶体的振荡频率越高,系统的时钟频率就越高,单片机运行速度与就越快。在通常情况下,MCS-51的时钟频率为6~12MHz。

2、控制引脚:

(1)RST/Vpd(第9脚):

(a)复位端RST:若该引脚上输入满足复位时间要求的高电平(该时间等于系统时钟振荡周期建立时间再加2个机器周期),单片机复位。常用的复位电路如下:

(b)备用电源端Vpd:当主电源Vcc发生故障,降低到某一规定的低电平时,可将外接的+5V电源作为备用电源,为单片机片内的ARM供电,保证片内的RAM信息不丢失,从而保证单片机恢复电压后正常工作。

(2)ALE/PROG(第30引脚):

(a)地址锁存使能输出ALE:当单片机访问外部存储器时,外部存储器的16位地址信号由P0口输出低8位,P2口输出高8位,ALE可作为低8位地址锁存控制信号。当不用做外部存储器地址锁存控制信号时,引脚以时钟脉冲频率的1/6固定输出正脉冲。

(b)编程脉冲输入端PROG:对含有EPROM的单片机,在进行片内EPROM编程时需要由此输入编程脉冲

(3)PSEN(第29引脚):输出访问片外程序存储器读选通信号。CPU在从片外ROM取指令期间,该引脚将在每个机器周期内产生两次负跳变脉冲,用作片外ROM芯片的使能信号。

(4)EA/Vpp(第31脚):外部ROM允许访问/编程电源输入

(a)外部ROM允许访问EA:当EA= 1时,CPU从片内ROM开始读取指令。当程序计数器PC的值超过4KB地址范围时,将自动执行片外ROM的指令。但EA=0时,CPU仅访问片内ROM

(b)编程电源输入Vpp:在对含有EPROM的单片机进行EPROM编程时,此引脚应接芯片的编程电压。(具体的编程电压参考芯片说明手册)

3、并行I/O引脚:

P0~P3口都可作为准双向IO口,但P0口需要外接上拉电阻。

在扩展片外存储器时,8位数据总线由P0口组成,16位地址总线由P0口和P2口组成,其中P0口作为低8位地址总线,P2口作为高8八位地址总线,P3口和PSEN、EA、ALE、RESET则组成控制总线

(2)、内部结构:

MCS-51基本结构如下:

CPU按功能可分为:控制器和运算器

运算器

程序计数器PC:16位寄存器,存放下一条指令的地址,当指令取出,PC加1

指令寄存器IR:8位寄存器,暂存待执行的指令,等待译码

指令译码器ID:对指令进行译码,转换成所需的电信号

数据指针DPTR:专业地址指针寄存器,包括DPH和DPL寄存器,其中DPH表示高八位,DPL表示低八位。

控制器:

累加器ACC:8位寄存器,简称A,通过暂存器与ALU(算术逻辑部件)相连,用来存放一个操作数或中间结果

算术逻辑部件(ALU):用来对数据进行四则运算或逻辑运算,ALU的两个操作数,一个由A通过暂存器2输入,另一个由暂存器1输入,运算结果的状态传给PSW(程序状态字寄存器)

程序状态字寄存器(PSW):用来存放程序过程中的各种状态信息

CPU的工作过程:

取指令-->指令译码-->执行指令-->修改指令计数器-->取指令······

二、特殊功能寄存器:

89C51单片机ARM上共有21个特殊寄存器,我只写下一些常用的寄存器。

右边第一位为最低位

PSW(程序状态字寄存器)

CY AC F0 RS1 RS0 OV F1 P

CY:进位标志,进行加减运算,操作结果最高为有进位或借位时,CY由硬件1,否则清零

AC:辅助进位标志,进行加减运算,操作结果的低4位数向高4位产生进位或借位时,由硬件置1,否则清0,也可用于BCD码调整时的判断位

F0、F1:用户标志位,由用户置位或复位

P:奇偶判断标志位,自动追踪A中含"1个数的奇偶性

RS1、RS0:工作寄存组选择方式位

工作寄存组 RS1 RS0
0 0 0
1 0 1
2 1 0
3 1 1

TCON(定时、计数控制寄存器)

88H  可位寻址

TF1 TR1 TF0 TR0 IE1 IT1 IE0

IT0

ITX:外部中断X的中断方式选择位,1 --> 边沿触发有效,0 --> 低电平有效

IEX:外部中断X的中断请求标志位

TRX:定时器X运行控制位,1 --> 开始计时, 0 --> 计时停止

TFX:定时器X溢出标志位。中断执行时由硬件自动清零

TMOD(定时、计数方式控制寄存器)

89H 不可寻址

GATE C/T M1 M0 CATE C/T M1 M0

CATE:门控位   0 --> TRX=1,TX启动;1 --> TRX=1, INTX=1,TX启动

C/T:定时和外部事件计数方式选择位;0,定时器方式,内部脉冲;1,外部事件计数器方式,外部脉冲

M1、M0工作方式选择位:

M1 M0 工作方式 功能说明
0 0 0 13位定时/计数器
0 1 1 16位定时/计数器
1 0 2 8位自动重装定时/计数器
1 1 3 3种定时/计数器

初值:a = 2^n - t(fosc/12)                   计数值:N = 2^n - a

方式0和方式1逻辑结构图(以T1为例):

注意:

1、方式0和方式1的逻辑结构是一样的,区别在于TLX的有效为不同。方式0是低5位有效,高3位补0,方式1全有效。

2、使用方式0时,求出的初值,转换成二进制后,要在低五位后再添3个0,这时的二进制数才是THX和TLX要装进的

方式2逻辑结构图(以T1为例):

方式3逻辑结构图:

3种组合关系:

TH0+TF1+TR1组成的带中断功能的8位定时器

TL0+TR0+TF0组成的带中断功能的8位定时/计数器

TI组成的无中断功能的定时/计数器

特别说明:

当TH和TL溢出后会使TF置1,进而判断是否执行中断

T1可作为波特率发生器使用

当T0为工作方式3时,T1只可使用公式0,1,2,这是因为T0为工作方式3时会占用T1的资源。

IE(中断允许寄存器)

A8H 可位寻址

EA         ES ET1 EX1 ET0 EX0

EXX:外部中断X允许位,1 --> 允许中断,0 --> 停止中断

ETX:定时/计数器TX的溢出中断允许标志位,1 --> 允许中断,0 --> 禁止中断

ES:串行口中断允许位,1 --> 允许中断,0 --> 禁止中断

EA:中断允许总控制位,1 --> CPU开放中断,0 --> CPU屏蔽所以的中断申请

IP(中断优先级寄存器)

B8H 可位寻址

            PS PT1 PX1 PT0 PX0

PS:串行口中断优先级控制位

PTX:定时/计数器TX中断优先级控制位

PXX:外部中断X中断优先级控制位

SCON(串行口控制寄存器)

98H 可位寻址

SM0 SM1 SM2 REN TB8 RB8 TI RI

TI、RI:串行通信中断请求标志,发送、接收TI、RI置1,需要软件清0

RB8:接收数据第九位

TB8:发送数据第九位

REN:允许接收控制位,1 --> 允许接收, 0 --> 禁止接收

SM2:多机通信控制位,1 --> 多机通信, 0 --> 点对点通信

SM1、SM0:串行通信工作方式定义位

SM0 SM1 方式 功能说明
0 0 0 8位同步移位寄存器方式
0 1 1 10位数据异步通信方式
1 0 2

11位数据异步通信方式

1 1 3 11位数据异步通信方式

 

PCON(电源控制寄存器)

SMOD             GF1 GF0 PD

TDL

SMOD:波特率选择位,1 --> 在原基础上加倍, 0 --> 保持原有数值

GF1、GF0:通有标志位

PD:掉电控制位

TDL:空闲控制位

三、中断系统:

手把手带你了解80C51(持续更新)相关推荐

  1. 安卓知识体系搭建(持续更新)

    Java基础 日期操作类 [Android]DecimalFormat简单使用 Java语言编程规范--注释规范 Java内存分配之堆.栈和常量池 Java泛型详解 深入浅出Java中的增强 for ...

  2. Java面试题大全带答案110道(持续更新)

    [Java面试题大全带答案 110道(持续更新)] 本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题 ...

  3. ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步6屏带中文显示版本迭代持续更新

    ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步6屏带中文显示版本迭代持续更新 ✨版本更新说明:✨

  4. 【手把手带你Godot游戏开发 第二弹】名场面临摹(教程目录 10月30日 更新)

    在[上一弹]中,通过对网红手游<FlappyBird>的临摹,我们初步了解了GDScript脚本语言以及Godot游戏引擎的基本工作流程,并且大家的脑海里应该已经建立起了一个可运转的游戏架 ...

  5. (持续更新)Ubuntu22.04双系统的安装、扩容、重装及配置

    本篇文章旨在记录从0开始在华硕天选3(Win11)下安装并配置Ubuntu双系统的全部过程,最终目标是搭建起一个满足我学习.科研和娱乐需求的Ubuntu环境,所以每一次对系统所做的配置我都会记录下来, ...

  6. 飞桨PaddlePaddle-百度架构师手把手带你零基础实践深度学习——21日学习总结

    飞桨PaddlePaddle-百度架构师手把手带你零基础实践深度学习--21日学习总结 写在前面的话 纯新手小白,第一次接触深度学习方面的应用.感谢飞桨提供的这次学习机会.之前有学习到深度学习的理论方 ...

  7. 华为表哥手把手教你利用Jenkins持续集成iOS项目,教不会我花式拉翔!!!

    手把手教你利用Jenkins持续集成iOS项目: 前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段.用户们都是很挑剔的.如果一个公司的推广团队好不容易砸了重金推广了一个APP ...

  8. 研习社实战营--朱老师、猫老师,手把手带你入场打猎!

    1.手把手带你判断行情走势 牛市最怕踏空,但洗盘不断,如果没有老司机带路,搞不好就卖在了地板上.两位老师将在实战营中,带你精准分析行情走势,调整加减仓思路.遇到机会,可以避免踏空:遇到风险,可以及时逃 ...

  9. 嵌入式相关开源项目、库、资料------持续更新中

    学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言.单片机.开源项目.物联网.操作系统.Linux.计算机等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资 ...

最新文章

  1. openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old
  2. 编译Linux Kernel(linux-4.19.178)并制作成rpm文件
  3. 使用tensorflow建模LSTM的详细步骤通俗易懂解读
  4. LINUX 操作记录到syslog,并发送到syslog服务器上
  5. 清除WIN2000中的Administrator账号密码
  6. JSP URL重写-urlrewrite
  7. Crontab命令--Linux
  8. [Spark][Python]groupByKey例子
  9. java 字符串 移位_使用位运算、值交换等方式反转java字符串-共四种方法
  10. java i o是什么流_Java I/O 流,输入流、输出流
  11. 2020 dns排名_2020年度DNS年度全球直销排名
  12. VPX国产化千兆交换板
  13. bex5 mysql_Bex5开发技巧之MYSQL Incorrect string value
  14. zend studio php 运行,Zend Studio使用教程:使用PHP 7进行开发(一)
  15. 如何写好简历与迎接面试
  16. php微信发送客服消息,微信公众号利用客服消息和模板消息实现微信群发
  17. 剑三服务器在哪个文件夹,剑网3无法正常获取服务器列表解决方法
  18. 保卫城市消费券安全,从这些做起
  19. ettercap文本模式+driftnet监控图片瑞星防火墙无效
  20. 同步异步与阻塞非阻塞的区别 (不定时更新)

热门文章

  1. (xml+flash)flash播放器代码!
  2. 【数据结构原理】系统生命周期 | 算法规范 | 笔记
  3. Linux网络设备驱动-以太网驱动分析
  4. 简历 解析 技术总结
  5. github网速慢解决方法
  6. 云斗龙创始人张璇:区块链通证经济如何应用在游戏中?
  7. Oracle EBS Interface/API(22)-PO(标准PO、PBA、一揽子发放和采购申请审批)审批API
  8. matlab模拟短波天波,天波传播.ppt
  9. 预训练语言模型 | (3) Bert
  10. 软件汉化:关于ZoomIt汉化的两个关键的问题