zoukankan      html  css  js  c++  java
  • 51基础知识——51单片机小结(一)

    本文最后编辑于2020-2-3

    概述

    51单片机是比较适合新手入门的一款单片机,结构简单,易于学习。本博客为笔者自学完单片机后进行的小总结。
    单片机我也是学学放放,中间遇到了很多挫折(当然现在也是),我是自学了C语言之后,在大一下学期开始接触51的,所以,我的51系列blog比较浅显,因为用单片机的时间较少,所以,也并不全面,仅供参考。如有错误,敬请指正。

    正文

    51单片机的结构(基于MCS-51)

    单片机也叫单片微控制器,可以简单的理解为:一种集成在芯片上的微型计算机系统。通用计算机采用冯诺依曼结构(不完全是冯诺依曼结构)而51单片机属于哈佛结构。

    为什么51单片机要使用哈佛结构?

    (这里之说冯诺依曼结构与哈佛结构的差异)冯诺依曼结构认为程序是特殊的数据,所以将程序与数据一起存储,而哈佛结构将程序与数据分离存储。单片机一般用于控制领域,个人电脑,死机的话可以重启,而单片机一般工作时无人看管,如果跑飞,可能会造成极大的损失。在冯诺依曼结构中,数据与程序一起储存,程序跑飞,可能会对原有的程序片段进行修改,而在哈佛结构中程序片段与数据分离,即使跑飞,程序也不会被修改,(且跑飞后规律很明显,程序区不变,数据区的数据不断变化),相对冯诺依曼结构,哈佛结构的单片机跑飞的几率会变低。

    存储器结构

    既然讲到了哈佛结构是程序与数据分开来存储的,那就说一说51存储器的结构
    ROM:程序存储器
    RAM:数据存储器
    对于51单片机来说__ROM__是必备的,没有ROM单片机就不能工作,当单片机工作时,指令是从ROM去除来一条一条的执行的。
    ROM又有内部ROM和外部ROM之分,内部ROM是在单片机内部的,而外部ROM,是通过地址总线来和单片机通讯的。

    单片机是如何来判断该从内部ROM开始读取程序还是从外部RAM开始读取程序?

    这里引出单片机的第一个比较重要的引脚EA(EA要加上划线,取反),当EA为高电平(5v)时,单片机从内部存储器开始读取程序,当EA为低电平时,单片机从外部存储器开始读取程序。

    高电平与低电平

    在数字电路中高电平代表1,低电平代表0,一般规定低电平为0~0.25V,高电平为3.5~5V。

    为什么单片机有一些引脚要加上划线(如 EA引脚)?

    加上划线的引脚代表低电平有效,如EA引脚,加低电平的话,单片机才从外部ROM开始读取指令执行(这样说不严谨,可以简单的这样记)。

    引脚

    51单片机一共有40个引脚:P0、P1、P2、P3、VCC、GND、RST、EA(反)、ALE、PSEN(反)、XTAL1、XTAL2.
    P0到P3为输入输出口。
    VCC、GND是主电源引脚。
    RST、EA(反)、ALE、PSEN(反)为控制引脚。
    XTAL1、XTAL2为震荡电路引脚。

    为什么需要震荡电路?

    震荡电路一般使用晶振和电容组成、可以产生标准的正弦波信号,相当于单片机的心脏,震荡电路震荡一次,产生一个脉冲信号,单片机执行一次或多次指令。

    关于控制引脚

    RST就相当于重启
    EA(反) 相当于要不要从u盘中启动

    其他待补充。。。(目前还没有用到)

    I/O口

    P1、P2、P3 作为 准双向I/O口 来使用,P0作为 双向I/O口 使用。

    准双向I/O口

    准双向I/O口在作为输入口使用时,应先写1,再使用。
    其中
    1.在有外部存储器或拓展I/O口时P0分时复用为低八位地址总线或双向数据总线、P2作为高八位地址总线或双向数据总线。
    2.P0口作为I/O口输入时,不需要上拉电阻但需要先置1然后再使用
    3.P0口输出时,由于内部没有上拉电阻,故要外接上拉电阻
    4.只有P0口没有内接上拉电阻,其他口都有上拉电阻

    工作周期和时序

    复位方式

    在时钟电路工作以后,当外部电路使得RST端出现2个机器周期以上的高电平,系统内部自动复位(重启)。复位方式有两种,手动复位和自动复位。


    机器周期和指令周期

    机器周期

    一个机器周期有六个状态分别为S1-S6.每个状态下有两拍 P1、P2,而一个时钟周期(震荡周期)为一拍

    指令周期

    计算机取一条指令至执行完该指令需要的时间为指令周期,不同指令,周期不同,大部分指令由一个指令周期或两个指令周期完成,只有乘法、除法指令需要4个指令周期。

    以12M的晶振为例,其时钟周期为 1/12M = 1/12us,机器周期为时钟周期X12, 为1us

    为何会出现11.0592MHz的晶振?

    按照上文所述,12M的晶振应该是比较适合单片机选用的晶振,计算出的机器周期正好为1us方便使用,但为何会出现11.0592M的晶振?,原因是通信时使用的波特率,11.0592可以被较好的分频,而12M每次分频后会产生误差,误差慢慢积累会导致数据越来越不准确,故有11.0592M的晶振。

    参考资料
    单片机原理及应用
    分析单片机晶振大多为11.0592的原因
    为什么单片机的晶振会有 11.0592MHz 这个数字?

  • 相关阅读:
    Quartus 16.1 signaltap问题
    黑金AX301开发板视频图像处理:探索
    YOLO算法学习
    Ubuntu 16.04运行altera opencl sdk(AOCL)
    Ubuntu下quartus发现不到usb blaster的问题
    Ubuntu 16.04安装altera opencl sdk(AOCL)
    ZYNQ术语及缩写
    BinaryNet: Training Deep Neural Networks with Weights and ActivationsConstrained to +1 or −1
    卷积神经网络优化方法
    FINN: A Framework for Fast, Scalable Binarized Neural Network Inference_2016_CSCV
  • 原文地址:https://www.cnblogs.com/sophomores/p/12253063.html
Copyright © 2011-2022 走看看