单片机初学者学习宝典

我们说二十世纪跨越了三个“电”的时代:即电气时代、电子时代和现已进入的电脑时代。这里的电脑,通常是指个人计算机,简称PC机。另外还有一类计算机,主要应用于控制领域,也就是单片机(也称微控制器)。

二十世纪80年代初,单片机:Single Chip Microcomputer,开始发展起来。实质上是把CPU、存储器和各种各样外围设备的接口都集成在一块半导体芯片上,形成以单片机芯片为核心的微型计算机。

目前也称“微控制器”(Microcomputer Unit)。这类微型计算机,从功能到形态皆由控制计算机演变而来。

单片机是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出(I/O)接口及其他功能部件等集成在一小块矽片上的微型计算机。

单片机不是完成某一个逻辑功能,而是把一个计算机系统集成到一个芯片上。一块芯片就成了一台计算机。体积小、质量轻、价格便宜。

未编程前,单片机芯片只是一片超大规模集成电路,什么也做不了。必须对它编程,赋予它特定的运行程序,它就成为一个最小的、完整的微型计算机控制系统。

单片机MCU的组成

单片机的基本功能是对数据进行运算,要自动完成运算功能,应该具有哪些最基本的功能部分呢?

1.运算器:首先要有进行运算的部件,这就是“运算器”(ALU 算术/逻辑运算部件);

2.存储器:其次,要有能起到存储记忆、作用的器件,即能记忆原始题目、原始数据和中间结果,还要记住使单片机能自动进行运算而编制的各种命令,这类器件就称为“存贮器”(RAM、ROM、EPROM、EEPROM等等)。

存贮器又分为只读存贮器(ROM)和读写存贮器(RAM)两种,前者存放调试好的固定程序和常数,后者存放一些随时有可能变动的数据。只读存贮器一旦将数据存入,就只能读出,不能更改(EPROM、E2PROM等类型的ROM可通过一定的方法来更改、写入数据——编者注)。而读写存贮器可随时存入或读出数据。

3.控制器:此外,还需要有能代替人作用的“控制器”,它能根据事先给定的命令发出各种控制信号,使整个计算过程能一步步地进行。

4.输入/输出接口(I/O接口):光有上面说的这三部分还不够。原始的数据与命令要输入,计算的结果要输出,都需要按先后顺序进行,有时还需等待。这种对输入、输出数据进行一定管理的“门”电路在单片机中称为“口”(Port)。

输入/输出口又分为并行口和串行口等。

人们往往把运算器和控制器合并称为中央处理单元——CPU。单片机除了进行运算外,还要完成控制功能,所以离不开计数和定时。因此,在单片机中还设置了定时器兼计数器。

单片机里面还有一个时钟电路,使单片机在进行运算和控制时,都能有节奏地进行。另外,还有所谓的“中断系统”,使CPU根据外部事态的轻重缓急来采取适当的应付措施。

我们已经知道了单片机的组成,余下的问题是如何将它们的各部分连接成相互关联的整体呢?实际上,单片机内部有一条将它们连接起来的“纽带”,即“内部总线”。这些总线就像城市中的道路,CPU、ROM、RAM、I/O口、中断系统等就分布在“总线”的两旁,并和它连通。从而,一切指令、数据都可经内部总线传送。

不同型号的单片机硬件特征和软件特征均不尽相同。硬件特征是指单片机芯片的内部结构。要使用某种单片机,必须了解该型产品是否满足需要的功能和应用系统所要求的特性指标,包括功能特性、控制特性和电气特性等等(可以从生产厂商的技术手册中得到);软件特征是指指令特性和开发支持环境,指令特性包括寻址方式,数据处理和逻辑处理方式,输入输出特性及对电源的要求等。开发支持的环境包括指令的兼容及可移植性,支持软件以及硬件资源。

MCS-51系列单片机的系列和发展

