精华内容
下载资源
问答
  • 12位的除法,用于单片机上的,已经运用在实际产品中。
  • 单片机

    2019-01-19 09:49:25
    单片机
                   

    单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。


      单片微型计算机简称单片机,是典型的嵌入式 微控制器(Microcontroller Unit),
      

    单片机芯片

    常用英文字母的缩写MCU表示单片机,单片机又称 单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个 计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。它最早是被用在工业控制领域。
      由于单片机在工业控制领域的广泛应用,单片机由 芯片内仅有CPU的专用 处理器发展而来。最早的设计理念是通过将大量外围设备和 CPU集成在一个芯片中,使 计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
      INTEL的Z80是最早按照这种思想设计出的处理器,当时的单片机都是8位或4位的。其中最成功的是 INTEL的8031,此后在8031上发展出了MCS51系列单片机系统。因为简单可靠而性能不错获得了很大的好评。尽管2000年以后ARM已经发展出了32位的主频超过300M的高端单片机,直到目前基于8031的单片机还在广泛的使用。在很多方面单片机比专用处理器更适合应用于 嵌入式系统,因此它得到了广泛的应用。事实上单片机是世界上数量最多处理器,随着单片机家族的发展壮大,单片机和专用处理器的发展便分道扬镳。
      现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、 计算器、家用电器、电子玩具、 掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。 汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。

    应用分类

      单片机作为计算机发展的一个重要分支领域,根据目前发展情况,从不同角度单片机大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。

    通用型/专用型

      这是按单片机适用范围来区分的。例如,80C51是通用型单片机,它不是为某种专用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。

    总线型/非总线型

      这是按单片机是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。

    控制型/家电型

      这是按照单片机大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。

    发展历史

      单片机诞生于1971年,经历了SCM、MCU、SoC三大阶段,早期的SCM单片机都是8位或4位的。其中最成功的是INTEL的8031,此后在8031上发展出了MCS51系列MCU系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着 消费电子产品大发展,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。
      而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位Soc单片机 主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。
      当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的 嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和 Linux操作系统

    基本结构

      单片机由 运算器控制器存储器、输入输出设备构成。

    主要阶段

       早期阶段
       SCM单片微型计算机(Single Chip Microcomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳 体系结构。“创新模式”获得成功,奠定了SCM与 通用计算机完全不同的发展道路。在开创嵌入式系统独立发展道路上,Intel公司功不可没。
       Micro Controller Unit

    Micro Controller Unit

       中期发展
       MCU即微控制器(Micro Controller Unit)阶段,主要的技术发展方向是:不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、 电子技术厂家。从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,最著名的厂家当数Philips公司。
      Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。
       当前趋势
       SoC嵌入式系统System on Chip)式的独立发展之路。向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。

    早期发展史

      1971年 intel公司研制出世界上第一个4位的微处理器;Intel公司的 霍夫研制成功世界上第一块4位微处理器芯片Intel 4004,标志着第一代微处理器问世,微处理器和 微机时代从此开始。因发明微处理器,霍夫被 英国《经济学家》杂志列为“二战以来最有影响力的7位科学家”之一。
      1971年11月,Intel推出MCS-4 微型计算机系统(包括4001 ROM芯片、4002 RAM芯片、4003 移位寄存器芯片和4004微处理器 )其中4004(下图)包含2300个 晶体管,尺寸规格为3mm×4mm,计算性能远远超过当年的ENIAC,最初售价为200美元。
      1972年4月,霍夫等人开发出第一个8位微处理器Intel 8008。由于8008采用的是P沟道MOS微处理器,因此仍属第一代微处理器。
      1973年intel公司研制出8位的微处理器8080;1973年8月,霍夫等人研制出8位微处理器Intel 8080,以N沟道 MOS电路取代了P沟道,第二代微处理器就此诞生。
       主频2MHz的8080芯片运算速度比8008快10倍,可存取64KB存储器,使用了基于6微米技术的6000个晶体管,处理速度为0.64MIPS(Million Instructions Per Second )。
      1975年4月,MITS发布第一个通用型Altair 8800,售价375美元,带有1KB存储器。这是世界上第一台微型计算机。
      1976年intel公司研制出MCS-48系列8位的单片机,这也是单片机的问世。
      Zilog公司于1976年开发的Z80微处理器,广泛用于微型计算机和工业自动控制设备。当时,Zilog、Motorola和Intel在微处理器领域三足鼎立。
      20世纪80年代初,Intel公司在MCS-48系列单片机的基础上,推出了MCS-51系列8位高档单片机。MCS-51系列单片机无论是片内RAM容量,I/O口功能,系统扩展方面都有了很大的提高。

    硬件特性

      1、主流单片机包括CPU、4KB容量的ROM、128 B容量的RAM、 2个16位定时/ 计数器、4个8位并行口、全双工串口行口、ADC/DAC、SPI、I2C、ISP、IAP。
       芯片

    芯片

      2、系统结构简单,使用方便,实现模块化;
      3、单片机可靠性高,可工作到10^6 ~10^7小时无故障;
      4、处理功能强,速度快。
      5、低电压,低功耗,便于生产便携式产品
      6、控制功能强
      7、环境适应能力强。

    应用范围

      目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。 导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能 IC卡,民用豪华轿车的安全保障系统, 录像机摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
      单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:

    智能仪器

      单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的 传感器,可实现诸如电压、电流、 功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或 数字电路更加强大。
      例如精密的测量设备(电压表、 功率计示波器,各种分析仪)。

    工业控制

      单片机具有体积小、控制功能强、功耗低、环境适应能力强、扩展灵活和使用方便等优点,用单片机可以构成形式多样的控制系统、 数据采集系统、通信系统、信号检测系统、无线感知系统、测控系统、机器人等应用控制系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。

    家用电器

      现在的家用电器广泛采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他 音响视频器材、再到 电子秤量设备和 白色家电等。

    网络和通信

      现代的单片机普遍具备 通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型 程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信, 无线电对讲机等。

    医用设备领域

      单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。

    模块化系统

      某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复杂的类似于计算机的原理。如:音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。
      在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。

    汽车电子

      单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能 电子控制器、GPS导航系统、 abs防抱死系统、制动系统、胎压检测等。
      此外,单片机在工商、金融、科研、教育、电力、通信、物流和国防航空航天等领域都有着十分广泛的用途。

    学习方法

    基础理论

      基础理论知识包括模拟电路、数字电路和C语言知识。模拟电路和数字电路属于抽象学科,要把它学好还得费点精神。在你学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。否则,你的单片机学习之路不仅会很艰难和漫长,还可能半途而废。笔者始终认为,扎实的电子技术基础是学好单片机的关键,直接影响单片机学习入门的快慢。有些同学觉得单片机很难,越学越复杂,最后学不下去了。有的同学看书时似乎明白了,可是动起手来却一塌糊涂,究其原因就是电子技术基础没有打好,首先被表面知识给困惑了。
      单片机属于 数字电路,其概念、术语、硬件结构和原理都源自数字电路,如果数字电路基础扎实,对复杂的单片机硬件结构和原理就能容易理解,就能轻松地迈开学习的第一步,自信心也会树立起来。相反,基础不好,这个看不懂那个也弄不明白,越学问题越多,越学越没有信心。如果你觉得单片机很难,那就应该先放下单片机教材,去重温数字电路,搞清楚触发器、寄存器、门电路、COMS电路、时序逻辑和 时序图、进制转换等理论知识。理解了这些知识之后再去看看单片机的结构和原理,我想你会大彻大悟,信心倍增。
       模拟电路是电子技术最基础的学科,她让你知道什么是电阻、 电容、电感、 二极管三极管场效应管、放大器等等以及它们的工作原理和在电路中的作用,这是学习电子技术必须掌握的基础知识。一般是先学习模拟电路再去学习数字电路。扎实的模拟电路基础不仅让你容易看懂别人设计的电路,而且让你的设计的电路更可靠,提高产品质量。
      C语言知识并不难,没有任何编程基础的人都可以学,在我看来,初中生、高中生、中专生、大学生都能学会。当然,数学基础好、逻辑思维好的人学起来相对轻松一些。C语言需要掌握的知识就那么3个条件判断语句、3个循环语句、3个跳转语句和1个开关语句。别小看这10个语句,用他们组合形成的逻辑要多复杂有多复杂。学习时要一条语句一条语句的学,学一条活用一条,全部学过用过这些关键语句后,相信你的C基础建立了。
      当基础打好以后,你会感觉到单片机不再难学了,而且越学越起劲。当单片机乖乖的依照你的逻辑思维和算法去执行指令,实现预期控制效果的时候,成就感会让你信心十足、夜以续日、废寝忘食的投入到单片机的世界里。可以这么说,扎实的电子技术基础和C语言基础能增强学习单片机信心,较快掌握单片机技术。

    实验实践

      这是真正学习单片机的过程,既让人兴奋又让人疲惫,既让人无奈又让人不服,既让人孤独又让人充实,既让人气愤又让人欣慰,既有失落感又有成就感。其中的酸甜苦辣只有学过的人深有体会。思想上要有刻苦学习的决心,硬件上要有一套完整的学习开发工具,软件上要注重理论和实践相结合。
      1.有刻苦学习的决心
      首先,明确学习目的。先认真回答两个问题:我学单片机来做什么?需要多长时间把它学会?这是你学单片机的动力。没有动力,我想你坚持不了多久。其次,端正学习心态。单片机学习过程是枯燥乏味、孤独寂寞的过程。要知道,学习知识没有捷径,只有循序渐进,脚踏实地,一步一个脚印,才能学到真功夫。再次,要多动脑勤动手。单片机的学习具有很强的实践性,是一门很注重实际动手操作的技术学科。不动手实践你是学不会单片机的。最后,虚心交流。在单片机学习过程中每个人都会遇到无数不能解决的问题,需要你向有经验的过来人虚心求教,否则,一味的自己埋头摸索会走许多弯路,浪费很多时间。
      2.有一套完整的学习开发工具
      学习单片机是需要成本的。必须有一台电脑、一块单片机开发板(如果开发板不能直接下载程序代码的话还得需要一个编程器)、一套视频教程、一本单片机教材和一本C语言教材。电脑是用来编写和编译程序,并将程序代码下载到单片机上;开发板用来运行单片机程序,验证实际效果;视频教程就是手把手教你单片机开发环境的使用、单片机编程和调试。对于单片机初学者来说,视频教程必须看,要不然,哪怕把教材看了几遍,还是不知道如何下手,尤其是院校里的单片机教材,学了之后,面对真正的单片机时可能还是束手无策;单片机教材和C语言教材是理论学习资料,备忘备查。不要为了节约成本不用开发板而光用Protur软件仿真调试,这和纸上谈兵没什么区别。
      3. 要注重理论和实践相结合
      单片机C语言编程理论知识并不深奥,光看书不动手也能明白。但在实际编程的时候就没那么简单了。一个程序的形成不仅需要有C语言知识,更多需要融入你个人的编程思路和算法。编程思路和算法决定一个程序的优劣,是单片机编程的大问题,只有在实际动手编写的时候才会有深切的感悟。一个程序能否按照你的意愿正常运行就要看你的思路和算法是否正确、合理。如果程序不正常则要反复调试(检查、修改思路和算法),直到成功。这个过程耗时、费脑、疲精神,意志不坚强者往往被绊倒在这里半途而废。
      学习编写程序应该按照以下过程学习,效果会更好。看到例程题目先试着构思自己的编程思路,然后再看教材或视频教程里的代码,研究人家的编程思路,注意与自己思路的差异;接下来就照搬人家的思路亲自动手编写这个程序,领会其中每一条语句的作用;对有疑问的地方试着按照自己的思路修改程序,比较程序运行效果,领会其中的奥妙。每一个例程都坚持按照这个过程学习,你很快会找到编程的感觉,取其精华去其糟粕,久而久之会形成你独特的编程思想。当然,刚开始,看别人的程序源代码就像看天书一样,只要硬着头皮看,看到不懂的关键字和语句就翻书查阅、对照。只要能坚持下来,学习收获会事半功倍。在实践过程中不仅要学会别人的例程,还要在别人的程序上改进和拓展,让程序产生更强大的功能。同时,还要懂得通过查阅芯片数据手册(DATASHEET)里有关芯片命令和数据的读写时序来核对别人例程的可靠性,如果你觉得例程不可靠就把它修改过来,成为是你自己的程序。不仅如此,自己应该经常找些项目来做,以巩固所学的知识和积累更多的经验。

    硬件设计

      当编写自己的程序信手拈来、阅读别人的程序能够发现问题的时候,说明你的单片机编程水平相当不错了。接下来就应该研究的硬件了。硬件设计包括电路原理设计和PCB板设计。学习做硬件要比学习做软件麻烦,成本更高,周期更长。但是,学习单片机的最终目的是做产品开发----软件和硬件相结合形成完整的控制系统。所以,做硬件也是学习单片机技术的一个必学内容。
      电路原理设计涉及到各种芯片的应用,而这些芯片外围电路的设计、典型应用电路和与单片机的连接等在芯片数据手册(DATASHEET)都能找到答案,前提是要看得懂全英文的数据手册。否则,照搬别人的设计永远落在别人的后面,你做的产品就没有创意。电子技术领域的第一手资料(DATASHEET)都是英文,从第一手资料里你所获得的知识可能是在教科书、网络文档和课外读物等所没有的知识。虽然有些资料也都是在DATASHEET的基础上撰写的,但内容不全面,甚至存在翻译上的遗漏和错误。当然,阅读DATASHEET需要具备一定的英文阅读能力,这也是阻碍单片机学习者晋级的绊脚石。良好的英文阅读能力能让你在单片机技术知识的海洋里自由遨游。
      做PCB板就比较简单了。只要懂得使用Protel软件或 AltimDesigner软件就没问题了。但要想做的板子布局美观、布线合理还得费一番功夫了。
      娴熟的单片机C语言编程、会使用Protel软件或 AltimDesigner软件设计PCB板和具备一定的英文阅读能力,你就是一个遇强则强的单片机高手了。 [1]

    抗干扰设计

      在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。下面以MCS-51单片机系统为例,对微机系统软件抗干扰方法进行研究。

    软件抗干扰设计

      在工程实践中,软件抗干扰研究的内容主要是:一、消除模拟输入信号的噪声(如数字滤波技术);二、程序运行混乱时使程序重入正轨的方法。本文针对后者提出了几种有效的软件抗干扰方法。
       指令冗余
      CPU取指令过程是先取操作码,再取操作数。当PC受干扰出现错误,程序便脱离正常轨道“乱飞”,当乱飞到某双字节指令,若取指令时刻落在操作数上,误将操作数当作操作码,程序将出错。若“飞” 到了三字节指令,出错机率更大。
      在关键地方人为插入一些单字节指令,或将有效单字节指令重写称为指令冗余。通常是在双字节指令和三字节指令后插入两个字节以上的NOP。这样即使乱飞程序飞到操作数上,由于空操作指令NOP的存在,避免了后面的指令被当作操作数执行,程序自动纳入正轨。
      此外,对系统流向起重要作用的指令如RET、 RETI、LCALL、LJMP、JC等指令之前插入两条NOP,也可将乱飞程序纳入正轨,确保这些重要指令的执行。
       拦截技术
      所谓拦截,是指将乱飞的程序引向指定位置,再进行出错处理。通常用软件陷阱来拦截乱飞的程序。因此先要合理设计陷阱,其次要将陷阱安排在适当的位置。
      (1 )软件陷阱的设计
      当乱飞程序进入非程序区,冗余指令便无法起作用。通过软件陷阱,拦截乱飞程序,将其引向指定位置,再进行出错处理。软件陷阱是指用来将捕获的乱飞程序引向复位入口地址0000H的指令。通常在EPROM中非程序区填入以下指令作为软件陷阱:
      NOPNOPLJMP 0000H其机器码为0000020000。
      (2 ) 陷阱的安排
      通常在程序中未使用的EPROM空间填0000020000。最后一条应填入020000,当乱飞程序落到此区,即可自动入轨。在用户程序区各模块之间的空余单元也可填入陷阱指令。当使用的中断因干扰而开放时,在对应的中断服务程序中设置软件陷阱,能及时捕获错误的中断。如某应用系统虽未用到外部中断1,外部中断1的中断服务程序可为如下形式:
      NOPNOPRETI返回指令可用“RETI”,也可用“LJMP 0000H”。如果故障诊断程序与系统自恢复程序的设计可靠、 完善,用“LJMP 0000H”作返回指令可直接进入故障诊断程序,尽早地处理故障并恢复程序的运行。
      考虑到程序存贮器的容量,软件陷阱一般1K空间有2-3个就可以进行有效拦截。
       软件“看门狗”技术
      若失控的程序进入“死循环”,通常采用“看门狗”技术使程序脱离“死循环”。通过不断检测程序循环运行时间,若发现程序循环时间超过最大循环运行时间,则认为系统陷入“死循环”,需进行出错处理。
      “看门狗”技术可由硬件实现,也可由软件实现。在工业应用中,严重的干扰有时会破坏中断方式控制字,关闭中断。则系统无法定时“喂狗”,硬件看门狗电路失效。而软件看门狗可有效地解决这类问题。
      笔者在实际应用中,采用环形中断监视系统。用定时器T0监视定时器T1,用定时器T1监视主程序,主程序监视定时器T0。采用这种环形结构的软件“看门狗”具有良好的抗干扰性能,大大提高了系统可靠性。对于需经常使用T1定时器进行串口通讯的测控系统,则定时器T1不能进行中断,可改由串口中断进行监控(如果用的是MCS-52系列单片机,也可用T2代替T1进行监视)。这种软件“看门狗”监视原理是:在主程序、T0中断服务程序、T1中断服务程序中各设一运行观测变量,假设为MWatch、T0Watch 、T1Watch,主程序每循环一次,MWatch加1,同样T0、T1中断服务程序执行一次,T0Watch、 T1Watch加1。在T0中断服务程序中通过检测T1Watch的变化情况判定T1运行是否正常,在T1中断服务程序中检测MWatch的变化情况判定主程序是否正常运行,在主程序中通过检测T0Watch的变化情况判别T0是否正常工作。若检测到某观测变量变化不正常,比如应当加1而未加1,则转到出错处理程序作排除故障处理。当然,对主程序最大循环周期、定时器T0和T1定时周期应予以全盘合理考虑。限于篇幅不赘述。

    硬件抗干扰技术

      单片机系统因干扰复位或掉电后复位均属非正常复位,应进行故障诊断并能自动恢复非正常复位前的状态。
       非正常复位的识别
      程序的执行总是从0000H开始,导致程序从 0000H开始执行有四种可能:一、系统开机上电复位;二、软件故障复位;三、看门狗超时未喂狗硬件复位; 四、任务正在执行中掉电后来电复位。四种情况中除第一种情况外均属非正常复位,需加以识别。
      (1 )硬件复位与软件复位的识别
      此处硬件复位指开机复位与看门狗复位,硬件复位对寄存器有影响,如复位后PC=0000H, SP=07H,PSW=00H等。而软件复位则对SP、SPW无影响。故对于微机测控系统,当程序正常运行时,将SP设置地址大于07H,或者将PSW的第5位用户标志位在系统正常运行时设为1。那么系统复位时只需检测PSW.5标志位或SP值便可判此是否硬件复位。
      由于硬件复位时片内RAM状态是随机的,而软件复位片内RAM则可保持复位前状态,因此可选取片内某一个或两个单元作为上电标志。设40H用来做上电标志,上电标志字为78H,若系统复位后40H单元内容不等于78H,则认为是硬件复位,否则认为是软件复位,转向出错处理。若用两个单元作上电标志,则这种判别方法的可靠性更高。
      (2 )开机复位与看门狗故障复位的识别
      开机复位与看门狗故障复位因同属硬件复位, 所以要想予以正确识别,一般要借助非易失性RAM或者EEROM。当系统正常运行时,设置一可掉电保护的观测单元。当系统正常运行时,在定时喂狗的中断服务程序中使该观测单元保持正常值(设为 AAH),而在主程中将该单元清零,因观测单元掉电可保护,则开机时通过检测该单元是否为正常值可判断是否看门狗复位。
      (3 )正常开机复位与非正常开机复位的识别
      识别测控系统中因意外情况如系统掉电等情况引起的开机复位与正常开机复位,对于过程控制系统尤为重要。如某以时间为控制标准的测控系统,完成一次测控任务需1小时。在已执行测控50分钟的情况下,系统电压异常引起复位,此时若系统复位后又从头开始进行测控则会造成不必要的时间消耗。因此可通过一监测单元对当前系统的运行状态、系统时间予以监控,将控制过程分解为若干步或若干时间段,每执行完一步或每运行一个时间段则对监测单元置为关机允许值,不同的任务或任务的不同阶段有不同的值,若系统正在进行测控任务或正在执某时间段,则将监测单元置为非正常关机值。那么系统复位后可据此单元判系统原来的运行状态,并跳到出错处理程序中恢复系统原运行状态。
       非正常复位后系统自恢复运行的程序设计
      对顺序要求严格的一些过程控制系统,系统非正常复位否,一般都要求从失控的那一个模块或任务恢复运行。所以测控系统要作好重要数据单元、参数的备份,如系统运行状态、系统的进程值、当前输入、输出的值,当前时钟值、观测单元值等,这些数据既要定时备份,同时若有修改也应立即予以备份。
      当在已判别出系统非正常复位的情况下,先要恢复一些必要的系统数据,如显示模块的初始化、片外扩展芯片的初始化等。其次再对测控系统的系统状态、运行参数等予以恢复,包括显示界面等的恢复。之后再把复位前的任务、参数、运行时间等恢复, 再进入系统运行状态。
      应当说明的是,真实地恢复系统的运行状态需 要极为细致地对系统的重要数据予以备份,并加以数据可靠性检查,以保证恢复的数据的可靠性。
      其次,对多任务、多进程测控系统,数据的恢复需考虑恢复的次序问题。
      系统基本初始化是指对芯片、显示、输入输出方式等进行初始化,要注意输入输出的初始化不应造成误动作。而复位前任务的初始化是指任务的执行状态、运行时间等。
      对于软件抗干扰的一些其它常用方法如数字滤波、RAM数据保护与纠错等,限于篇幅,本文未作讨论。在工程实践中通常都是几种抗干扰方法并用,互相补充 完善,才能取得较好的抗干扰效果。从根本上来说,硬件抗干扰是主动的,而软件是抗干扰是被动的。细致周到地分析干扰源,硬件与软件抗干扰相结合,完善系统监控程序,设计一稳定可靠的单片机系统是完全可行的。

    基础知识

      本段仅针对硬件设计人员和软件设计人员,为了便于对硬件的理解要有一定的汇编语言基础。

    总线

      我们知道,一个电路总是由 元器件通过电线连接而成的,在 模拟电路中,连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以 微处理器为核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调,所以需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器件间单独连线,则线的数量将多得惊人,所以在微处理机中引入了总线的概念,各个器件共同享用连线,所有器件的8根数据线全部接到8根公用的线上,即相当于各个器件并联起来,但仅这样还不行,如果有两个器件同时送出数据,一个为0,一个为1,那么,接收方接收到的究竟是什么呢?这种情况是不允许的,所以要通过控制线进行控制,使器件分时工作,任何时候只能有一个器件发送数据(可以有多个器件同时接收)。器件的数据线也就被称为 数据总线,器件所有的控制线被称为 控制总线。在单片机内部或者 外部存储器及其它器件中有 存储单元,这些存储单元要被分配 地址,才能使用,分配地址当然也是以电信号的形式给出的,由于存储单元比较多,所以,用于地址分配的线也较多,这些线被称为 地址总线

    数据地址指令

      这三者的本质都是一样的——数字,或者说都是一串‘0’和‘1’组成的序列。换言之,地址、指令也都是数据。指令:由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关系,不可以由 单片机的开发者更改。地址:是寻找单片机内部、外部的存储单元、输入输出口的依据,内部单元的地址值已由 芯片设计者规定好,不可更改,外部的单元可以由单片机开发者自行决定,但有一些地址单元是一定要有的(详见程序的执行过程)。数据:这是由微处理机处理的对象,在各种不同的应用电路中各不相同,一般而言,被处理的数据可能有这么几种情况:
      1.地址(如MOV DPTR,1000H),即地址1000H送入 DPTR
      2.方式字或控制字(如MOV TMOD,#3),3即是控制字。
      3.常数(如MOV TH0,#10H)10H即定时常数。
      4.实际输出值(如P1口接彩灯,要灯全亮,则执行指令:MOV P1,#0FFH,要灯全暗,则执行指令:MOV P1,#00H)这里0FFH和00H都是实际输出值。又如用于LED的字形码,也是实际输出的值。
      理解了地址、指令的本质,就不难理解程序运行过程中为什么会跑飞,会把数据当成指令来执行了。

    P0/P2/P3功能

      初学时往往对P0口、P2口和P3口的第二功能用法迷惑不解,认为第二功能和原功能之间要有一个切换的过程,或者说要有一条指令,事实上,各端口的第二功能完全是自动的,不需要用指令来转换。如P3.6、P3.7分别是WR、RD信号,当微处理机外接RAM或有外部I/O口时,它们被用作第二功能,不能作为通用I/O口使用,只要一微处理机一执行到MOVX指令,就会有相应的信号从P3.6或P3.7送出,不需要事先用指令说明。事实上‘不能作为通用I/O口使用’也并不是‘不能’而是(使用者)‘不会’将其作为通用I/O口使用。你完全可以在指令中按排一条SETB P3.7的指令,并且当单片机执行到这条指令时,也会使P3.7变为高电平,但使用者不会这么去做,因为这通常会导致系统的崩溃。

    程序执行过程

      单片机在通电复位后8051内的 程序计数器(PC)中的值为‘0000’,所以程序总是从‘0000’单元开始执行,也就是说:在系统的ROM中一定要存在‘0000’这个单元,并且在‘0000’单元中存放的一定是一条指令。

    堆栈

      堆栈是一个区域,是用来存放数据的,这个区域本身没有任何特殊之处,就是内部RAM的一部份,特殊的是它存放和取用数据的方式,即所谓的‘先进后出,后进先出’,并且堆栈有特殊的数据传输指令,即‘PUSH’和‘POP’,有一个特殊的专为其服务的单元,即 堆栈指针SP,每当执一次 PUSH指令时,SP就(在原来值的基础上)自动减2,每当执行一次POP指令,SP就(在原来值的基础上)自动加2。由于SP中的值可以用指令加以改变,所以只要在程序开始阶段更改了SP的值,就可以把堆栈设置在规定的内存单元中,如在程序开始时,用一条MOV SP,#5FH指令,就是把堆栈设置在从内存单元60H开始的单元中。 一般程序的开头总有这么一条设置堆栈指针的指令,因为开机时,SP的初始值为07H,这样就使堆栈从08H单元开始往后,而08H到1FH这个区域正是8031的第二、三、四 工作寄存器区,经常要被使用,这会造成数据的混乱。不同作者编写程序时,初始化堆栈指令也不完全相同,这是作者的习惯问题。当设置好堆栈区后,并不意味着该区域成为一种专用内存,它还是可以象普通内存区域一样使用,只是一般情况下编程者不会把它当成普通内存用了。

    开发过程

      这里所说的开发过程并不是一般书中所说的从任务分析开始,我们假设已设计并制作好硬件,下面就是编写软件的工作。在编写软件之前,首先要确定一些常数、地址,事实上这些常数、地址在设计阶段已被直接或间接地确定下来了。如当某器件的连线设计好后,其地址也就被确定了,当器件的功能被确定下来后,其控制字也就被确定了。然后用 文本编辑器(如EDIT、CCED等)编写软件,编写好后,用 编译器对源程序文件编译,查错,直到没有语法错误,除了极简单的程序外,一般应用仿真机对软件进行调试,直到程序运行正确为止。运行正确后,就可以写片(将程序固化在EPROM中)。在源程序被编译后,生成了扩展名为HEX的目标文件,一般 编程器能够识别这种格式的文件,只要将此文件调入即可写片。在此,为使大家对整个过程有个认识,举一例说明:
       单片机试验板

    单片机试验板

      ORG 0000H
      LJMP START
      ORG 040H
      START:
      MOV SP,#5FH ;设堆栈
      LOOP:
      NOP
      LJMP LOOP ;循环
      END ;结束

    单片机指令表

    一、传送操作

      助记符 代码 说明
      MOV A,Rn E8~EF 寄存器A
      MOV A,direct E5 direct 直接 字节送A
      MOV A,@Ri ER~E7 间接RAM送A
      MOV A,#data 74 data 立即数送A
      MOV Rn,A F8~FF A送寄存器
      MOV Rn,direct A8~AF direct 直接字节送寄存器
      MOV Rn,#data 78~7F data 立即数送寄存器
      MOV direct,A F5 direct A送直接字节
      MOV direct,Rn 88~8F direct 寄存器送直接字节
      MOV direct1,direct2 85 direct1 direct2 直接字节送直接字节
      MOV direct,@Ro 86~87 间接RAM送直接字节
      MOV direct,#data 75 direct data 立即数送直接字节
      MOV @Ri,A F6~F7 A送间接RAM
      MOV @Ri,direct 76~77 direct 直接字节送间接RAM
      MOV @Ri,#data 76~77 data 立即数送间接RAM
      MOV DPTR,#data16 90 data 15~8 16位常数送数据指针
      data7~0
      MOVC A,@A+DPTR 93 由((A)+(DPTR))寻址的程序存贮
      器字节选A
      MOVC A,@A+PC 83 由((A)+(PC));寻址的程序存贮器字节送A
      MOVX A,@Ri E2~E3 送外部数据(8位地址)送A
      MOVX A,@DPTR E0 送外部数据(16位地址)送A
      MOVX @Ri,A F2~F3 A送外部数据(8位地址)
      MOVX @DPTR,A F0 A送外部数据(16位地址)
      PUSH direct C0 direct 直接字节进栈,SP加1
      POP direct D0 direct 直接字节退栈,SP减1
      XCH A,Rn C8~CF 交换A和寄存器
      XCH A,direct C5 direct 交换A和直接字节
      XCH A,@Ri C6~C7 交换A和间接RAM
      XCH A,@Ri D6~D7 交换A和间接RAM的低位
      SWAP A C4

    二、算术操作

      (A的二个 半字节交换)
      ADD A,Rn 28~2F 寄存器加到A
      ADD A,direct 25 direct 直接字节加到A
      ADD A,@Ri 26~27 间接RAM加到A
      ADD A,#data 24data 立即数加到A
      ADD A,Rn 38~3F 寄存器和进位位加到A
      ADD A,direct 35direct 直接字节和进位位加到A
      ADD A,@Ri 36~37 间接字节和进位位加到A
      ADD A,data 34 data 立即数和进位位加到A
      ADD A,Rn 98~9F A减去寄存器和进位位
      ADD A,direct 95 direct A减去直接字节和进位位
      ADD A,@Ri 36~37 间接RAM和进位位加到A
      ADD A,data 34 data 立即数和进位位加到A
      SUBB A,Rn 98~9F A减去寄存器和进位位
      SUBB A,direct 95 direct A减去直接字节和进位位
      SUBB A,@Ri 96~97 A减去间接RAM和进位位
      SUBB A,#data 94 data A减去立即数和进位位
      INC A 04 A加1
      INC Rn 08~0F 寄存器加1
      INC direct 05 direct 直接字节加1
      INC @Ri 06~07 间接RAM加1
      DEC A 14 A减1
      DEC Rn 18~1F 寄存器减1
      DEC direct 15 direct 直接字节减1
      DEC @Ri 16~17 间接RAM减1
      INC DPTR A3 数据指针加1
      MUL AB A4 A乘以B
      DIV AB 84 A除以B
      DA A D4 A的十进制加法调整

    三、逻辑操作

      ANL A,Rn 58~5F 寄存器“与”到A
      ANL A,direct 55 direct 直接字节“与”到A
      ANL A,@Ri 56~57 间接RAm“与”到A
      ANL A,#data 54 data 立即数“与”到A
      ANL direct A 52 direct A“与”到直接字节
      ANL direct,#data 53 direct data 立即数“与”到直接字节
      ORL A,Rn 48~4F 寄存器“或”到A
      ORL A,direct 45 direct 直接字节“或”到A
      ORL A,@Ri 46~47 间接RAM“或”到A
      ORL A,#data 44 data 立即数“或”到A
      ORL direct,A 42 direct A“或”到直接字节
      ORL direct,#data 43 direct data 立即数“或”到直接字节
      XRL A,Rn 68~6F 寄存器“异或”到A
      XRL A,direct 65 direct 直接字节“异或”到A
      XRL A,@Ri 66~67 间接RAM“异或”到A
      XRL A,#data 64 data 立即数“异或”到A
      XRL direct A 62 direct A“异或”到直接字节
      XRL direct,#data 63 direct data 立即数“异或”到直接字节
      CLR A E4 清零
      CPL A F4 A取反
      RL A 23 A左环移
      RLC A 33 A通过进位左环移
      RR A 03 A右环移
      RRC A 13 A通过进位右环移

    四、控制程序转移

      ACALL addr 11 *1 addr(a7~a0) 绝对子程序调用
      LCALL addr 16 12 addr(15~8) 长子程序调用
      addr(7~0)
      RET 22 子程序调用返回
      RETI addr 11 32 中断调用返回
      AJMP addr 11 △1 addr(a7~a6) 绝对转移
      LJMP addr 16 02addr(15~8) 长转移
      addr(7~0)
      SJMP rel 80 rel 短转移,相对转移
      JMP @A+DPTR 73 相对于DPTR间接转移
      JZ rel 60 rel A为零转移
      JNZ rel 70 rel A为零转移
      CJNE A,direct,rel B5 direct rel 直接字节与A比较,不等则转移
      CJNE A,#data,rel B4 data rel 立即数与A比较,不等则转移
      CJNE A,Rn,#data,rel B8~BF data rel 立即数与寄存器比较,不等则转移
      CJNE @Ri,#data,rel B6~B7 data rel 立即数与间接RAM比较,不等则转移
      DJNZ Rn,rel D8~DF rel 寄存器减1,不为零则转移
      DJNZ direct,rel B5 direct rel 直接字节减1,不为零则转移
      NOP 00 空操作

    五、布尔变量操作

      CLR C C3 清零进位
      CLR bit C2 清零直接位
      SETB C D3 置位进位
      SETB bit D2 置位直接位
      CPL C B3 进位取反
      CPL bit B2 直接位取反
      ANL C,bit 82 dit 直接数“与”到进位
      ANL C,/bit B0 直接位的反“与”到进位
      ORL C,bit 72 bit 直接位“或”到进位
      ORL C,/bit A0 bit 直接位的反“或”到进位
      MOV C,bit A2 bit 直接位送进位
      MOV bit,C 92 bit 进位送直接位
      JC rel 40 rel 进位位为1转移
      JNC rel 50 rel 进位位为0转移
      JB bit,rel 20 bit rel 直接位为1相对转移
      JNB bit,rel 30 bit rel 直接位为0相对转移
      JBC bit,rel 10 bit rel 直接位为1相对转移,然后清零该位

    常用单片机芯片简介

       STC单片机
       STC公司的单片机主要是基于8051内核,是新一代增强型单片机,指令代码完全兼容传统8051,速度快8~12倍,带ADC,4路PWM,双串口,有全球唯一ID号,加密性好,抗干扰强.
       PIC单片机:
      是 MICROCHIP公司的产品,其突出的特点是体积小,功耗低, 精简指令集,抗干扰性好,可靠性高,有较强的模拟接口,代码保密性好,大部分芯片有其兼容的FLASH 程序存储器的芯片.
       EMC单片机:
      是 台湾义隆公司的产品,有很大一部分与PIC 8位单片机兼容,且相兼容产品的资源相对比PIC的多,价格便宜,有很多系列可选,但抗干扰较差.
       ATMEL单片机(51单片机):
       ATMEl公司的8位单片机有AT89、AT90两个系列,AT89系列是8位Flash单片机,与 8051系列单片机相兼容,静态时钟模式;AT90系列单片机是增强RISC结构、全静态工作方式、内载在线可编程Flash的单片机,也叫 AVR单片机.
       PHLIPIS 51LPC系列单片机(51单片机):
       PHILIPS公司的单片机是基于80C51内核的单片机,嵌入了掉电检测、模拟以及片内RC 振荡器等功能,这使51LPC在高集成度、低成本、低功耗的应用设计中可以满足多方面的性能要求.
       HOLTEK单片机:
      台湾盛扬半导体的单片机,价格便宜,种类较多,但抗干扰较差,适用于消费类产品.
       TI公司单片机(51单片机):
       德州仪器提供了TMS370和MSP430两大系列通用单片机.TMS370系列单片机是8位CMOS单片机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合;MSP430系列单片机是一种超低功耗、功能集成度较高的16位低功耗单片机,特别适用于要求功耗低的场合
       松翰单片机(SONIX):
      是台湾松翰公司的单片,大多为8位机,有一部分与PIC 8位单片机兼容,价格便宜, 系统时钟分频可选项较多,有PMW ADC 内振 内部杂讯滤波。缺点RAM空间过小,抗干扰较好。

    攻击技术

      目前,攻击单片机主要有四种技术,分别是:
       (1)软件攻击
      该技术通常使用处理器通信接口并利用协议、加密算法或这些算法中的安全漏洞来进行攻击。软件攻击取得成功的一个典型事例是对早期ATMEL AT89C 系列单片机的攻击。攻击者利用了该系列单片机擦除操作时序设计上的漏洞,使用自编程序在擦除 加密锁定位后,停止下一步擦除片内程序存储器数据的操作,从而使加过密的单片机变成没加密的单片机,然后利用编程器读出片内程序。
       (2) 电子探测攻击
      该技术通常以高时间分辨率来监控处理器在正常操作时所有电源和接口连接的模拟特性,并通过监控它的电磁辐射特性来实施攻击。因为单片机是一个活动的电子器件,当它执行不同的指令时,对应的电源功率消耗也相应变化。这样通过使用特殊的 电子测量仪器和数学统计方法分析和检测这些变化,即可获取单片机中的特定关键信息。
       (3)过错产生技术
      该技术使用异常工作条件来使处理器出错,然后提供额外的访问来进行攻击。使用最广泛的过错产生攻击手段包括电压冲击和时钟冲击。低电压和高电压攻击可用来禁止 保护电路工作或强制处理器执行错误操作。时钟瞬态跳变也许会复位保护电路而不会破坏受保护信息。电源和时钟瞬态跳变可以在某些处理器中影响单条指令的解码和执行。
       (4)探针技术
      该技术是直接暴露芯片内部连线,然后观察、操控、干扰单片机以达到攻击目的。为了方便起见,人们将以上四种攻击技术分成两类,一类是侵入型攻击(物理攻击),这类攻击需要破坏封装,然后借助半导体测试设备、显微镜和微定位器,在专门的实验室花上几小时甚至几周时间才能完成。所有的微探针技术都属于侵入型攻击。另外三种方法属于非侵入型攻击,被攻击的单片机不会被物理损坏。在某些场合非侵入型攻击是特别危险的,但是因为非侵入型攻击所需设备通常可以自制和升级,因此非常廉价。
      大部分非侵入型攻击需要攻击者具备良好的处理器知识和软件知识。与之相反,侵入型的探针攻击则不需要太多的初始知识,而且通常可用一整套相似的技术对付宽范围的产品。

    加密方法

      科研成果保护是每一个科研人员最关心的事情,加密方法有软件加密,硬件加密,软硬件综合加密,时间加密,错误引导加密,专利保护等措施有矛就有盾,有盾就有矛,有矛有盾,才促进矛盾质量水平的提高加密只讲盾,也希望网友提供更新的加密思路,现先讲一个软件加密:利用MCS-51 中A5 指令加密,其实世界上所有资料,包括英文资料都没有讲这条指令,其实这是很好的加密指令A5 功能是二字节空操作指令加密方法在A5 后加一个二字节或三字节操作码,因为所有反汇编软件都不会反汇编A5 指令,造成正常程序反汇编乱套,执行程序无问题仿制者就不能改变你的源程序。
      硬件加密:8031/8052 单片机就是8031/8052掩模产品中的不合格产品,内部有ROM,可以把8031/8052 当8751/8752 来用,再扩展外部程序器,然后调用8031 内部子程序当然你所选的同批8031 芯片的首地址及所需用的中断入口均应转到外部程序区。
       硬件加密
      用高电压或激光烧断某条引脚,使其读不到 内部程序,用高电压会造成一些器件损坏重要RAM 数据采用电池(大 电容,街机采用的办法)保护,拔出芯片数据失去机器不能起动,或能初始化,但不能运行。
       用真假方法加密
      擦除芯片标识
      把8X52 单片机,标成8X51 单片机,并用到后128B的RAM 等方法,把AT90S8252 当AT89C52,初始化后 程序段中并用到EEPROM 内容,你再去联想吧!
      用激光(或丝印)打上其它标识如有的单片机引脚兼容,有的又不是同一种单片机,可张冠李戴,只能意会了,这要求你知识面广一点 。
      用最新出厂编号的单片机,如2000 年后的AT89C 就难解密,或新的单片机品种,如AVR 单片机。
      DIP 封装改成PLCC,TQFP,SOIC,BGA等封装,如果量大可以做定制ASIC,或软封装,用不需外晶振的单片机工作(如AVR 单片机中的AT90S1200),使用更复杂的单片机,FPGA+AVR+SRAM=AT40K系列。
      硬件加密与软件加密只是为叙说方便而分开来讲,其实它们是分不开的,互相支撑,互相依存的软件加密:其目的是不让人读懂你的程序,不能修改程序,你可以………….....
      利用单片机未公开,未被利用的标志位或单元,作为软件标志位,如8031/8051 有一个用户标志位,PSW.1 位,是可以利用的程序入口地址不要用整地址,如:XX00H,XXX0H,可用整地址-1,或-2,而在整地址处加二字节或三字节操作码,在无程序的空单元也加上程序机器码,最好要加巧妙一点用大容量芯片,用市场上仿真器不能仿真的芯片,如内部程序为64KB 或大于64KB 的器件,如:AVR 单片机中ATmega103 的Flash 程序存储器为128KBAT89S8252/AT89S53 中有EEPROM,关键数据存放在EEPROM 中,或程序初始化时把密码写到EEPROM 中,程序执行时再查密码正确与否,尽量不让人家读懂程序。关于单片机加密,讲到这里,就算抛砖引玉。
               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • {"i18nChapterName": "章","i18nUnitName": "节","i18nLessonName": "课时","i18nTaskName":"任务"}{"text": {"icon": "es-icon es-icon-graphic","name": "图文"},"video": {"icon": "es-icon es-icon-video","name...

    {

    "i18nChapterName": "章",

    "i18nUnitName": "节",

    "i18nLessonName": "课时",

    "i18nTaskName":"任务"

    }

    {

    "text": {

    "icon": "es-icon es-icon-graphic",

    "name": "图文"

    }

    ,

    "video": {

    "icon": "es-icon es-icon-video",

    "name": "视频"

    }

    ,

    "audio": {

    "icon": "es-icon es-icon-audio",

    "name": "音频"

    }

    ,

    "live": {

    "icon": "es-icon es-icon-entry-live",

    "name": "直播"

    }

    ,

    "discuss": {

    "icon": "es-icon es-icon-discuss",

    "name": "讨论"

    }

    ,

    "flash": {

    "icon": "es-icon es-icon-flash",

    "name": "Flash"

    }

    ,

    "doc": {

    "icon": "es-icon es-icon-document",

    "name": "文档"

    }

    ,

    "ppt": {

    "icon": "es-icon es-icon-ppt",

    "name": "PPT"

    }

    ,

    "testpaper": {

    "icon": "es-icon es-icon-examination",

    "name": "考试"

    }

    ,

    "homework": {

    "icon": "es-icon es-icon-task",

    "name": "作业"

    }

    ,

    "exercise": {

    "icon": "es-icon es-icon-exercise",

    "name": "练习"

    }

    ,

    "download": {

    "icon": "es-icon es-icon-downloadfile",

    "name": "下载资料"

    }

    }

    1621689841

    展开全文
  • 单片机基础-第一个单片机系统

    千次阅读 多人点赞 2020-05-14 10:17:11
    单片机基础-第一个单片机系统 简单的单片机系统 构成单片机系统——单片机+外围器件 如果把单片机和外围器件组合起来,实现一定的功能,那我们就称单片机和外围器件组成了单片机系统。 如何控制一个发光...

    没写完。

    目录

    51单片机应用从0开始

    第一章单片机基本概念

    定义

    把中央处理器CPU(Central Processing Unit)、存储器(Memory)、定时器/计数器、中断、输入/输出I/O(Input/Output)接口电路等功能部件集成在一块集成电路芯片上的微型计算机。
    基本概念

    单片机的功能部件

    中央处理器CPU

    计算机的核心部件 由运算器和控制器组成 主要完成计算机的运算和控制功能

    1. 运算器——中央处理器CPU

    - 算术逻辑单元ALU 
    - 累加器ACC(Accumulator) 
    - 寄存器B 
    - 程序状态字PSW(Programe State Word)
    

    PSW👇 在这里插入图片描述在这里插入图片描述
    RS1、 RS0与片内工作寄存器组的对应关系👇
    RS1、 RS0与片内工作寄存器组的对应关系

    2. 控制器——中央处理器CPU

    • 时钟电路
      • (a)内部时钟电路
      • (b)外部振荡源
        在这里插入图片描述
    • 复位电路
      • (a)上电复位电路
      • (b)开关复位电路
        在这里插入图片描述
      • 复位后内部寄存器状态
        在这里插入图片描述

    3. 指令寄存器和指令译码器——中央处理器CPU

    指令寄存器中存放指令代码。CPU执行指令时, 由程序存储器中读取的指令代码送入指令存储器, 经译码器译码后由定时与控制电路发出相应的控制信号, 完成指令所指定的操作。

    4. 程序计数器PC(Program Counter)

    PC用于存放CPU下一条要执行的指令地址, 是一个 16 位的专用寄存器, 可寻址范围是0000H~0FFFFH共 64 KB。 程序中的每条指令存放在ROM区的某一单元, 并都有自己的存放地址。 CPU 要执行哪条指令时, 就把该条指令所在 的单元的地址送上地址总线。 在顺序执行程序中, 当PC的 内容被送到地址总线后, 会自动加 1, 即(PC)← (PC)+1, 又指向CPU下一条要执行的指令地址。

    5. 堆栈指针SP(Stack Pointer)——中央处理器CPU

    堆栈操作是在内存RAM区专门开辟出来的按照“先进后出”原则进行数据存取的一种工作方式, 主要用于子程序调用及返回和中断处理断点的保护及返回, 它在完成子程序嵌套和多重中断处理中是必不可少的。为保证逐级正确返回, 进入栈区的“断点”数据应遵循“先进后出”的原则。SP用 来指示堆栈所处的位置, 在进行操作之前, 先用指令给SP赋值, 以规定栈区在RAM区的起始地址(栈底层)。当数据推入栈 区后, SP的值也自动随之变化。MCS - 51 系统复位后, SP初始化为07H

    6. 数据指针寄存器DPTR——中央处理器CPU

    数据指针DPTR是一个 16 位的专用寄存器, 其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示。既可作为一个 16 位寄存器DPTR来处理, 也可作为两个独立的 8 位寄存器DPH和DPL来处理。
    DPTR 主要用来存放 16 位地址, 当对 64 KB外部数据存储器空间寻址时, 作为间址寄存器用。在访问程序存储器时, 用作基址寄存器。

    存储器

    具有记忆功能的电子部件,分为程序存储器和数据存储器两类
    程序存储器:存储程序、表格等相对固定的信息
    数据存储器:存储程序运行期间所用到的数据信息

    1. 程序存储器ROM

    • 对于8051来说, 程序存储器(ROM)的内部地址为0000H~0FFFH, 共 4 KB; 外部地址为 1000H~FFFFH, 共 60 KB。 当程序计数器由内部 0FFFH执行到外部 1000H 时, 会自动跳转。 对于 8751 来说, 内部有 4 KB的EPROM, 将它作为内部程序存 储器; 8031 内部无程序存储器, 必须外接程序存储器。 8031 最多可外扩 64 KB程序存储器, 其中 6 个单元地址具有特殊用途, 是保留给系统使用的。0000H是系统的启动地址, 一般在该单元中存放一条绝对跳转指令。0003H、000BH、 000BH、001BH和 0023H对应 5 种中断源的中断服务入口地址。

    2. 内部数据存储器

    • MCS-51 单片机片内RAM的配置如下图所示。片内RAM为 256 字节, 地址范围为00H~FFH, 分为两大部分: 低 128 字节(00H~7FH)为真正的RAM区; 高 128 字节 (80H~FFH)为特殊功能寄存器区SFR。 在低 128 字节RAM中, 00H~1FH共 32 单元是 4 个通用
      工作寄存器区。每一个区有 8 个通用寄存器R0~R7。寄存器和RAM地址对应关系如表 。
      寄存器与RAM 地址对照表👇在这里插入图片描述
      RAM中的位寻址区地址表👇
      在这里插入图片描述
      SFR特殊功能寄存器地址表1👇
      在这里插入图片描述
      SFR特殊功能寄存器地址表2👇
      在这里插入图片描述
      SFR特殊功能寄存器地址表3👇在这里插入图片描述

    3. 外部数据存储器

    外部数据存储器一般由静态RAM构成,其容量大小由用户根据需要而定, 最大可扩展到 64 KB RAM , 地址是 0000H~0FFFFH。 CPU通过MOVX指令访问外部数据存储器, 用间接寻址方式, R0、R1和 DPTR都可作间接寄存器。注意, 外部RAM和扩展的I/O接口是统一编址的, 所有的外扩I/O 口都要占用 64 KB中的地址单元。

    并行输入/输出接口

    CPU与相应的I/O设备(如: 键盘、鼠标、显示器、打印机等)进行信息交换的桥梁,
    主要功能是协调、匹配CPU与外设的工作

    1. P0口

    P0 口内部一位结构图👇在这里插入图片描述

    2. P1、P2和P3口

    P1、P2 和P3 口为准双向口, 在内部差别不大, 但使用功能有所不同。
    P1口是用户专用 8 位准双向I/O口, 具有通用输入/输出功能, 每一位都能独立地设定为输入或输出。当有输出方式变为输入 方式时, 该位的锁存器必须写入“1”, 然后才能进入输入操作。
    P2口是 8 位准双向I/O口。外接I/O设备时, 可作为扩展系统的地址总线, 输出高8位地址, 与P0 口一起组成 16 位地址总线。 对于 8031 而言, P2 口一般只作为地址总线使用, 而不作为I/O线 直接与外部设备相连。
    P3口的第二功能👇
    在这里插入图片描述
    单片机的引脚及其功能👇

    • (a) 管脚图;
    • (b) 8031 引脚功能分类
    • 在这里插入图片描述

    串行口

    实现单片机和其他设备之间的串行数据传送
    即可作为全双工异步通用收发器使用,又可作为同步移位寄存器使用。

    定时器/计数器

    用于实现定时或计数功能
    并以其定时或计数结果对操作对象进行控制

    中断控制系统

    为满足各种实时控制的需要而设置
    是重要的输入输出方式
    8051单片机中有5个中断源,可分为高级和低级两个优先级别。

    时钟电路

    主要由振荡器和分频器组成
    为系统各工作部件提供时间基准
    串口、中断、定时/计数是单片机重要的内部资源
    为CPU控制外部设备、实现信息交流提供了强有力的支持

    1. 机器周期和指令周期——单片机工作的基本时序

    -(1)振荡周期: 也称时钟周期, 是指为单片机提供时钟脉冲信号的振荡源的周期。
    -(2)状态周期: 每个状态周期为时钟周期的 2 倍, 是振荡周期经二分频后得到的。
    -(3)机器周期: 一个机器周期包含 6 个状态周期S1~S6, 也就是 12 个时钟周期。 在一个机器周期内, CPU可以完成一个独立的操作。
    -(4) 指令周期: 它是指CPU完成一条操作所需的全部时间。 每条指令执行时间都是有一个或几个机器周期组成。MCS 51 系统中, 有单周期指令、双周期指令和四周期指令。

    2. MCS - 51 指令的取指/执行时序

    在这里插入图片描述

    3. 访问外部ROM和RAM的时序

    读外部程序ROM时序👇
    在这里插入图片描述
    读外部数据RAM时序 👇
    在这里插入图片描述
    写外部数据RAM的时序👇
    在这里插入图片描述

    总线

    计算机各工作部件之间传送信息的公共通道
    按功能可分为

    • 数据总线DB(Data Bus)
    • 地址总线 AB(Address Bus)
    • 控制总线 CB(Control Bus)
      三类分别传送数据信息、地址信息和控制信息

    总结_MCS -51单片机硬件结构&MCS - 51单片机的内部结构

    在这里插入图片描述

    特点

    - 严格区分ROM和RAM

     - 程序存储器(ROM)只存放程序、固定常数及数据表格
     - 数据存储器(RAM)用作工作区及存放用户数据
     - 小容量的数据存储器能以高速RAM形式集成在单片机内,以 加速单片机的执行速度
    

    - 采用面向控制的指令系统

    - 为满足控制的需要,单片机有强大的逻辑控制能力,特别是 具有很强的位处理能力。
    

    - I/O引脚通常为多功能

    - 引脚处于何种功能,可由指令来设置或由机器状态来区分 
    - 解决实际引脚数和需要的信号线的矛盾
    

    - 外部扩展能力强

    - 在内部的各种功能部件不能满足应用需要时,均可在外部进 行扩展
    - (如扩展ROM、RAM,I/O接口,定时器/计数器, 中断系统等)
    - 与许多通用的微机接口芯片兼容 
    - 给应用系统设计带来极大的方便和灵活性。
    

    - 结构功能优化

    - 能方便灵活地组成各种智能测控仪器仪表和设备
    

    - 可靠性高

    - 单片机芯片按工业测校环境要求设计 
    - 产品在120°C温度条件下经44小时老化处理,并通 过电气测试及最终质量检验
    - 可以适应各种恶劣的工作环境。
    


    第二章 MCS-51单片机的指令系统

    1. 指令系统定义

    • 指令是规定计算机完成一个特定功能的命令 • MCS-51单片机设有传送、算术运算、逻辑运算、控制转移、位操作共5 类111条指令
    • 用户可以通过立即寻址、寄存器寻址、寄存器间接寻址、直接寻址、变址 寻址、相对寻址、位寻址等7种寻址方式规定操作数
    • 深入理解不同寻址方式的特点及功能,全面掌握各条指令的格式、功能及 使用方法是灵活运用指令系统的关键。

    2. 单片机指令

    2.1MCS-51单片机指令——分类

    2.1.1 按指令所占的字节数

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

    2.1.2 按指令的执行时间

    • 单周期指令(65条)
    • 双周期指令(44条)
    • 四周期指令(2条)

    2.1.3 按指令的功能

    • 数据传送类指令(29条)
    • 算术运算类指令(24条)
    • 逻辑运算类指令(24条)
    • 控制转移类指令(17条)
    • 位操作类指令(17条)

    2.2 MCS-51单片机指令——格式

    [标号: ] 操作码助记符 [目的操作数][, 源操作数] [;注释]
    【例】AA: ADD A, #10H ;将累加器A的内容与10H相加,结果存入累加器A

    • AA为标号,是这条指令的标志,其值是该条指令的首地址
    • ADD为操作码,说明要进行加法运算
    • 目的操作数为累加器A,源操作数为#10H
    • “;”后面为注释部分

    2.3 单片机指令——常用符号

    为清晰准确地表述指令的格式及功能,下面对MCS-51单片机指令中常用的符号作一些规定:

    1. A(ACC):累加器
    2. B:专用寄存器,用于乘法和除法指令中
    3. C:进位标志或进位位,或布尔处理机中的累加位(器)
    4. DPTR:数据指针,可用作16位地址寄存器
    5. Rn(n=07):当前寄存器组的8个工作寄存器R0R7,由PSW中的 RS1、RS0决定当前使用的寄存器组。
    6. Ri(i=0或1):可用于间接寻址的两个寄存器R0、R1
    7. #data:8位立即数,即出现在指令中直接参与操作的操作数
    8. #data16:16位立即数
    9. rel:以补码形式表示的8位相对偏移量,范围为-128~127,主要用在相对寻址的指令中
    10. addr16和addr11:分别表示16位直接地址和11位直接地址,即存放操作数的存储器地址。
    11. direct:表示内部数据存贮器单元的地址或特殊功能寄存器SFR的地址, 对SFR而言,既可使用它的物理地址,也可直接使用它的名字。
    12. @:间接寻址中工作寄存器的前缀符号
    13. (X) :X单元中的内容
    14. bit :表示内部RAM和SFR中的某些具有位寻址功能的位地址。SFR中的 位地址可以直接出现在指令中,为了阅读方便,往往也可用SFR的名字和 所在的数位表示。如:表示PSW中的奇偶校验位,可写成D0H,也可写 成PSW.0的形式。
    15. ((X)) :以X单元的内容为地址的存储器单元内容,即(X)作地址,该地址 单元的内容用((X))表示。
    16. $:当前指令的地址
    17. / :对该位操作数取反,但不影响该位的原值
    18. →:表示操作流程,将箭尾一方的内容送入箭头所指的另一方单元中

    3. 寻址方式

    3.1 MCS-51单片机寻址方式——立即寻址

    • 定义:指操作数包括在指令字节中,紧跟在操作码的后面,作为指令的一 部分与操作码一起存放在程序存储器中,可以立即得到并执行,不需要经 过别的途径去寻找,故称为立即寻址。
    • 汇编指令中,在一个数的前面冠以"#"符号作为前缀,就表示该操作数为立即数。
    • 【例】==MOV A, #52H ;A←52H ==
      • MOV DPTR, #5678H ;DPTR←5678H
    • 在这里插入图片描述

    3.2 寻址方式——寄存器寻址

    • 定义:指令指定寄存器的名字,寄存器的内容为操作数
      • 【例】MOV A, R0 ;A← (R0)
      • 该指令的功能是把源寄存器R0中的内容传送到累加器A中,如R0中的 内容为30H,则执行该指令后A的内容也为30H。
      • 可用于寄存器寻址的寄存器有: • 四组工作寄存器R0~R7共32个,但每次只能使用当前寄存器组中的8 个。
      • 部分特殊功能寄存器A、B、DPTR等。

    3.3 寻址方式——寄存器间接寻址

    • 规定如下:
      • 片内基本RAM的低128B、高128B,间接用Ri,即@R1, @R0
      • 片外RAM(64KB):间接用DPTR,即@DPTR
      • 片外扩展RAM:若小于256B,可用@DPTR或@R1, @R0,若大于256字 节,间接用DPTR,即@DPTR
      • 注意:寄存器间接寻址方式不能用于对特殊功能寄存器SFR的寻址
      • 【例】MOV DPTR, #3456H ;DPTR ←3456H
        MOVX A, @DPTR ;A ←((DPTR))
      • 是把DPTR寄存器的作为地址单元,从这个地址单元中取出内容传送给A, 假设(3456H)=99H,指令运行后(A)=99H。

    3.4 寻址方式——直接寻址

    • 指令中直接给出操作数的存储器地址,操作数在存储器中。
    • 【例】MOV A, 52H ;A←(52H)
    • 在这里插入图片描述
      指令中52H为操作数的存储器地址
      该指令的功能是把片内RAM地址为52H单元的内容送到A中,A的地址是E0H
      该指令的机器码为E5H 52H。

    3.5 寻址方式——变址寻址

    变址寻址指令具有以下三个特点:

    1. 指令操作码内隐含有作为基地址寄存器用的数据指针DPTR或程序计数器PC,其中DPTR或PC中应预先存放有操作数的相应基地址。
    2. 指令操作码内也含有累加器A,累加器A中应预先存放有被寻址操作数地址对基地址的偏移量,该地址偏移量应是一个00H~0FFH范围内的无符号数。
    3. 在执行变址寻址指令时,单片机先把基地址和地址偏移量相加,以形成操作数的有效地址。
    • MCS-51单片机共有三条变址指令

    • MOVC A, @A+PC ;A←((A)+(PC))

    • MOVC A, @A+DPTR ;A←((A)+(DPTR))

    • JMP @A+DPTR ;PC←(A)+(DPTR)

    • 前两条指令是在程序存储器中取操作数

    • 第三条指令是要获得程序的跳转地址,实现程序的转移。

    • 【例】MOV A, #22H

    • MOV DPTR, #63A0H

    • MOV A, @A+DPTR ;A←((A)+(DPTR))

    • 在这里插入图片描述

    3.6 寻址方式——相对寻址

    • 相对寻址以程序计数器PC的当前值作为基地址,与指令中给出的相对偏移量rel进行相加,把所得之和作为程序的转移地址。
    • 使用时注意以下两点
    1. ==当前PC值是指相对转移指令的存储地址加上该指令的字节数 ==
      【例】JZ rel 是一条累加器A为零就转移的双字节指令。**若该指令的存储地址为2050H,则执行该指令时的当前PC值即为2052H。**即当前PC值是相对转移指令取指结束时的值。
    2. 偏移量rel是有符号的单字节数,以补码表示,其取值范围是-128~+127 (00H~FFH)。**负数表示从当前地址向地址小的方向转移,正数表示从当前地址向地址大的方向转移。**所以,相对转移指令满足条件后,转移的目标地址为:
      目标地址 = 当前PC值 + rel = 指令存储地址 + 指令字节数 + rel
      【例】SJMP 08H ;PC←PC+2+08H
      • 这是一条转移指令,设PC当前值=2000H,PC+2=2002H因此程序转向(PC)+2+rel=2000H+2+08H =200AH单元。
      在这里插入图片描述

    3.7 寻址方式——位寻址

    为了使程序设计方便,MCS-51指令系统提供了多种位地址的表示方式,可归纳为4种形式:

    1. 直接使用位地址
      【例】MOV C, 0D5H ;将PSW的位5(位地址D5H)的状态送进位标志位。
    2. 单元地址加位序号的形式
      【例】MOV C, 0D0H.5 ;将PSW(单元地址0D0H)的位5(位地址D5H)的状态送进位标志位。
    3. 特殊功能寄存器符号加位序号的形式
      【例】MOV C, PSW.5 ;将PSW的位5的状态送进位标志位。
    4. 位名称表示形式
      【例】MOV C, F0 ;将PSW的位5(位地址D5H、位名称为F0)的状态送进位标志位。

    3.8 寻址方式总结

    • 寻址方式与寻址空间的关系
      在这里插入图片描述
    • 寻址方式与存储空间的关系
      在这里插入图片描述

    4. 数据传送类指令

    • 数据传送类指令用到的助记符有:MOV,MOVX,MOVC,XCH, XCHD,PUSH,POP,SWAP
    • 一般格式:MOV [目的操作数], [源操作数]
    • 一般功能:目的操作数 ← 源操作数中的数据
    • 源操作数可以是:A、Rn、direct、@Ri、#data
    • 目的操作数可以是:A、Rn、direct、@Ri
    • 数据传送指令一般不影响标志,只有一种堆栈操作可能直接修改程序状态 字PSW。
    • 如果目的操作数为ACC,将会影响奇偶标志P。

    4.1 以累加器A为目的操作数的传送指令(4条)

    • 功能:把源操作数送到累加器A
    • 有直接、立即数、寄存器和寄存器间接寻址方式
      在这里插入图片描述
      【例】 设外部RAM(2023H)=0FH,执行以下程序段:
      MOV DPTR, #2023H ;DPTR←2023H
      MOVX A, @DPTR ;A←((DPTR))
      MOV 30H, A ;30H←(A)
      MOV A, #00H ;A←00H
      MOVX @DPTR, A 😭(DPTR))←(A)DPTR所指向的内容赋予00H
      程序段执行后,(DPTR)=2023H,(30H)=0FH, (A)=00H,(2023H)=00H,表示把片外RAM 2023H单元的内容0FH送到内部RAM的30H单 元,然后把外部RAM 2023H单元和累加器A清0。

    4.2 以寄存器Rn为目的操作数的传送指令(3条)

    • 功能:把源操作数送到所选定的工作寄存器Rn中
    • 有直接、立即数和寄存器寻址方式
    • 注意:没有
    • MOV Rn, Rn;
    • MOV Rn, @Ri;
    • MOV @Ri, Rn
      在这里插入图片描述
      【例】设内部RAM(30H)=40H,(40H)=10H,(10H)=00H,(P1)=0CAH,分析以下程序执行后,各单元、寄存器、P2口的内容。
      MOV R0, #30H ;R0←30H
      MOV A, @R0 ;A←((R0))
      MOV R1, A ;R1←(A)
      MOV B, @R1 ;B←((R1))
      MOV @R1, P1 😭(R1))←(P1)
      MOV P2, P1 ;P2←(P1)
      MOV 10H, #20H ;10H←20H
      执行上述指令后,(R0)=30H;(R1)=(A)=40H;(B)=10H; (40H)=(P1)=(P2)=0CAH;(10H)=20H。

    4.3 以直接地址为目的操作数的传送指令(5条) 

    • 功能:把源操作数送到由直接地址direct所选定的片内RAM中 
    • 有直接、立即、寄存器和寄存器间接4种寻址方式 
    • 注意:MOV direct1, direct2,翻译成机器码时,源地址在前,目的地址在后。;一般格式:MOV [目的操作数], [源操作数]
      在这里插入图片描述

    4.4 以间接地址为目的操作数的传送指令(3条) 

    • 功能:把源操作数送到以Ri中的内容为地址的片内RAM中 
    • 有直接、立即和寄存器3种寻址方式
      在这里插入图片描述

    4.5 查表指令(2条) 

    • 功能:对存放于程序存储器中的数据表格进行查找传送 
    • 使用变址寻址方式
      在这里插入图片描述
      【例】编一查表程序,将内部RAM40H单元内的数(0~9)的平方存入内 部RAM50H单元。先作一个0~9的平方表,存入TAB中。然后用查表指令 实现上述功能。
      MOV A, 40H ;40H单元的数送A
      MOV DPTR, #TAB ;DP
      MOVC A, @A+DPTR ;查表
      MOV 50H, A ;查表得到的平方值,存50HTR指向表头
      SJMP $ ;等待
      TAB: 0, 1, 4, 9, ……81

    4.6 累加器A与片外数据存储器的传送指令(4条) 

    • 这4条指令的功能是实现累加器A与片外RAM间的数据传送。使用寄存器寻址方式
      在这里插入图片描述

    4.7 堆栈操作指令(2条) 

    • 堆栈操作有进栈和出栈,即可以压入和弹出数据,常用于保存或恢复现场。 
    • 进栈指令:保存片内RAM单元(低128字节)或特殊功能寄存器SFR的内容 
    • 出栈指令:恢复片内RAM单元(低128字节)或特殊功能寄存器SFR的内容
      在这里插入图片描述
    • 单片机开机复位后,(SP)默认为07H,但一般都需要重新赋值,设置新的 SP首址。
    • 入栈的第一个数据必须存放于SP+1所指存储单元,故实际的堆栈底为SP 初值+1所指的存储单元。
    • 注意:对于累加器来说,在堆栈指令中只能用ACC,不能用A,属于直接寻址。
      【例】进入中断服务程序时,常把程序状态寄存器PSW、累加器A、数据指针DPTR进栈保护。
      设当前SP为60H。则程序段
      MOV SP, #60H
      PUSH PSW
      PUSH ACC
      PUSH DPL
      PUSH DPH
      执行后,SP内容修改为64H,而61H、 62H、63H、64H单元中依次存入 PSW、A、DPL、DPH的内容。
      在中断服务程序结束之前,用下列程序 段恢复数据。
      POP DPH
      POP DPL
      POP ACC
      POP PSW
      指令执行之后,SP内容修改为60H, 而64H、63H、62、61H单元的内容依次弹出到DPH、DPL、A、PSW中。
      保护数据时,进栈、出栈的次序一定要符合“先进后出”的原则。

    4.8 交换指令(5条)

    在这里插入图片描述
    在这里插入图片描述

    • 这条指令的功能是把16位常数送入数据指针寄存器。这也是唯一一条16 位数据传送指令。
    • 【例】设(R0)=30H,(A)=65H,(30H)=8FH,执行指令:
    • XCH A, @R0 ;(R0)=30H,(A)=8FH,(30H)=65H
    • XCHD A, @R0 ;(R0)=30H,(A)=6FH,(30H)=85H
    • SWAP A ;(A)=56H

    4.9 16位数据传送指令(1条)

    【例】将片内RAM30H单元与40H单元中的内容互换。

    • 方法1(直接地址传送法)
    • MOV 31H, 30H
    • MOV 30H, 40H
    • MOV 40H, 31H
    • SJMP $

    • 方法2(间接地址传送法)
    • MOV R0, #40H
    • MOV R1, #30H
    • MOV A, @R0
    • MOV B , @R1
    • MOV @R1, A
    • MOV @R0, B
    • SJMP $

    • 方法3(字节交换传送法)
    • MOV A, 30H
    • XCH A, 40H
    • MOV 30H, A
    • SJMP $

    • 方法4(堆栈传送法)
    • PUSH 30H
    • PUSH 40H
    • POP 30H
    • POP 40H
    • SJMP $

    5 算术运算类指令 

    • 算术运算指令共有24条 
    • 算术运算主要是执行加、减、乘、除法四则运算 
    • MCS-51指令系统中还有加1、减1操作及BCD码的运算调整 
    • 虽然MCS-51单片机的算术逻辑单元ALU仅能对8位无符号整数进行运算, 但利用进位标志C,则可进行多字节无符号整数的运算。同时利用溢出标志,还可以对带符号数进行补码运算。
    • 需要指出的是,除加1、减1指令外,这类指令一般都会对PSW有影响

    5.1 加法指令(4条)

    这4条指令的功能是把立即数,直接地址、工作寄存器及间接地址内容与累加器A中的内容相加,运算结果存在A中。
    在这里插入图片描述

    • 各标志位的形成方法 
    • 如果位7有进位输出,则置位进位标志CY,否则清CY; 
    • 如果位3有进位输出,则置位半进位标志AC,否则清AC; 
    • 如果位6有进位输出而位7没有,或者位7有进位输出而位6没有,则置位溢出标志OV,否则清OV,即OV=CY7⊕CY6。 
    • 若累加器A中1的个数为奇数,则P=1,否则,P=0。
    • 对于加法,溢出只能发生在两个加数符号相同的情况。在进行带符号数的加法运算时,溢出标志OV=1表示有溢出发生(即和大于+127或小于 ~128)。
    • 【例】设(A)=85H,(R1)=30H,(30H)=0AFH,执行指令:
    • ADD A,@R1
    • 1000 0101
      + 1010 1111
      1 0011 0100
      执行结果为:(A)=34H, CY=1, AC=1, OV=1, P=1

    5.2 带进位加法指令(4条)

    在这里插入图片描述

    5.3 带借位减法指令(4条)

    在这里插入图片描述

    • 在进行减法运算中,CY=1表示有借位,CY=0则无借位。

    • OV=1表明带符号数相减时,从一个正数减去一个负数结果为负数,或者 从一个负数中减去一个正数结果为正数的错误情况。

    • 在进行减法运算前,如果不知道借位标志位C的状态,则应先对CY进行清零操作。

    • 如果要进行不带借位减法,只需把CY先清零。

    • 【例】设(A)=0C9H, (R3)=54H, (CY)=1, 执行指令:SUBB A, R3
      1100 1001
      -0000 0001

      1100 1000

    • 0101 0100
      0111 0100
      结果:(A)=74H, Cy=0, AC=0, OV=1, P=0

    5.4 乘法指令(1条)

    在这里插入图片描述
    在乘法运算时,如果OV=1,说明乘积大于FFH,否则OV=0,但进位标志位CY总是等于0。
    【例】若(A)=80H=128, (B)=32H=50,执行指令: MUL AB
    结果:(B)=19H, (A)=00H, OV=1, CY=0

    5.5 除法指令(1条)

    在这里插入图片描述

    • 除法运算总是使进位标志位CY等于0
    • 如果OV=1,表明寄存器B中的内容为00H,那么执行结果为不确定值, 表示除法有溢出。
    • 【例】设(A)=0BFH,(B)=32H,执行指令: DIV AB
      结果: (A)=03H, (B)=29H, CY=0, OV=0

    5.5 除法指令(1条)

    在这里插入图片描述

    • 除法运算总是使进位标志位CY等于0
    • 如果OV=1,表明寄存器B中的内容为00H,那么执行结果为不确定值, 表示除法有溢出。
    • 【例】设(A)=0BFH,(B)=32H,
    • 执行指令: DIV AB
    • 结果: (A)=03H, (B)=29H, CY=0, OV=0

    5.6 加1指令(5条)

    在这里插入图片描述

    • 在INC direct指令中,如果直接地址是I/O口,其功能是先读入I/O锁存器的内容,然后在CPU进行加1操作,再输出到I/O口中,这就是“读— 修改—写”操作。
    • 加1指令不影响标志。如果原寄存器的内容为FFH,执行加1后,结果就会 是00H。但不会影响标志。

    5.7 减1指令(4条)

    在这里插入图片描述
    减1操作也不影响标志。若原寄存器的内容为00H,减1后为FFH,运算结 果不影响任何标志位。当直接地址是I/O口时,实现“读—修改—写” 操作。

    5.8 十进制调整指令(1条)

    在这里插入图片描述

    • 在进行BCD码运算时,这条指令总是跟在ADD或ADDC指令之后,其功能是对执行加法运算后存于累加器A中的结果进行调整。
    • 注意:只能用于加法运算
    • 【例】有两个BCD数36与45相加,结果应为BCD码81,程序如下:
    • MOV A, #36H
    • ADD A, #45H
    • DA A
      加法指令执行后得结果7BH;
      第三条指令对累加器A中的结构进行十进制调整,低4位(为0BH)大于9,因此要加6,最后得到调整的BCD码为81。

    6 逻辑操作指令

    6.1 清零指令(1条)

    在这里插入图片描述

    6.2 求反指令(1条)

    在这里插入图片描述

    6.3 循环移位指令(4条)

    在这里插入图片描述
    【例】
    MOV A, #04H ;(A)=04
    RL A ; (A)=08
    RR A ;(A)=04
    • 逻辑左移一位相当于乘2,逻辑右移一位相当于除2。

    6.4 逻辑与操作指令(6条)

    在这里插入图片描述

    6.4 逻辑或操作指令(6条)

    在这里插入图片描述

    6.5 逻辑异或操作指令(6条)

    在这里插入图片描述
    【例】利用逻辑运算指令,可以模拟各种硬件逻辑电路。
    如下图所示的组合逻辑电路,试编写一程序模拟其功能。设输入信号放在X、Y、Z单元中, 输出信号放在F单元。
    在这里插入图片描述
    • 参考程序如下:
    MOV A, X ;A ← (X)
    ANL A, Y ;A ← (A) ∧ (Y)
    MOV R1, A ;A内容暂存
    MOV A, Y ;A ← (Y)
    XRL A, Z ;A ← (Y) ⊕ (Z)
    CPL A ;A ← (Y) ⊕ (Z)
    ORL A, R1 ;得到输出
    MOV F, A ;存输出
    SJMP $

    7 控制转移类指令

    7.1无条件转移指令(4条)

    在这里插入图片描述

    7.2 条件转移指令(8条)

    在这里插入图片描述
    在这里插入图片描述
    【例】将外部数据RAM中的一个数据块传送到内部数据RAM中,两者的首地址分别为 DATA1和TATA2,遇到传送的数据为0时停止。
    解:外部RAM向内部RAM的数据传送一定要借助于累加器A,利用累加器判零转移指令正好可以判别是否要继续传送或者终止。
    MOV DPTR, #DATA1
    MOV R1, #DATA2
    LOOP: MOVX A, @DPTR HERE: JZ HERE
    MOV @R1, A INC DPTR
    INC R1 SJMP LOOP
    ;外部数据块首地址 ;内部数据块首地址 ;外部数据送给A ;为0则终止
    ;不为0传送内部RAM数据 ;修改地址指针 ;继续循环

    7.2 条件转移指令(8条)

    【例】将外部数据RAM中的一个数据块传送到内部数据RAM中,两者的首地址分别为 DATA1和TATA2,遇到传送的数据为0时停止。

    第5章MCS - 51单片机的中断

    5.1 中断的概述

    5.1.1. 中断

    中断是指计算机在执行某一程序的过程中, 由于计算机系统内、外的某种原因, 而必须中止原程序的执行, 转去执行相应的处理程序, 待处理结束之后, 再回来继续执行被中止的原程序的过程。采用了中断技术后的计算机, 可以解决CPU与外设之间速度匹配的问题, 使计算机可以及时处理系统中许多随机的参数和信息, 同时, 它也提高了计算机处理故障与应变的能力。

    5.1.2. 中断源

    中断源是指在计算机系统中向CPU发出中断请求的来源, 中断可以人为设定, 也可以是为响应突发性随机事件而 设置。通常有I/O设备、实时控制系统中的随机参数和信息 故障源等。

    5.1.3. 中断优先级

    中断优先级越高, 则响应优先权就越高。当CPU正在执行中断服务程序时, 又有中断优先级更高的中断申请产生, 这时CPU就会暂停当前的中断服务转而处理高级中断申请, 待高级中断处理程序完毕再返回原中断程序断点处继续执行, 这一过程称为中断嵌套。

    5.1.4. 中断响应的过程

    (1) 在每条指令结束后, 系统都自动检测中断请求信号, 如果有中断请求,且CPU处于开中断状态下, 则响应中断。
    (2) 保护现场, 在保护现场前, 一般要关中断, 以防止现场被破坏。保护现场一般是用堆栈指令将原程序中用到的寄存器推入堆栈。
    (3) 中断服务, 即为相应的中断源服务。
    (4) 恢复现场, 用堆栈指令将保护在堆栈中的数据弹出来, 在 恢复现场前要关中断, 以防止现场被破坏。在恢复现场后应及时开中断。
    (5) 返回, 此时 CPU将推入到堆栈的断点地址弹回到程序计数器, 从而使CPU继续执行刚才被中断的程序。

    5.2 MCS - 51中断系统

    图 MCS - 51中断系统结构框图👇
    在这里插入图片描述
    在INT0或INT1口输入一个信号(低电平或下降沿),就可以使单片机临时停下正在执行的程序,转去执行预先编内好、另外的程序。
    INT0:外部中断0触发方式控制位,1表示边沿触发,0表示电平触发;
    EX0:外部中断0允许位,1表示允许外部中断0的中断申请;
    ET0:定时/计数器0中断允许位,1表示允许定时/计数器0的溢出中断;
    IE0:外部中断0中断申请标志位,1表示有中断申请。
    IT0设置触发中断的方法:单片机中IT0=1——下降沿触发(边缘触发方法),IT0=0——低电平触发(电平触发方法)
    EA是总中断,开启总中断时只要用SETB EA将EA置1就行了。
    Px0=1高优先级中断;px0=0低优先级中断

    5.2.1 中断源

    表 8051 中断源
    在这里插入图片描述

    1. 特殊功能寄存器TCON中的标志👇在这里插入图片描述

    2. 特殊功能寄存器SCON
      在这里插入图片描述

    5.2.2 中断控制

    1. 中断允许控制 MCS - 51单片机有 5个(8052有 6个)中断源, 为了使每个中断源都能独立地被允许或禁止, 以便用户能灵活使用, 它在每个中断信号的通道中设置了一个中断屏蔽触发器。 只有该触发器无效, 它所对应的中断请求信号才能进入CPU, 即此类型中断开放。 否则, 即使其对应的中断标志位置 1, CPU也不会响应中断, 即此类型中断被屏蔽了。同时CPU内还设置了一个中断允许触发器, 它控制CPU能否响应中断。
      在这里插入图片描述
    2. 中断优先级
      在这里插入图片描述
      表 5.2 同级内第二优先级次序👇
      在这里插入图片描述
      例如, 某软件中对寄存器IE、 IP设置如下:
      MOV IE, # 8FH
      MOV IP, # 06H
      则此时该系统中:
    • CPU中断允许;
    • 允许外部中断 0、外部中断 1、定时器 /计数器 0、
    • 定时器 /计数器1提出的中断申请;
    • 允许中断源的中断优先次序为: 定时器 /计数器 0>外部中断 1>外部中断 0>定时器/计数器 1。

    5.2.3 中断响应

    1. 中断响应的条件
      (1)同级或高优先级的中断已在进行中;
      (2)当前的机器周期还不是正在执行指令的最后一个机器周期(换言之, 正在执行的指令完成前, 任何中断请求都得不到响应);
      (3)正在执行的是一条 RETI或者访问特殊功能寄存器IE或 IP的指令(换言之, 在 RETI或读写 IE或 IP之后, 不会马上响应中断请求, 而至少执行一条其它指令之后才会响应)。
      2.中断响应请求
      单片机一旦响应中断请求, 就由硬件完成以下功能:
      (1)根据响应的中断源的中断优先级, 使相应的优先级状态触发器置 1;
      (2)执行硬件中断服务子程序调用, 并把当前程序计数器PC的内容压入堆栈;
      (3)清除相应的中断请求标志位(串行口中断请求标志 RI和 TI除外);
      (4)把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC, 从而转入相应的中断服务程序。
      表 中断服务程序入口地址表👇
      在这里插入图片描述
      例如, 现有外部中断 1 提出申请, 且主程序中有R0、 R1、
      DPTR、累加器A需保护, 则编制程序应为:
      ORG 0000H
      AJMP MAIN
      ORG 0013H
      LJMP INT1 …
      ORG 0100H
      MAIN: …; 主程序 …
      ORG 1000H

    INT1:
    PUSH ACC ; 中断服务程序
    PUSH DPH
    PUSH DPL
    PUSH 0
    PUSH 1

    POP 1
    POP 0
    POP DPL
    POP DPH
    POP ACC
    RETI

    编程中应注意:
    (1) 在 0000H放一条跳转到主程序的跳转指令, 这是因为MCS-51单片机复位后, PC的内容变为 0000H, 程序从 0000H 开始执行, 紧接着 0003H是中断程序入口地址, 故在此中间只能 插入一条转移指令;
    (2) 响应中断时, 先自动执行一条隐指令“LCALL 0013H”, 而 0013H至 001BH(定时器 1 溢出中断入口地址)之间可利用的存储单元不够, 故放一条无条件转移指令。
    (3) 在中断服务程序的末尾, 必须安排一条中断返回指令RETI, 使程序自动返回主程序。

    5.3 中断系统的应用

    5.3 中断系统的应用
    例 1 单步操作的中断实现。 把一个外部中断(设为INT0])设置为电平激活方式。
    其中断服务程序的末尾写上如下几条指令:
    JNB P3.2, $ ; 在INT0变高前原地等待(死循环)
    JB P3.2, $; 在 INT0变低前原地等待(死循环)
    RETI; 返回并执行一条指令

    现在,若INT0保持低电平, 且允许INT0中断, 则CPU就进入外部中断 0 服务程序, 由于有上述几条指令, 它就会停在 JNB 处, 原地等待。当INT0 端出现一个正脉冲(由低到高, 再到低)时, 程序就会往下执行, 执行RETI后, 将返回主程序, 往下执行一条指令, 然后又立即响应中断,以等待INT0端出现的下一个正脉冲。 这样在INT0端每出现一个正脉冲, 主程序就执行一条指令, 实现了单步执行的目的, 要注意的是, 这个正脉冲的高电平持续时间不小于 3个周期, 以确保CPU能采集到高电平值。

    例 2 多中断源。
    MCS - 51 单片机有两个外部中断输入端, 当有 2 个以上中断源时, 它的中断输入端就不够了。此时, 可以采用中断与查询相结合的方法来实现。 可以使每个中断源都接在同一 个外部中断输入端上, 同时利用输入口线作为多中断源情况 下各中断源的识别线。
    在这里插入图片描述
    ORG 0003H
    LJMP INT0 …
    INT0:
    PUSH PSW
    PUSH ACC
    JB P0.7, DV1
    JB P0.6, DV2
    JB P0.5, DV3
    JB P0.4, DV4
    GOBACK:
    POP ACC
    POP PSW
    RETI
    DV1: … ; 装置1中断服务程序


    开关S1和S2分别接至INT0和INT1,
    初始时LED指示灯L1和L2熄灭,
    当S1按下S2断开,L1亮,L2灭;
    当S2按下S1断开,L2亮,L1灭。
    用中断方式实现。编写程序

    ORG 0000H
    AJMP MAIN

    ORG 0003H
    LJMP INT0
    ORG 0013H
    LJMP INT1

    MAIN:
    MOV IE,#85H;让EX0,EX1为1,启动中断
    SETB P0.0
    SETB P0.1

    INT0:
    MOV SP,#50H
    JMP SAVE
    CLR P0.0
    SETB P0.1
    JMP BACK
    RET1

    INT1:
    MOV SP,#70H
    JMP SAVE
    CLR P0.1
    SETB P0.0
    JMP BACK
    RET1

    SAVE:
    SETB RS0;对Ri存储区的保护
    SETB RS1
    PUSH ACC
    PUSH DPH;对DPTR的保护
    PUSH DLH
    PUSH B

    BACK:
    CLR RS0
    CLR RS1
    POP B
    POP DLH
    POP DPH
    POP ACC
    POP PSW

    END


    第6章 MCS - 51单片机内部定时器/ 计数器及串行接口

    6.1 定时器/计数器的结构及工作原理

    6.1 定时器/计数器的结构及工作原理

    图 6.1 定时器/计数器结构框图
    在这里插入图片描述
    加法计数器是计满溢出时才申请中断, 所以在给计数器赋初值时, 不能直接输入所需的计数值, 而应输入的是计数 器计数的最大值与这一计数值的差值, 设最大值为 M, 计数 值为 N, 初值为 X, 则 X的计算方法如下:
    计数状态: X=M-N <计数外部给的信号>
    定时状态: X=M-定时时间/T <内部时钟信号>
    而T=12÷晶振频<常选晶振频率11.0592Mhz>

    6.2 方式和控制寄存器

    一、定时器/计数器的方式寄存器TMOD

    图 6.2 TMOD各位定义
    在这里插入图片描述

    1. M1M0工作方式控制位

    表 6.1 工作方式选择表
    在这里插入图片描述

    2. C/T定时器方式或计数器方式选择位

    若C/T=1时, 为计数器方式; C/T = 0时, 为定时器方式。

    3. GATE 定时器/计数器运行门控标志位

    当GATE=1时, 只有INT0 (或INT1)引脚为高电平且TR0(或TR1 )置 1 时, 相应的定时器 /计数器才被选通工作, 这时可用于测量在INTx端出现的正脉冲的宽度。若GATE=0, 则只要 TR0 (或 TR1)置 1, 定时器 /计数器就被选通, 而不管 INT0 (或 INT1)的电平是高还是低

    二、定时器/计数器控制寄存器TCON

    TF0、TF1分别是定时器/计数器T0、 T1 的溢出标志位, 加法计数器计满溢出时置 1, 申请中断, 在中断响应后自动复 0。
    TF产生的中断申请是否被接受, 还需要由中断是否开放来决定。
    TR1、TR0 分别是定时器 /计数器T1、 T0 的运行控制位,通过软件置 1 后, 定时器 /计数器才开始工作, 在系统复位时被清 0。

    6.3 工作方式

    一、方式 0

    图 6.4 方式 1(16位计数器)
    在这里插入图片描述

    二、方式 1

    图 6.4 方式 1(16位计数器)
    在这里插入图片描述

    三、方式 2

    图 6.5 方式 2(初始常数自动重装载)
    在这里插入图片描述
    另一个八位置有初值,自动重新装载

    四、方式 3

    图 6.6 方式 3(两个 8 位独立计数器)
    在这里插入图片描述
    T1去串行口相关工作位置

    6.4 定时器/计数器应用举例

    一、方式 0 的应用例 1 利用定时器输出周期为 2 ms的方波, 设单片机晶振频率为 6 MHz。

    选用定时器 /计数器T0 作定时器, 输出为P1.0 引脚, 2 ms 的方波可由间隔 1 ms的高低电平相间而成, 因而只要每隔 1 ms对 P1.0 取反一次即可得到这个方波。
    定时 1 ms的初值:
    因为机器周期=12÷6 MHz= 2 μs
    所以 1 ms内T0需要计数N次: N= 1 ms÷2 μs = 500

    6.5 MCS - 51单片机的串行接口

    6.6 串行口的应用

    5. 算数运算类指令

    6. 逻辑操作类指令

    7. 控制转移类指令

    8. 位操作类指令

    第三章 第一个单片机系统

    • 如何控制一个发光二极管——闪烁 500ms

    发光二极管电路图
    电路描述1

    展开全文
  • 单片机知识

    2021-01-04 20:44:11
    CC2530单片机知识总结 ** 学习单元1 开发入门 单片机也叫微控制器,是一种集成电路芯片。 单片机的特点: 1.体积小,重量清 2.结构简单,可靠性高 3.工作电压低,功耗低 4.价格低廉,性价比高 单片机的分类: 1.按...

    **

    CC2530单片机知识总结

    **

    学习单元1 开发入门
    单片机也叫微控制器,是一种集成电路芯片。
    单片机的特点:
    1.体积小,重量清
    2.结构简单,可靠性高
    3.工作电压低,功耗低
    4.价格低廉,性价比高
    单片机的分类:
    1.按用途分类 通用型和专用型
    2.按数据处理位数进行分类 8位 16位 32位
    单片机的内部结构
    1.时钟电路 2.中央处理器 3.只读存储器ROM 4.随机存储器RAM
    5.中断系统 6.并行I/O端口 7.定时计数器 8.串行接口
    单片机的运行条件
    硬件条件 软件条件
    CC2530单片机的外设
    21个通用I/O引脚
    内存控制器
    具有5个通道的DMA控制器
    4个定时器
    1个睡眠定时器
    两个串行通信接口
    8通道12位ADC
    1个随机数发生器
    1个看门狗定时器
    AES安全协处理器
    RS-232 RS-422 RS-485
    SPI串行外设接口 I2C内置集成电路
    CAN 控制器局域网
    电平信号 TTL电平 CMOS电平 RS-232电平 USB电平
    注意电气特性
    双绞线 同轴电缆 光纤
    差分电压传送 隐性电平 显性电平

    学习单元二 并行I/O端口应用

    1.40个引脚
    引脚类型 包含引脚 功能介绍
    电源类引脚 AVDD1-AVDD6 DVDD1-DVDD2
    GND DCOUPL 为芯片供电
    数字I/O引脚 P0_0—P0_7,P1_0—P1_7
    P2_0—P2_4 数字信号输入/输出
    时钟引脚 XOSC_Q1 XOSC_Q2 时钟信号输入
    复位引脚 RESET_N 让芯片复位
    RF引脚 RF_N,RF_P 外接无线收发天线
    其他引脚 RBIAS 外接偏执电阻
    2.CC2530的I/O引脚
    21个数字引脚,组成3个8位端口,端口0,端口1,端口2
    通常为P0 P1 P2其中P0和P1是8位端口,P2仅有5位。
    (1)可配置为通用I/O端口
    (2)可配置为外部设备I/O端口
    (3)输入口具备3种输入模式
    上拉,下拉,三态
    (4)具有外部中断能力

    3.I/O端口的相关寄存器
    与CC2530的I/O端口有关的主要特殊功能寄存器
    名称 功能描述
    Px 端口数据,用来控制端口的输出或获取端口的输入
    PERCFG 外设控制,用来选择外设功能在I/O端口上的位置
    APCFG 模拟外设I/O配置。用来配置P0都作为模拟I/O端口
    使用
    PxSEL 端口功能选择,用来设置端口是通用I/O还是外设I/O
    PxDIR 端口方向,当端口为通用I/O端时,用来设置数据传输方向
    PxINP 端口输入模式,当端口为通用输入口时,用来选择输入模式
    PxIFG 端口中断状态标志,使用外部中断时,用来表示是否有中断
    PICTL 端口中断控制,使用外部中断时,用来配置端口中断触发类型
    PxIEN 端口中断屏蔽,用来选择是否使用外部中断功能
    PMUX 掉电信号,用来输出32KHZ时钟信号或内部数字稳压状态
    寄存器位操作约定
    符号 访问模式
    R/W 可读取也可输入
    R 只能读取
    R0 读出的值始终为零
    R1 读出的值始终为1
    W 只能写入
    W0 写入任何值都变为零
    W1 写入任何值都变为1
    H0 硬件自动将其变成0
    H1 硬件自动将其变成1
    CC2530的I/O端口除P1_0和P1_1端口有20mA的驱动能力外,其他I/O端口只有4mA的驱动能力,在应用中从I/O端口流入或流出的电流不能超过这些限定值。
    #define LED1 (P1_0)
    #define LED2 (P1_1) //LED1端口宏定义
    单片机的i/o端口经常会接触到上拉,下拉和三态
    1.上拉和下拉
    上拉是指单片机的引脚通过一个电阻连接到电源(高电平),当外界没有信号输入到引脚时,引脚被上拉电阻固定在高电平(逻辑值为1)
    下拉是指单片机的引脚通过一个电阻连接到地(低电平),当外界没有信号输入到引脚时,引脚被下拉电阻固定在低电平(逻辑值为0)
    2.三态
    三态也叫高阻,上拉电源下接地,降低单片机的功耗。
    P1_0和P1_1端口没有上拉和下拉功能,只能工作在三态模式下。
    按键消抖
    硬件消抖:是通过电路硬件设计的方法来过滤按键输出信号,将抖动信号过滤成理想信号后传输给单片机。
    软件消抖:是通过程序过滤的方法,在程序中检测到按键动作后,延时一会后再次检测按键状态,如果延时前后按键的状态一致,则说明按键正常执行动作,否则认为是按键抖动。
    设置I/O端口的输入模式需要使用PxINP寄存器

    学习单元3 外部中断应用
    采用中断后,可以给计算机带来的好处
    (1)实现分时操作
    (2)实现实时处理
    (3)实现异常处理
    中断系统中的相关概念
    主程序 中断源 中断请求 断点 中断服务函数 中断向量
    中断嵌套和中断优先级
    CC2530中断系统
    (1)CC2530的中断源
    CC2530具有18个中断源
    中断
    号 中断
    名称 描述 中断
    向量
    0 RFERR RF发送完成或接收完成 03H
    1 ADC ADC转换结束 0BH
    2 URX0 USART0接收完成 13H
    3 URX1 USART1接收完成 1BH
    4 ENC AES加密/解密完成 23H
    5 ST 睡眠计时器比较 2BH
    6 P2INT I/O端口2外部中断 33H
    7 UTX0 USART0发送完成 3BH
    8 DMA DMA传输完成 43H
    9 T1 定时器1捕获/比较/溢出 4BH
    10 T2 定时器2中断 53H
    11 T3 定时器3捕获/比较/溢出 5BH
    12 T4 定时器4捕获/比较/溢出 63H
    13 P0INT I/O端口0外部中断 6BH
    14 UTX1 USART1发送完成 73H
    15 P1INT I/O端口1外部中断 7BH
    16 RF RF通用中断 83H
    17 WDT 看门狗计时溢出 8BH
    (2)CC2530中断源的优先级
    CC2530将18个中断源划分为6个中断优先级组IPG0~IPG5
    CC2530中断源优先级分组-
    组 中断源
    IPG0 RFERR RF DMA
    IPG1 ADC T1 P2INT
    IPG2 URX0 T2 UTX0
    IPG3 URX1 T3 UTX1
    IPG4 ENC T4 P1INT
    IPG5 ST P0INT WDT
    六个中断优先级可以分别被设置成0~3级,即由用户指定中断优先级,其中0级属于最低优先级,3级为最高优先级
    1.如果多个组被设置成相同级别,则组号小的要比组号大的优先级高。
    2.同一组中所包含的3个中断源,最左侧的优先级最高,最右侧的优先级低。
    优先级设置
    IP1_X IP0_X 优先级
    0 0 0-最低级别
    0 1 1
    1 0 2
    1 1 3-最高级别
    IEN1寄存器
    位 位名称 复位值 操作
    7:6 – 00 R0
    5 P0IE 0 R/W
    4 T4IE 0 R/W
    3 T3IE 0 R/W
    2 T2IE 0 R/W
    1 T1IE 0 R/W
    0 DMAIE 0 R/W

    描述
    不使用读为0
    端口0中断使能 0:中断禁止 1:中断使能
    定时器4中断使能 0:中断禁止 1:中断使能
    定时器3中断使能 0:中断禁止 1:中断使能
    定时器2中断使能 0:中断禁止 1:中断使能
    定时器1中断使能 0:中断禁止 1:中断使能
    DMA传输中断使能 0:中断禁止 1:中断使能
    IEN2寄存器
    位 位名称 复位值 操作
    7:6 — 00 R0
    5 WDTIE 0 R/W
    4 P1IE 0 R/W
    3 UTX1IE 0 R/W
    2 UTX0IE 0 R/W
    1 P2IE 0 R/W
    0 RFIE 0 R/W
    描述
    不适用读为0
    看门狗定时器中断使能 0:中断禁止 1:中断使能
    端口1中断使能 0:中断禁止 1:中断使能
    USART1发送中断使能 0:中断禁止 1:中断使能
    USART0发送中断使能 0:中断禁止 1:中断使能
    端口2中断使能 0:中断禁止 1:中断使能
    RF一般中断使能 0:中断禁止 1:中断使能
    P0IEN寄存器和P1IEN寄存器
    位 位名称 复位值 操作
    7:0 Px_[7:0]IEN 0x00 R/W
    描述
    端口Px_7到Px_0中断使能 0:中断禁止 1:中断使能
    P2IEN寄存器
    位 位名称 复位值 操作
    7:6 – 00 R/W
    5 DPIEN 0 R/W
    4:0 P2_[4:0]IEN 0 0000 R/W
    描述
    未使用
    USB D+中断使能
    端口P2_4到P2_0中断使能 0:中断禁止 1:中断使能
    电平触发 高电平触发 低电平触发
    边沿触发 上升沿触发 下降沿触发

    P1CTL寄存器
    位 位名称 复位值 操作 描述
    7 PADSC 0 R/W 控制I/O引脚输出模式下的驱动能力
    6:4 – 000 R0 未使用
    3 P2ICON 0 R/W P2_4到P2_0中断触发方式选择 0:上升沿触发 1:下降沿触发
    2 P1ICONH 0 R/W P1_7到P1_4中断触发方式选择 0:上升沿触发 1:下降沿触发
    1 P1ICONL 0 R/W P1_3到P1_0中断触发方式选择 0:上升沿触发 1:下降沿触发
    0 P0ICONL 0 R/W P0_7到P0_0中断触发方式选择 0:上升沿触发 1:下降沿触发
    #pragma vector=<中断向量>
    __interrupt void<函数名称>(void)
    {
    }
    IEN0寄存器
    位 位名称 复位值 操作
    7 EA 0 R/W
    6 – 0 R0
    5 STIE 0 R/W
    4 ENCIE 0 R/W
    3 URX1IE 0 R/W
    2 URX0IE 0 R/W
    1 ADCIE 0 R/W
    0 RFERRIE 0 R/W

    中断系统使能控制位 0:禁止所有中断 1:允许中断功能,但究竟哪些中断被允许还要看各中断源自身的使能控制位设置
    未使用
    睡眠定时器中断使能 0:中断禁止 1:中断使能
    AES加密/解密中断使能 0:中断禁止 1:中断使能
    USART1接收中断使能 0:中断禁止 1:中断使能
    USART0接收中断使能 0:中断禁止 1:中断使能
    ADC中断使能 0:中断禁止 1:中断使能
    RF发送/接收中断使能 0:中断禁止 1:中断使能

    学习单元四 定时/计数器应用
    1.定时/计数器
    定时计数器是一种能够对时钟信号或外部输入信号进行计数,当计数值达到设定要求时便向CPU提出处理请求, 从而实现定时或计数功能的外设。
    2.定时/计数器的作用
    基本功能:实现定时和计数
    将CPU从相关的任务中解放出来,提高了CPU的使用效率
    功能:
    定时器功能,计数器功能,捕获功能,比较功能,PWM输出功能
    工作原理:进行计数
    CC2530的定时/计数器:
    定时器1,定时器2,定时器3,定时器4,和睡眠定时器
    (1)定时器1
    16位定时器
    支持输入/输出比较功能 支持PWM功能 具有5个独立的捕获/比较通道 具有自由运行,模,正计数/倒计数模式、
    具有可被1,8,32或128整除的时钟分频器,为计数器提供计数信号
    (2)定时器2
    定时器2主要用于为802.15.4 CSMA-CA算法
    定时器3和定时器4都是8位的定时器
    睡眠定时器是一个24位正计数定时器
    CC2530定时器/计数器的工作模式
    “自由运行” “模” “正计数/倒计数”
    (1)自由运行模式
    计数器由0x0000开始,当计数器达到0xFFFF时溢出
    (2)模模式
    计数器从0x0000开始,在每个活动时钟边沿增加1,当计数器达到T1CC0寄存器保存的值时溢出,计数器将复位到0x0000并开始新一轮递增计数
    定时器3和定时器4的倒计数模式类似与模模式,只不过数值是从最大值向0x00倒序计数
    (3)正计数/倒计数模式
    正计数/倒计数模式下,计数器反复从0x0000开始,正计数到T1CC0保存的最终计数值,然后再倒计时回0x0000
    振荡周期分频系数=计数周期
    T最长=T计数
    65535
    初始化定时器1
    设置定时器1的分频系数
    1,8,32,128分频 默认使用内部频率为16MHz的RC振荡器,也可以使用外接的晶体振荡器,一般为32MHz频率的晶振。设定定时器1需要使用T1CTL寄存器
    T1CTL寄存器
    位 位名称 复位值 操做
    7:4 — 0000 R0
    3:2 DIV[1:0] 00 R/W
    1:0 MODE[1:0] 00 R/W
    未使用
    定时器1时钟分频设置 00:1分频 01:8分频 10:32分频 11:128分频
    定时器1工作模式设置 00:暂停运行 01:自由运行模式 10:
    模模式 11:正计数/倒计数模式
    最大计数值=定时时长/定时器计数周期
    定时器1的中断功能:查询方式 中断方式
    定时器有3种情况能产生中断请求:
    计数器达到最终计数值
    输入捕获事件
    输出比较事件(模模式时使用)

    学习单元5 串口通信应用
    并行通信和串行通信
    并行通信的特点是各位数据同时传送,传送速度快效率高。传送成本高,干扰大,可靠性较差,一般适用短距离数据通信,多用于计算机内部的数据传送方式。
    串行通信是数据按位顺序进行,最少只需要一根数据线即可完成,传输成本低,传送数据速度慢,一般用于较长距离的数据传送。
    串行通信又分同步和异步两种方式
    同步通信的优点为数据传输速率高,缺点是要求发送时钟和接收时钟保持严格同步。
    串行异步通信
    起始位 数据位 奇偶校验位 停止位 空闲位
    CC2530有两个串行通信接口USART 0和USART 1
    UART模式的操作具有下列特点:
    8位或者9位有效数据
    奇校验,偶校验或者无奇偶校验
    配置起始位和停止位电平。
    配置LSB(最低有效位)或者MSB(最高有效位)首先传送
    独立收发中断
    独立收发DMA(直接存储器存储)触发
    奇偶校验和数据帧错误状态指示
    CC2530串口通信的相关寄存器:
    UxCSR UxUCR UxGCR UxBUF UxBAUD
    UART0配置参数采用上电复位:
    硬件流控:无
    奇偶校验位(第九位):奇校验
    第九位数据使能:否
    奇偶校验使能:否
    停止位:1个
    停止位电平:高电平
    起始位电平:低电平

    学习单元6 A/D转换

    从电信号的表现形式可以分为模拟信号和数字信号
    CC2530的ADC模块支持最高14位二进制的模拟数字转换,具有12位的有效数据位。包括一个模拟多路转换器,具有8个各自可配置的通道;以及一个参考电压发生器。转换结果,通过DMA写入存储器,还具有多种运行模式。
    CC2530的ADC模块有如下主要特征:
    可选的抽取率,设置分辨率(7~12位)
    8个独立的输入通道,可接收单端或差分信号;
    参考电压可选为内部单端,外部单端,外部差分或AVDD5;
    转换结束产生中断请求;
    转换结束时可发出DMA触发;
    可以将片内温度传感器作为输入;
    电池电压测量功能。
    CC2530的ADC模块支持多达14位的模拟数字转换,具有最高12位有效数字位。
    CC2530的ADC模块包含一个模拟多路转换器,8个各独立配置的模拟量输入通道以及一个基准电压发生器。
    CC2530的ADC模块可以把输入配置为单端或差分输入。
    CC2530的ADC模块可以按序列进行多通道的ADC转换,并把结果通过DMA传送到存储器。
    CC2530的ADC模块具有片内温度传感器作输入和片内电池电压测量功能。
    单通道转换在寄存器ADCCON3写入控制字后,如果没有转换序列正在进行,则ADC转换会立即启动。
    ADC相关寄存器:
    ADCL(0xBA)-ADC数据低位寄存器,ADCH(0xBB)-ADC数据高位寄存,ADC有三个控制寄存器:ADCCON1,ADCCON2和ADCCON3

    展开全文
  • 单片机复习

    千次阅读 2018-07-09 16:28:23
    单片机就是在一片硅片上集成了中央处理器、随机存储器、只读存储器、中断系统、定时/计数器和多种I/O口的微型计算机系统,该系统不带外部设备。从组成和功能上看,它已经具备了计算机系统的基本属性,所以也可以称其...
  • 单片机学习笔记 —— STC15单片机ADC

    千次阅读 多人点赞 2019-08-26 20:25:34
    同理,将数字信号转换成模拟信号的电路称为数模转换器,简称D/A转换器或DAC,单片机能够存储的数据都是数字类型的。 一、逼近式ADC原理 简介:在进行转化时,一般都需要经过采样、量化和编码三个步骤。A/D转换的...
  • 学习51单片机的误区

    2020-08-19 02:50:09
    51单片机指MCS-51系列单片机,CICS指令集。由Intel公司开发,其结构增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(CMP)、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源,内有128个RAM单元及4K的ROM。
  • 51单片机

    2021-06-01 16:54:13
    只能读不能写 MOVC A,@A+DPTR A,@A+PC 堆栈操作(在51单片机中,堆栈被安排在内部RAM中) 寄存器SP 指向栈头 (sp默认指向07H) push dir 入栈 (sp先加1,后入) pop dir 出栈 (先出,sp后减1) 交换...
  • 单片机期末复习

    2021-01-05 17:31:32
    单片机期末复习名称解释单片机概述中断系统作用中断源入口地址 只针对MCS-51单片机 名称解释 A/Acc:累加器。 B:B寄存器。 DPTR:数据指针,一个16位的SFR,其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示。...
  • 89C51单片机之寄存器

    千次阅读 2019-04-20 23:45:18
    单片机
  • 单片机C语言编程.doc单片机C语言编程指令格式 功能简述 字节数 周期 一、数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,Ri 内部RAM单元送累加器 1 1 MOV Ri ,A 累加器送内部...
  • 单片机学习笔记来源于中国MOOC《单片机原理与应用》——北京交通大学 MCS-51单片机的结构与原理 结构: ·一个8位CPU; ·片内振荡和定时电路; ·128B内部RAM(00H~7FH); ·4个8位并行I/0口; ·2个16位可编程...
  • 由Intel公司开发,其结构增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(CMP)、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源,内有128个RAM单元及4K的ROM。其代表型号是ATMEL公司的A系列,它...
  • div指令

    2020-11-10 21:36:11
    div是除法指令,使用div做除法要注意以下问题: (1)除数:有八位和十六位两种,在一个寄存器reg中或者在一个内存单元中。 (2)被除数:默认放在AX 或者 DX和AX中,如果除数为8位,被除数则为16位,默认被除数存...
  • 1 往期链接Chenglin Li:51单片机(一)Visual Basic串口通信程序Chenglin Li:51单片机(二)汇编语言设计流水灯Chenglin Li:51单片机(三)汇编语言设计数码管Chenglin Li:51单片机(四)汇编语言设计定时器...
  • 2.STC15W408AS单片机时钟

    2021-06-28 09:56:50
    STC15W408AS单片机有两个时钟源:内部高精度R/C时钟和外部时钟(外部输入时钟或外部晶体振荡器产生的时钟)。内部高精度R/C时钟(±0.3%),±1%温漂,常温下温漂±0.6%(-20℃~+65℃)。 一、内部时钟配置 内部时钟配置...
  • 单片机面试

    万次阅读 2017-06-23 00:57:29
    答:MCS51单片机有5个中断源,2个中断优先级,中断优先级由特殊功能寄存器IP控制,在出现同级中断申请时,CPU按如下顺序响应各个中断源的请求:INT0、T0、INT1、T1、串口,各个中断源的入口地址分别
  • 由 Intel 公司开发,其结构增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(CMP)、16 位数据指针、布尔代数运算等指令,以及串行通信能力和 5 个中断源,内有 128 个 RAM 单元及 4K 的 ROM。其代表型号是 ATMEL 公司的 A ...
  • 单片机出租车计费器 一、实验目的 二、实验内容 三、实验步骤 四、C代码如下 五、实验结果 六、实验体会 一、实验目的 二、实验内容 三、实验步骤 四、C代码如下 五、实验结果 六、实验体会 ...
  • 51单片机学习

    2019-04-01 23:03:52
    51单片机指令集 *51指令不区分大小写 1个机器周期=12个时钟振荡周期 只有乘除两条指令的执行时间为4个机器周期 指令由两部分组成:操作码+操作数 指令系统的寻址方式 共7种寻址方式 寄存器寻址方式 MOV A,Rn;n=0~7...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,629
精华内容 1,851
关键字:

单片机div