单片机芯片系列、品种、规格繁多,先后经历4位机、8位机、16位机、新一代8位机、32位机等几个具有代表性的发展阶段。目前主流品种主要是新一代8位单片机芯片、32位嵌入式单片机芯片。

MCS-51单片机是美国INTEL 公司于1980年推出的划时代产品,属于8位单片机,代表性产品包括 8031、8051和8751等通用产品,8031 8751 8951 管脚指令功能完全。一直到现在, MCS-51内核系列兼容的单片机仍是应用的主流产品。

单片机作为微型计算机的一个重要的分支,应用面很广,发展也很快。

  • 1971年Intel公司首次宣布4004的4位微处理器。
  • 1974年12月仙童(Fair Child)公司即推出8位单片机F8(需另加一块3851芯片,还不能真正称的上为单片机)。随后, Mostek公司和仙童公司一起推出了与F8兼容的3870单片机系列。
  • Intel公司在1976年9月推出了MCS-48单片机系列(包括8048/8748/8035等);
  • GI(General Instrument Crop)公司在1977年10月宣布了PIC1650单片机系列;
  • 在1978年Rockwell公司也推出了R6500/1系列(与6502微处理器兼容)。

这些单片机都有8位CPU、若干个并行I/O口、8位定时器/计数器、容量有限的RAM和ROM,以及简单中断处理等功能。Motorola 公司和Zilog公司的单片机问世稍晚一些,但产品性能较高,单片机还有串行I/O、多极中断处理等功能,片内的RAM和ROM容量较大,有的还带有A/D转换接口。

  • Motorola公司在1978年下半年宣布了与6800微处理器兼容的6801单片机(在此之前,先推出了双片式的6802);Zilog公司在同年10月也推出了Z8单片机系列(包括8051/8751/8031等)。
  • 1982年,Mostek 公司和Intel公司先后推出了16位单片机MK68200(与68000微处理器兼容)和MCS-96系列。

1987年,Intel公司又推出了性能是8096的2.5倍新型单片机80296。

综上所述:

  • 1976-1978 初级8位单片机 Intel MCS-48 系列
  • 1978-1983 高档8位单片机 Intel MCS-51系列:

51子系列:8031/8051/8751

52子系列:8032/8052/8752

低功耗型80C31高性能型80C252廉价型89C2051/1051

  • 1983- 90年代初 16位单片机 Intel MCS-96 系列8098/8096、80C198/80C196
  • 90年代初-至今 16位单片机 高档32位单片机

可以把单片机的发展划分为四个阶段:

第一阶段(1974年开始):单片机初级阶段。因工艺限制,单片机采用双片的形式,而且功能比较简单,如仙童公司的F8实际上只包括了8位CPU、64字节RAM和2个并行I/O口,因此,还需加一块3851(由1K ROM、定时/计数器和2个并行I/O口构成)才能组成一台完整微型计算机。

第二阶段(1976年开始):低性能单片机阶段。以Intel 公司的MCS-48为列,采用了单片结构。即在一块芯片内就含有8位CPU、并行I/O口、8位定时/计数器、RAM和ROM等,但无串行I/O口,中断处理也比较简单,片内RAM和ROM容量较小,且寻址范围有限,一般都不大于4K字节。

第三阶段(1978年开始):高性能单片机阶段。这一类单片机带有串行I/O,有多极中断处理,定时/计数器为16位,片内的RAM和ROM相对增大,且寻址范围可达64K字节,有的片内还带有A/D转换接口。这类单片机有Intel 公司的MCS-51,Motorola公司的6801和Zilog公司Z8等。由于这类单片机应用的领域较广,目前还在不断改进和发展着。

第四阶段(1982年开始):16位单片机阶段。16位单片机除了CPU位16位外,RAM和ROM容量进一步增大,实时处理的能力更强。如Intel 公司的MCS-96,其集成度已为120000管子/片,主振幅12MHZ,片内RAM为232字节,ROM为8K字节,中断处理为8级,而且片内带有多通道10位A/D转换和高速输入/输出部件(HSIO),实时处理的能力很强。

增强MCS-51内核主流芯片:

1. 低档芯片

其一是P87LPC76X系列。包括P87LPC759、760、761、762、 764、 767、768、769等型号。

其二是P89LPC900系列。除了具有LPC76X系列功能、优点外,还增加了SPI接口、实时时钟RTC计数器、比较捕获单元CCU、A/D、D/A转换器等外设电路;采用2时钟机器周期内核,速度快,功耗小,指令系统与标准MCS-51内核兼容;绝大部分输入引脚均内置了噪声滤波器,抗干扰性能优于LPC76X系列;提供了单字节擦写功能,使未用的程序存储单元均可作EEPROM使用。

2. 中档芯片

(1)8XC5X系列,包括87C51/52/54/58、89C51/52/54/58以及Atmel公司的AT89S51/52/53等型号。

(2)P8XC5XX2系列,包括87C51X2/52X2/54X2/58X2、89C51X2/52X2/54X2 /58X2等型号)。P89C6XX2系列,包括P89C60X2、P89C61X2两个型号,最大特点是内置了256B~768B扩展RAM,具有ISP编程功能,电磁辐射量小)

以及Winbond公司的W78(如W78E58)、W77(如W77E58)系列。

以上这些系列芯片的软硬件与标准MCS-51保持100%的兼容,彼此之间差别也不大,价格低,仿真开发设备多,通用性强,能满足一般应用要求。

3.高档芯片

(1)89C51RX系列,包括Philips公司的P89C51RC+、P89C51RC2、P89C51RD+、P89C51RD2;

(2)Atmel公司的T89C51RX系列、Temic Semiconductor公司的TS89C51RX系列),P89C66X(包括P89C660、P89C662、P89C664、P89C668、P89C669等型号)系列;

(3) SST公司的SST89E554RD、SST89V554RD、SST89E564RD、SST89V564RD以及SST89C5XRD2系列等。

特点是功能齐全,片内数据存储器容量大,带有可编程计数器阵列,使用灵活,电磁兼容性好,能满足绝大部分应用。

几种典型的51系列单片机

8031:8051单片机的前身,没有内部程序存储器,程序需要烧写到另外的一个存储芯片,这两个芯片必须同时出现才能使用。内部无ROM的8051。

8051:比8031多了一个内部的4K的ROM。刚开始的时候,你如果要使用8051单片机的话,需要把程序寄给INTEL公司,让他们代为烧写程序。烧写完的程序不能擦除(所以应用的只有那些订货在上千片单片机的客户)。之后出现了编程器,拥有编程器的开发者可以自己用编程器烧写程序。但写完之后也不能擦除。采用HMOS工艺,功耗是630mW,是89C51的5倍

8751:采用EPROM(紫外线擦写存储器)代替ROM的8051。有一个4K的EPROM,芯片的上面有个圆的玻璃片,如果紫外光透过玻璃片照射进去就能把在里面的程序擦除。达到可擦写(修改程序)的目的。

虽然51 单片机最初是由Intel 公司开发设计的,但后来Intel 公司把51 核的设计方案卖给了几家大的电子设计生产商,譬如 Philips、Atmel、Winbond(W78及W77系列)、SST、STC、LG(GMS90系列)等大公司,使得其他厂家也可以根据上述三者的架构来仿制这类单片机,并且在上面添加很多功能,比如串行接口、PWM功能、flash存储器。但凡是使用这类架构的单片机,业界习惯上都统称为51单片机 。这也是为什么51单片机比较流行的原因,很多公司、厂家都生产这类单片机,结构一样指令一样,所以程序和电路都通用。

MCS-51系列单片机的内部结构

办公用PC 机的CPU 是基于冯诺伊曼的体系结构,然而单片机是基于哈佛结构的。哈佛结构下ROM 和RAM 是分开编址,即程序和数据分开保存,访问时用不同的指令加以区分,并可同时访问,在这样的体系结构下有利于提高指令的执行速度。

8051单片机的内部总体结构其基本特性如下:

  • 一个8位CPU
  • 4k字节ROM 用以存放程序、一些原始数据和表格。
  • 128字节RAM 用以存放可以读/写的数据,如运算的中间结果、最终结果以及欲显示的数据等。
  • 21个特殊功能寄存器。
  • 32根I/O线、可寻址的64k字节外部数据、程序存贮空间。
  • 两个16位定时器、计数器,每个定时器/计数器都可以设置成计数方式,用以对外部事件进行计数,也可以设置成定时方式,并可以根据计数或定时的结果实现计算机控制。
  • 中断结构:具有二个优先级、五个中断源
  • 四个8 位并行I/O 接口P0~P3,每个口既可以用作输入,也可以用作输出
  • 一个全双工UART(通用异步接收发送器)的串行接口。
  • 片内振荡器和时钟产生电路:但石英晶体和微调电容需要外接。最高允许振荡频率为12MHz。

单片机8051的CPU由运算器和控制器组成。

一、运算器                                       运算器以完成二进制的算术/逻辑运算部件ALU为核心,再加上暂存器TMP、累加器ACC、寄存器B、程序状态标志寄存器PSW及布尔处理器。

累加器ACC是一个八位寄存器,它是CPU中工作最频繁的寄存器。在进行算术、逻辑运算时,累加器ACC往往在运算前暂存一个操作数(如被加数),而运算后又保存其结果(如代数和)。寄存器B主要用于乘法和除法操作。

标志寄存器PSW也是一个八位寄存器,用来存放运算结果的一些特征,如有无进位、借位等。其每位的具体含意如下所示。

对用户来讲,最关心的是以下四位。

1.进位标志CY(PSW7)。它表示了运算是否有进位(或借位)。如果操作结果在最高位有进位(加法)或者借位(减法),则该位为1,否则为0。

2.辅助进位标志AC。又称半进位标志,它反映了两个八位数运算低四位是否有半进位,即低四位相加(或减)有否进位(或借位),如有则AC为1状态,否则为0。

3.溢出标志位OV。MCS-51反映带符号数的运算结果是否有溢出,有溢出时,此位为1,否则为0。

4.奇偶标志P。反映累加器ACC内容的奇偶性,如果ACC中的运算结果有偶数个1(如11001100B,其中有4个1),则P为0,否则,P=1。

PSW:由于PSW寄存器存放程序执行中的状态,故又叫程序状态字。运算器中还有一个按位(bit)进行逻辑运算的逻辑处理机(又称布尔处理机)。

二、控制器

控制器是CPU的神经中枢,包括定时控制逻辑电路、指令寄存器、译码器、地址指针DPTR及程序计数器PC、堆栈指针SP等。

程序计数器PC是由16位寄存器构成的计数器。要单片机执行一个程序,就必须把该程序按顺序预先装入存储器ROM的某个区域。单片机动作时应按顺序一条条取出指令来加以执行。因此,必须有一个电路能找出指令所在的单元地址,该电路就是程序计数器PC。当单片机开始执行程序时,给PC装入第一条指令所在地址,它每取出一条指令(如为多字节指令,则每取出一个指令字节),PC的内容就自动加1,以指向下一条指令的地址,使指令能顺序执行。只有当程序遇到转移指令、子程序调用指令,或遇到中断时,PC才转到所需要的地方去。

三、存储器

存储器是单片机的又一个重要组成部分。其中每个存储单元对应一个地址,256个单元共有256个地址,用两位16进制数表示,即存储器的地址(00H~FFH)。存储器中每个存储单元可存放一个八位二进制信息,通常用两位16进制数来表示,这就是存储器的内容。存储器的存储单元地址和存储单元的内容是不同的两个概念,不能混淆。

1.程序存储器

  程序是控制计算机动作的一系列命令,单片机只认识由“0”和“1”代码构成的机器指令。如前述用助记符编写的命令MOV A,#20H,换成机器认识的代码74H、20H:(写成二进制就是01110100B和00100000B)。在单片机处理问题之前必须事先将编好的程序、表格、常数汇编成机器代码后存入单片机的存储器中,该存储器称为程序存储器。程序存储器可以放在片内或片外,亦可片内片外同时设置。由于PC程序计数器为16位,使得程序存储器可用16位二进制地址,因此,内外存储器的地址最大可从0000H到FFFFH。8051内部有4k字节的ROM,就占用了由0000H~0FFFH的最低4k个字节,这时片外扩充的程序存储器地址编号应由1000H开始,如果将8051当做8031使用,不想利用片内4kROM,全用片外存储器,则地址编号仍可由0000H开始。不过,这时应使8051的第{31}脚(即EA脚)保持低电平。当EA为高电平时,用户在0000H至0FFFH范围内使用内部ROM,大于0FFFH后,单片机CPU自动访问外部程序存储器。

2.数据存储器

单片机的数据存储器由读写存储器RAM组成。其最大容量可扩展到64k,用于存储实时输入的数据。8051内部有256个单元的内部数据存储器,其中00H~7FH为内部随机存储器RAM,80H~FFH为专用寄存器区。实际使用时应首先充分利用内部存储器,从使用角度讲,搞清内部数据存储器的结构和地址分配是十分重要的。因为将来在学习指令系统和程序设计时会经常用到它们。8051内部数据存储器地址由00H至FFH共有256个字节的地址空间,该空间被分为两部分,其中内部数据RAM的地址为00H~7FH(即0~127)。而用做特殊功能寄存器的地址为80H~FFH。在此256个字节中,还开辟有一个所谓“位地址”区,该区域内不但可按字节寻址,还可按“位(bit)”寻址。对于那些需要进行位操作的数据,可以存放到这个区域。从00H到1FH安排了四组工作寄存器,每组占用8个RAM字节,记为R0~R7。究竟选用那一组寄存器,由前述标志寄存器中的RS1和RS0来选用。在这两位上放入不同的二进制数,即可选用不同的寄存器组,如附表1所示。

3.特殊功能寄存器

特殊功能寄存器(SFR)的地址范围为80H~FFH。在MCS-51中,除程序计数器PC和四个工作寄存器区外,其余21个特殊功能寄存器都在这SFR块中。其中5个是双字节寄存器,它们共占用了26个字节。各特殊功能寄存器的符号和地址见附表2。其中带*号的可位寻址。特殊功能寄存器反映了8051的状态,实际上是8051的状态字及控制字寄存器。用于CPU PSW便是典型一例。这些特殊功能寄存器大体上分为两类,一类与芯片的引脚有关,另一类作片内功能的控制用。与芯片引脚有关的特殊功能寄存器是P0~P3,它们实际上是4个八位锁存器(每个I/O口一个),每个锁存器附加有相应的输出驱动器和输入缓冲器就构成了一个并行口。MCS-51共有P0~P3四个这样的并行口,可提供32根I/O线,每根线都是双向的,并且大都有第二功能。其余用于芯片控制的寄存器中,累加器A、标志寄存器PSW、数据指针DPTR等的功能前已提及,而另一些寄存器的功能在后面有关部分再作进一步介绍

四、P0口、P2口和P3的第二功能用法

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

五、堆栈

堆栈是一个区域,是用来存放数据的,这个区域本身没有任何特殊之处,就是内部RAM的一部份,特殊的是它存放和取用数据的方式,即所谓的‘先进后出,后进先出’,并且 堆栈有特定的数据传输指令,即PUSH和POP,有一个特殊的专为其服务的单元,即堆栈指针SP。 每当执一次 PUSH指令时,SP就(在原来值的基础上)自动加1,每当执行一次POP指令,SP就(在原来值基础上)自动减1。

由于SP中的值可以用指令加以改变,所以只要在程序开始阶段更改了SP值,就可以把堆栈设置在规定的内存单元中,如在程序开始时用一条MOV SP,#5FH指令,就时把堆栈设置在从内存单元60H开始的单元中。一般程序的开头总有这么条设置堆栈指针的指令,因为开机时,SP的初始值为07H,这样就使堆栈从08H单元 始往后。08H到1FH这个区域正是8031的第二、三、四工作寄存器区,经常要被使用,这会造成混乱。不同作者编写程序时,初始化堆栈指令也不完全相同,这是作者的习惯问题。当设置好堆栈区,并不意味着该区域成为一种专用内存,它还是可以象普通内存区域一样使用,只是一般情下编程者不会把它当成普通内存用了。   

单片机中的信息类型与三总线

在单片机中,基本上有三类信息在流动:

1.一类是数据信息,即各种原始数据、中间结果、程序(命令的集合)等。这样要由外部设备通过“口”进入单片机,再存放在存贮器中,在运算处理过程中,数据从存贮器读入运算器进行运算,运算的中间结果要存入存贮器中,或最后由运算器经“出入口”输出。

2.第二类是控制信息,用户要单片机执行的各种命令(程序)也以数据的形式由存贮器送入控制器,由控制器解读(译码)后变为各种控制信号,以便执行诸如移位、运算、转移等功能的各种命令。所以,这一类信息就称为控制命令,即由控制器去控制运算器一步步地进行运算和处理,又控制存贮器的读(取出数据)和写(存入数据)等。

3. 第三类信息是地址信息,其作用是告诉运算器和控制器在何处去取命令取数据,将结果存放到什么地方,通过哪个口输入和输出信息等。

单片机各部分是通过内部的总线有机地连接起来的,总线(AB、CB和DB):

一个电路是由元器件通过电线连接而成的。但计算机内部电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调,所以需要的连线会很多很多。如果仍如同模拟电路一样 ,在微处理器和器件间单独连线,则线的数量将多得惊人。为此在微处理机中引入了总线概念,各个器件共同享用连线,所有器件的8根数据线全部接到8根公用的线上,即相当于各个器件并联起来。但是,如果仅这样还不行,比如的话,如果有两个器件同时送出数据,一个为0,一个为1,那么,接收方接收到的究竟是什么呢?这种情况是是不允许的,所以要通过控制线进行控制,使器件分时工作,任何时候只能有一个器件发送数据(可以有多个器件同时接收)。器件的数据线也就被称为数据总线(DB),器件所有的控制线被称控制总线(CB)。

在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配地址,才能使用,分配地址也是以电信号的形式给出的,由于存储单元比较多,所以用于地址的线也较多,这些线被称为地址总线(AB)。

数据、地址、指令放在一起:

之所以将这三者放在一起,是因为这三者的本质都是一样的─数字,或者说是‘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的字形码,也是实际输出的值。理解了地址、指令的本质,就不难理解程序运行过程中为什么会跑飞。


单片机指令系统

在前面我们已经知道了单片机的主要组成部分,这些部分构成了单片机的硬件。所谓硬件(Hardware),就是看得到,摸得到的实体。但是,光有这样的硬件,还只是有了实现计算和控制功能的可能性。

单片机要真正地能进行计算和控制,还必须有软件(Software)的配合。软件主要指的是各种程序。只有将各种正确的程序存入单片机,它才能有效地工作。单片机所以能自动地进行运算和控制,正是由于人把实现计算和控制的步骤一步步地用命令的形式,即一条条指令(Instruction)预先存入到存贮器中,单片机在CPU的控制下,将指令一条条地取出来,并加以翻译和执行。就以两个数相加这一简单的运算来说,当需要运算的数已存入存贮器后,还需要进行以下几步:

第一步:把第一个数从它的存贮单元(Location)中取出来,送至运算器。

   第二步:把第二个数从它所在的存贮单元中取出来,送至运算器;

第三步:相加;

第四步:把相加完的结果,送至存贮器中指定的单元。

指令与指令系统:

所有这些取数、送数、相加、存数等等都是一种操作(Operation),我们把要求计算机执行的各种操作用命令的形式写下来,这就是指令。但是怎样才能辨别和执行这些操作呢?这是在设计单片机时由设计人员赋予它的指令系统所决定的。一条指令,对应着一种基本操作;单片机所能执行的全部指令,就是该单片机的指令系统(Iustruction Set),不同种类的单片机,其指令系统亦不同。

源程序:

单片机要正常运作,事先需编制程序,再把程序放入存贮器中,然后由CPU执行该程序。程序是由指令组成的。应当把要解决的问题编成一系列指令。这些指令必须是选定的单片机能识别和执行的指令。单片机用户为解决自己的问题所编的指令程序,称为源程序(Source Program)。

指令的构成:指令的基本组成是操作码和操作数。

指令通常分为操作码(Opcode)和操作数(Operand)两大部分。

1.操作码表示计算机执行什么操作,即指令的功能;

2.操作数表示参加操作的数或操作数所在的地址(即操作数所存放的地方编号)。

MCS-51单片机的字长为8位,有时,要完成某些操作用一个字节尚不能充分表达。所以,在指令系统中有单字节指令,也有多字节指令。

机器语言与机器码:

因为单片机是一种可编程器件,只“认得”二进码(0、1)。要单片机运作,单片机系统中的所有指令,都必须以二进制编码的形式来表示。例如,在Intel公司的MCS-51系列单片机中,从存贮器中取出一数到CPU中的累加器(在运算器中,参与运算、存放运算结果的专用寄存器)的指令代码为74H,累加器内容加立即数的代码为24H,再加上立即数代码,累加器送数到内部RAM存贮器的代码为F6H~F7H等。这些指令是用十六进制表示二进制的机器码。

汇编语言与助记符:

机器码是由一连串的0和1组成,没有明显的特征,不好记忆,不易理解,易出错。所以,直接用它来编写程序十分困难。因而,人们就用一些助记符(Mue monic)——通常是指令功能的英文缩写来代替操作码,如MCS-51中数的传送常用MOV(Move的缩写)、加法用Add(Addition的缩写)来作为助记符。这样,每条指令有明显的动作特征,易于记忆和理解,也不容易出错。

用助记符来编写的程序称为汇编语言程序。但是,助记符编写的程序便于人理解,可单片机却只认识二进制机器代码,因此,为了让单片机能“读懂”汇编语言程序必须再转换成由二进制机器码构成的程序,这种转换过程,就称为“汇编”。汇编可借助于人工查表法来实现,也可借助PC机通过所谓“交叉汇编程序”来完成。由机器码构成的用户程序一旦“进入”了单片机,再“启动”单片机,就可让它执行输入程序所规定的任务。

学习单片机

学习单片机,除了需要电脑以外,还需要以下的一些器材。

1.单片机实验开发板

这是首选,用于编程实验,通过运行一系列实验程序,逐步了解单片机内部各部件特点以及指令功能。自制或者购买一块实验开发板是比较好的选择。实验板上除了提供单片机最小系统外,还会有一些开关、键盘、LED指示灯、数码管、各种接口芯片等常用器件,通过对这些器件的编程练习,逐步掌握单片机的编程技术。

2.单片机仿真器

仿真器的用途是替代电路板上的单片机芯片,仿真器内置专门仿真软件,通过串行口、USB接口等方式与与PC机联机通信,接收PC端控制软件发出的指令,以单步、过程单步、全速运行等各种方式来执行程序,以单步或过程单步方式执行程时,每次执行完程序后可以将执行的结果反馈到PC端的控制软件中显示出来。通过仿真,我们可以明了每一条指令执行完毕后会有什么样的结果,验证实际运行后的结果是否与设想的结果相符,据此对程序进行修改,直到实现指定的任务。所以,仿真功能对于单片机的学习和开发可以起到很重要的帮助作用。

3.编程器或者下载线

用途是将已经编写好的程序代码写入单片机芯片内部。对于初学者来说,有了仿真器也可以暂时不购置编程器或下载线,因为有了实验开发板、仿真器就完全可以做实验了。但是,要想真实知道编写的程序到底怎么样,还是建议配置编程器,这样可以对单片机开发的实时运行环境及各个环节都有所了解。

4.常用元器件、芯片,焊锡、导线等电工材料,试电笔、万用表、电烙铁等电工工具

学习单片机开发,不仅是是简单的编程而已,汇编语言是面向硬件的,所以要求开发者软、硬件方面都要熟悉,因此,这些工具或器材还是要配备的。

需要说明的是,上面所说的仿真器、实验开发板、下载线或编程器等都是就一般概念而言的,未涉及到具体的产品。目前,市场上已经有很多将实验开发板、仿真功能、下载或编程功能等中的一部分或者全部都集成到一起,构成一套完整的实验系统。

上面介绍的这些,都需要有一定的投入,爱好者未必一定有能力购买。其实,只要有一定动手能力,也可以自制一些简易的实验设备,同样可以开始学习。

这里推荐一种硬件方案,可以直接通过串口下载程序,从而将开发工具的成本降到最低。如图1所示是一个完整的电路,器件成本仅20多元,但可以实现诸如单灯闪烁、流水灯、键控灯、PC控制灯等一些常用功能,从而学习基本指令、定时器、计数器、串口通信等单片机知识。

图1 简单的单片机实验电路板

图中R1~R9为1K电阻,D1~D8是发光二极管LED,E1用10u电解电容,Y1用11.0592M晶振,C1和C2用27P小磁片电容,C3~C7用104磁片电容,U1使用STC89C52芯片,U2用MAX232。再自制或购买一条串口电缆,用于和电脑的通信,制作线时使J1与电脑的串口端2,3,5分别相连即可。制作好这个电路板以后,使用Keil软件编译、链接程序,得到Hex文件,使用STC_ISP软件将Hex文件写入芯片中,从而观察程序运行的效果。

喜欢就点个赞。

注:版权属笔者所有,如需转载请务必联系!

最后说一句:码字不易,若此文对你有启发,收藏前请点个赞、点点喜欢,是对知乎主莫大的支持!!

参考

1.^如有侵犯您的权益,请联系作者删除。

发表回复

相关推荐

趙大牛與眾明星握手引群嘲,趙本山“失敗的傢庭教育”藏不住瞭

前三十年看父敬子,後三十年看子敬父!這句話想必大傢都聽過,指的是孩子小的時候,外人會看在父輩的面子上照顧你,孩子長大...

· 2分钟前

比選招標投標註意事項

​上周,忙著做一個政府裝修項目的投標,它屬於公開招標的范疇。又因為標的未超過200萬元,所以采用的是比選招標。公開招標的...

· 3分钟前

大便出血有一些不為人知的秘密?

  便血,相信身邊很多人都經歷過,  但是為何造成的確不知道,  便血這是肛腸疾病的癥狀,  要檢查才能清楚地知道病...

· 3分钟前

信息科学研究生申请完整指南,收藏!

温馨提示: 本文内含大量申请硬干货(内容预览) 共计23607字,约需要30分钟完成全文阅读,建议收藏。 一、未来20年重要的研 ...

· 4分钟前

一杯“二鍋頭” 嗆得眼淚流,扒扒這名不副實的清香型白酒二鍋頭

“餃子就酒,越喝越有”,在老北京人兒的眼裡,餃子配二鍋頭,才是最佳的搭配公式。白酒君曾在北京呆過幾年,和朋友去過的特色...

· 5分钟前