PIC单片机16F84的内部硬件资源

PIC单片机16F84的内部硬件资源
PIC单片机16F84的内部硬件资源

PIC单片机16F84的内部硬件资源

成都卫东

现在我们已经知道要单片机工作,就需用汇编语言编制程序。而对某个PIC单片机编程时,还需对选用的PIC单片机内部硬件资源有所了解。这里介绍PIC16F84单片机的内部结构,如图1所示的框图。由图1看出,其基本组成可分为四个主要部分,即运算器ALU和工作寄存器W;程序存储器;数据存储器和输入/

输出(I/O)口;堆栈存储器和定时器等。现分别介绍如下。

1 运算器ALU及工作寄存器W

运算器ALU是一个通用算术、逻辑运算单元,用它可以对工作寄存器W和任何通用寄存器中的两个数进行算术(如加、减、乘、除等)和逻辑运算(如与、或、异或等)。16F84是八位单片机,ALU的字长是八位。在有两个操作数的指令中,典型的情况是一个操作数在工作寄存器W中,而另一个操作数是在通用寄存器中,或者是一个立即数。在只有一个操作数的情况下,该数要么是在工作寄存器W中,要么是在通用寄存器中。W寄存器是一个专用于ALU操作的寄存器,它是不可寻址的。

根据所执行的指令,ALU还可能会影响框图中状态寄存器STATUS的进位标志C、全零标志Z等。

2 程序存储器

单片机内存放程序指令的存储器称为程序存储器。PIC16F84的所有指令字长为14位。所以程序存储器的各存储单元是14位宽。一个存储单元存放一条指令。16F84的程序存贮器有1024(28)个存储单元(存储容量为1k)。这些程序存储器都是由FPEROM构成的。

程序存储器是由程序计数器PC寻址的。16F84的程序计数器为13位宽,可寻址8K(8×1024)的程序存储器空间,但16F84实际上只使用了1k的空间(单元地址为0~3FFH)。当访问超过这些地址空间的存储单元时,将导致循环回到有效的存储空间。

对于用过其它单片机的用户,可能会感到16F84的片内存储器容量太少了。实际上并非如此,因为16F84的指令系统都是由单字指令构成的,相应于其它由二字节、三字节甚至四字节指令的单片机而言,PIC单片机的程序存储器有效容量要比标称值扩大2 5倍到3倍。

3 数据存储器

在单片机PIC16F84中,除了有存放程序的程序存储器外,还有数据存储器。单片机在执行程序过程中,往往需要随时向单片机输入一些数据,而且有些数据还可能随时改变。在这种情况下就需用数据存储器。由于数据存储器不但要能随时读取存放在其各个单元内的数据,而且还需随时写进新的数据,或改写原来的数据。因此,数据存储器需由随机存储器RAM构成。RAM存储器在断电时,所存数据随即丢失,这在实际应用中有时会带来不便。但是,在16F84中有64×8位E2PROM数据存储器。存放在E2PROM中的数据在断电时不会丢失。

16F84中的RAM数据存储器如表1所示,该RAM分为两个存储体:即存储体0(Bank0)和存储体1(Bank1)。每个存储体均可以直接用内部总线传送信息,所以它们都是以寄存器方式工作和寻址。这些八位寄存器,又可分为通用寄存器和专用寄存器两个部分。通用寄存器存放数据,专用寄存器存放控制单片机运作的信息。每个存储体最大可扩展到7FH(128个字节)。在每个存储体中,专用寄存器被安排在低位地址空间,通用寄存器被安排在高位地址空间。

通用寄存器用法单一,但专用寄存器却各有各的用处,现将较基本的专用寄存器作一简单介绍。

(1)程序计数器(PCL、PCLATH)。程序计数器PC是对程序进行管理的计数器。PIC16F84的程序计数器为13位宽,最大可寻址的存储空间为8k×14位。实际上16F84只使用前1k×14位(0000~03FFH)存储空间。因程序计数器有13位宽,而专用寄存器只有8位。因此PC由两个专用寄存器构成。其低八位PCL是一个可读/写寄存器(地址为02H或82H),而高字节PCH(有效位5位)不能直接进行读/写操作,它是通过一个8位的保持寄存器PCLATH(地址为0A或8AH)把高5位地址传送给程序计数器的高字节。当执行CALL、GOTO指令,或写PCL时,PC值的高字节就从PCLATH寄存器中装入。

(2)状态寄存器STATUS。状态寄存器STATUS含有算术逻辑单元ALU运算结果的状态(如有无进位等)、复位状态及数据存储体选择位。有关位位的设定如表2所示,功能如下:

1)第0位。进位/借位位C。执行加、减运算指令

表2

IRP RP1 RP0 TO PD Z DC C

后,若结果有进位或借位,则C被置1,否则置0。在执行移位指令时,也要用到这一位。

2)第1位。辅助进位/借位位DC。执行加、减运算指令后,若结果的低四位向高四位有进位或借位,则DC置1,否则置0。

3)第2位。零标志位运算结果为零,Z被置1;运算结果不为零,Z被清零。

4)第3位。低功耗标志位PD。上电复位或执行CLRWDT指令后置1,执行SLEEP指令后被清零。

5)第4位。定时时间到标志位TO。上电复位或执行CLRWDT、SLEEP指令后被置1,监视定时器的定时时间到被清零。

6)第5位和第6位(RP0、RP1)。这两位是用于直接寻址时的寄存器体选择位。即00——选中Bank0(00H~7FH);01——选中Bank1(80H~FFH),16F84只有两个存储体。故10、11不用。

7)第7位IRP。这是间接寻址的寄存体选择位。0——选中Bank0、1(00H~FFH),1——选中Bank2、3。16F84只有Bank0、1,所以此IRP位应被置为0。

(3)间接寻址INDF和FSR寄存器

INDF寄存器不是一个物理寄存器,而是一个逻辑功能的寄存器(地址为00H或80H),当对INDF寄存器进行寻址时,实际上是访问FSR寄存器内容所指的单元,即把FSR寄存器作为间接寄存器使用。FSR称为“寄存器选择”寄存器,地址为(04H或84H)。对INDF寄存器本身进行间接寻址访问,将读出FSR寄存器的内容,例如当FSR=00H时,间接寻址读出INDF的数据将为00H。用间接寻址方式写入INDF寄存器时,虽然写入操作可能会影响STATUS中的状态字,但写入的数据是无效的。

4 I/O口

单片机作为一个控制器件必定有数据输入和输出。输入量可能是温度、压力、转速等,而输出量可能是开关量和数据,以保证受控过程在规定的范围内运行。数据的输入和输出都需通过单片机内部有关电路,再与引脚构成输入/输出(I/O)端口。PIC16F84芯片有两个I/O端口(PROTA和PORTB)。端口A为5位口,端口B为8位口,共占用13位引脚。每个端口由一个锁存器(即数据存储器中的特殊功能寄存器05H、06H 单元)、一个输出驱动器和输入缓冲器等组成。当把I/O口作输出时,数据可以锁存;作输入口时,数据可以缓冲。

16F84PORTA口中的RA4是斯密特触发输入、漏极开路输出。而其它的RA口引脚都是TTL电平输入和全CMOS驱动输出。端口PORTB是一个八位双向可编程I/O口。各端口虽然也由锁存器、驱动器、缓冲器等构成,但因功能略有不同而导致电路亦存在差别。现以PORTA口的RA0~RA3的电路(见左图)为例,说明其基本工作原理。

图中RA口的I/O引脚是由数据方向位(寄存器TRISA)来定义数据流向。当TRISA寄存器的位置为“1”时,其输出驱动器(由P沟道和N沟道MOS管串接而成)呈高阻态,即两个MOS管均截止,I/O口被定义为输入。此时,数据由I/O端输入,经TTL输入缓冲器到D触发器。当执行读指令时,此D触发器使能,数据经三态门进入数据总线。

当TRISA的位置为“0”时,I/O口被定义为输出,此时输出锁存器的输出电平就是I/O口的输出电平。

读PORTA寄存器的结果就是读取I/O引脚上的电平,而写PORTA寄存器的结果是写入I/O锁存器。所有的写I/O口的操作都是一个“读入/修改/写入”的过程,即先读I/O引脚电平,然后由程序修改(按要求给定一个值),再置入I/O锁存器。

PIC16F84的输出可提供20mA的电流,所以它可直接驱动LED。PORTA和PORTB各个位均可分别定义为输入和输出。下面以PORTA口初始化程序的实例,说明选择I/O口的方法。

CLRF PORTA;端口A被清零

BSF STATUS;状态寄存器STATUS的RPO位置为1,选BANK1。

MOVLW0xCF ;将定向值

;11001111置入W工作寄存器

MOVWF TRISA;置RA(3~0)位为输入

;RA5 4位为输出

;TRISA7 6位未用

在使用I/O口时应注意:

(1)当需要一个I/O口一会做输入、一会又做输出时,输出值会不确定。

(2)I/O引脚输出驱动电路为CMOS互补推挽输出。当其为输出状态时,不能与其它输出脚接成“线或”或“线与”,否则,会因电流过载烧坏单片机。

(3)当对I/O口进行写操作后不宜直接进行读操作,一般要求在两条连续的写、读指令间至少加入一条NOP指令。

例:MOVWF6;写I/O

NOP ;稳定I/O电平

MOVF6,W;读I/O

5 堆栈

单片机执行程序时,常常要执行调用子程序。这样就产生了一个问题:如何记忆是从何处调用的子程序,以便执行子程序之后正确返回。此外,在程序执行过程中,还可能会发生中断,转而执行中断子程序,这时,又如何记忆从何处中断,以便返回呢?

满足上述功能的方法就是“堆栈”技术。

“堆栈”是一个用来保存临时数据的栈区。当主程序调用子程序时,单片机执行到CALL指令或发生中断时,就自动将下一条指令的地址“压栈”保存到栈区。当子程序结束,单片机执行返回指令时,就自动地把栈区的内容“弹出”,作为下步指令执行的新地址。

PIC16F84芯片内有一个8级13位宽(与PC同宽)的硬件堆栈,此堆栈既不占用程序存储空间,也不占用数据存储空间。当执行一条CALL指令或一个中断被响应后,程序计数器PC中的断点地址就自动被压栈(PUSH)保护,而当执行RETURN、RETLW或者RETFIE指令时,堆栈中的断点地址会弹回(POP)程序计数器PC 中。无论是PUSH还是POP操作,都不影响PCLATH寄存器的内容。

6 定时器/计数器TMRO

PIC单片机16F84中有一个定时器,此定时器也可用于计数,因此称为定时器/计数器,符号为TMRO。TMRO可用于定时控制、延时、对外部事件计数和检测等场合。TMRO是一个8位增量(加1)计数器。它在数据存贮器中的地址为01。定时器所用的时钟源可以是内部系统时钟(OSC/4,即四倍振荡周期),也可以是外部时钟。若TMRO对内部系统时钟的标准脉冲系列进行计数时,就成为定时器;对外部脉冲进行计数时TMRO就成为计数器。

不管是定时还是计数方式,TMRO在对内部时钟或对外部事件计数时,都不占用CPU时间,除非TMRO 溢出,才可能中断CPU的当前操作。可见,定时器是单片机16F84中效率高且工作灵活的部件。

为了扩大定时或计数的范围,配合TMRO的使用,还有一个可编程预定标器。此定标器实际上是一个可编程分频器。

TMRO的内部结构示意图如附图所示。其工作方式由数据存储器中的项选寄存器OPTION控制。OPTION 是一个可读/写的寄存器,如附表所示。它含有配置TMRO/WDT预定标器、外部INT中断、TMRO等的各种控制位。

TMRO的定时、计数方式是由OPTION寄存器中的D5(即TOCS位)确定。当TOCS=0时,工作于定时器方式;当TOCS=1时,工作于计数器方式。作定时器时,每个指令周期加1(无预分频时);而作计数器时,则在每个RA4/TOCKI引脚上电平变化时加1。OPTION寄存器的位4(TOCS位)决定外部脉冲的触发方式,当TOSE=1,下降沿触发;TOSE=0,上升沿触发。当TMRO内部计数器发生计数溢出(从FFh→00h)时,溢出位送入中断控制寄存器INTCON。

由附图可知,预分频器也是一个8位计数器。其分频数是由OPTION寄存器中的PS2~PS0三位值来改变。分频数可以是以下8种之一:1∶1、1∶2、1∶4、1∶8、1∶16、1∶32、1∶64和1∶128。

当分频器用于TMRO时,所有写入TMRO的指令,如CLRF1、MOVWF1、BSF1、 等都将对预分频器清零。需要注意的是,预分频器是不能读写的。此分频器可用于TMRO,也可用于WDT,其切换由软件控制。为了避免意外的芯片复位,当需要切换时,必须执行相应的一段程序,以下是从WDT切换到TMRO时所需执行的程序:

CLRWDT ;

对WDT和预定标器清零

BSF STATUS,RP0;选中存储体1

MOVLW B′xxxx0xxx′;PSA=0,选中TMRO

MOVWF OPTION ;送入OPTION寄存器

BCF STATUS,RP0 ;复位存储体0

7 延时和定时

在设计单片机应用系统时,经常会遇到需要使某一过程(如加温、加压等)持续一段时间的情况,如连续加压1分钟,通电2分钟等。单片机如何正确确定这段时间呢?这里可通过两种方式,即延时和定时来实现。试看下例。

在应用系统中要求PIC16F84的RAO端控制一个发光二极管按一定频率闪亮,可通过右图的电路来实现。同时还必须为16F84编制一个程序。由电路图可知,要使发光二极管LED按一定的频率闪亮,只要使RAO端输出一个变化的高→低→高……电平即可。由此设计出如下的源程序(清单1):list P=16F84,F=INHX8M

;……

ORG 0

MOVLW0 ;主程序开始

TRIS 5 ;置RA口为输出

BCF 5,0 ;RA口0位清零

LOOP:CALL DELAY;闪动延时

COMF 5 ;RA口求反,亮—灭交替

GOTO LOOP ;循环

;……

DELAY ;以下为延时子程序

MOVLW D′50

MOVWF 8

LOOP1:MOVWF 9

LOOP2:DECFSZ 9,F

GOTO LOOP2

DECFSZ 8,F

GOTO LOOP1

RETLW 0

由清单1可知,当主程序开始时,首先将工作寄存器W清零,然后将W寄存器的内容送TRISA寄存器,使其清零,以设置RA口为输出。接着又将RA口的第5位清零,使LED开始时处于熄灭状态。随之持续一段时间,即执行延时子程序,再将RA口取反,变为高电平输出,LED发光,再延时,又使RA口取反,LED 熄灭……。这样,LED就一暗一亮,持续交替进行。

在这里,使LED亮、暗持续一段时间是通过单片机执行延时子程序DELAY来实现的。此延时程序的核心就是让单片机的CPU反复执行使寄存器内容减1的指令DECFSZ。即将十进制数50分别装入通用寄存器F8、F9,以进行50×50=2500次的减1操作。如果执行一次DECFSZ指令需1个指令周期(跳转时需2个周期),若设振荡频率为100kHz,即指令周期为40μs,则延时时间为2500×40=100000μs=100ms,即0 1秒。实际上还略为大些。此延时时间已超过人眼的视觉保留时间。因而能看清LED的明、暗交替变化。

如果我们需要更长的延时时间,可仿照上例,装入更大的数或引入多重循环。因此,在原则上,延时时间可根据需要任意延长。

不过,采用延时程序来持续某一过程的方式有缺陷。延时就是使CPU在某几条指令上“转圈”,延时越长,“转圈”数越多,这时,CPU不能再去执行其它操作,如监视温度、湿度等。这在某些实时控制系统中,不允许这样做。为此,在单片机16F84中,专门设置了一个“闹钟”——定时器TMR0。需要某过程延续多长时间,可将其“拨入”TMR0,到时它会发生“中断”,告诉CPU定时时间到。要CPU暂停其它工

作,转过来执行“中断子程序”,完成输出开、关信号之类的任务后,再回去执行其中断的工作。这样,就使CPU的工作效率提高。因而,延时的使用有局限性,采用定时器TMR0则可用于各种场合中。

8 中断

PIC单片机16F84具有实时处理功能,能对外界异常发生的事件由中断技术作及时处理。

当单片机的CPU正在处理某事件时,若外部发生了某一事件(如定时器溢出、引脚上电平变化),请求CPU迅速去处理,于是CPU就暂时中止当前的工作,转去处理所发生的事件。中断处理完该事件后,再回到原来被中止的地方,继续执行原来的工作,如图1所示。实现这种功能的部件称为中断系统。产生中断的请求源称为中断源。中断源向CPU提出的处理请求,称为中断请求或中断申请。CPU暂时中断自身的事务,转去处理事件的过程,称为CPU的中断响应过程。对事件的整个处理过程,称为中断服务(或中断处理)。处理完毕,再回到原来被中止的地方,称为中断返回。

PIC16F84芯片有4种中断源,其逻辑电路如图2所示。

9 中断控制

中断主要由中断控制寄存器INTCON(图3)来控制。INTCON是一个可读/写寄存器,含有定时器TMRO溢出、RB口的变化和外部INT引脚中断等各种允许控制和标志位。

全局中断允许位GIE(D7)置1,将开放所有未被屏蔽的中断,如将该位清零,将禁止所有的中断。在响应中断时,GIE位将被清零,以禁止其它中断,返回的断点地址被压栈保护,接着把中断入口地址0004h 装入程序计数器PC。在中断服务程序中,通过对中断标志位进行查询,确定中断标志位必须在重新开放中断之前用软件清零,以避免不断地中断申请而反复进入中断。

(1)INT中断。RBO/INT引脚上的外部中断由边沿触发,当INTEDG位(OPTION寄存器第6位)被置1时,选用上升沿触发,如该位被清零,则由下降沿触发。当检测到引脚上有规定的有效边沿时,便把INTE位(INTCON的D4位)置1。在重新开放这个中断之前,必须在中断服务程序中对INTE位清零。(2)TMRO 中断。当定时器TMRO的计数器计满溢出(即由FFH变成00H)时,硬件自动把TOIF(INTCON的D2位)置1。其中断可以通过对TOIE(INTCOND的D5位)置1或清零来控制该中断是否开放。

(3)PORTB口引脚电平变化中断。在PORTB口的D7~D0引脚上一旦有电平变化,就会把RBIF(INTCON 的D0位)置1。这个中断可以通过对RBIE(INTCON的D3位)置1或清零来控制该中断是否开放。

(4)中断的现场保护。在发生中断时,只有返回断点的地址被压栈保护。若用户还希望保护关键的寄存器(如W寄存器和STATUS寄存器)。这需要由软件来实现。有关中断的现场保护,请参看本报第15期有关PIC单片机指令识读中的实例。

10 复位

复位是单片机的初始化操作。其主要功能是把程序计数器PCL初始化为000H,可使16F84单片机从000H单元开始执行程序。

PIC16F84芯片有下列几种不同的复位方式。

(1)芯片上电复位POR。

(2)正常工作状态下通过外部MCLR引脚加低电平复位。

(3)在省电休眠状态下通过外部MCLR引脚加低电平复位。

(4)监视定时器WDT超时溢出复位。

PIC16F84片内集成有“上电复位”POR电路,对于一般应用,只要把MCLR引脚接高电位即可。

在正常工作或休眠状态下用MCLR复位,只需在MCLR引脚上加一按键瞬间接地即可。

单片机16F84复位操作,对其它一些寄存器会有影响,如表1所示。

11 监视定时器WDT

单片机系统常用于工业控制,在操作现场通常会有各种干扰,可能会使执行程序弹飞到一种死循环,从而导致整个单片机控制系统瘫痪。如果操作者在场,就可进行人工复位,摆脱死循环。但操作者不能一直监视着系统,即使监视着系统,也往往是引起不良后果之后才进行人工复位。由于PIC16F84中具有程序运行自动监视系统,即监视定时器WDT(Watch Dog Time),直译为“看门狗”定时器。这好比是主人养了一条狗,主人在正常干活时总不忘每隔一段时间就给狗喂食,狗就保持安静,不影响主人干活。如果主人打嗑睡,不干活了,到一定时间,狗饿了,发现主人还没有给它吃东西,就会大叫起来,把主人唤醒。

由此可见,WDT有如下特性:

(1)本身能独立工作,基本上不依赖CPU。

(2)CPU在一个固定的时间间隔中和WDT打一次交通(如使其清零,即喂一次狗),以表明系统目前工作正常。

(3)当CPU落入死循环后,能被WDT及时发觉(如WDT计数溢出),并使系统复位。

PIC16F84内的WDT,其定时计数的脉冲序列由片内独立的RC振荡器产生,所以它不需要外接任何器件就可以工作。而且这个片内RC振荡器与OSC1/CLKIN(引脚{16})上的振荡电路无关,即使OSC1和OSC2上的时钟不工作,WDT照样可以监视定时。例如:当PIC16F84在执行SLEEP指令后,芯片进入休眠状态,CPU不工作,主振荡器也停止工作,但是,WDT照样可监视定时。当WDT超时溢出后,可激活(唤醒)芯片继续正常的操作。而在正常操作期间,WDT超时溢出将产生一个复位信号。如果不需要这种监视定时功能,在固化编程时,可关闭这个功能。附图是监视定时器的结构框图。表2是与WDT有关的寄存器。

WDT的定时周期在不加分频器的情况下,其基本定时时间是18ms,这个定时时间还受温度、VDD和不同元器件的工艺参数等的影响。如果需要更长的定时周期,还可以通过软件控制OPT/ON寄存器把预分频器配置给WDT,这个预分频器的最大分频比可达到1∶128。这样就可把定时周期扩大128倍,即达到2 3秒。

如果把预分频器配置给WDT,用CLRWDT和SLEEP指令可以同时对WDT和预分频器清零,从而防止计时溢出引起芯片复位。所以在正常情况下,必须在每次计时溢出之前执行一条CLRWDT指令(即喂一次“狗”),以避免引起芯片复位。当系统受到严重干扰处于失控状态时,就不可能在每次计时溢出之前执行一条CLRWDT指令,WDT就产生计时溢出,从而引起芯片复位,从失控状态又重新进入正常运行状态。

当WDT计时溢出时,还会同时清除状态寄存器中的D4位T0,检测T0位即可知道复位是否由于WDT计时溢出引起的。

12 E2PROM的使用方法

在PIC16F84单片机中,除了可直接寻址的由SRAM构成的数据存储器外,还另有可电擦、电写的E2PROM 数据存储器。该E2PROM共有64字节,其地址为00~3FH单元。由于E2PROM具有在线改写,并在掉电后仍能保持数据的特点,可为用户的特殊应用提供方便。16F84的E2PROM在正常操作时的整个VDD工作电压范围内是可读写的,典型情况下可重写100万次,数据保存期大于40年。

PIC16F84的E2PROM并未映象在寄存器组空间中,所以它们不能像SRAM通用寄存器那样用指令直接寻址访问,而需要通过专用寄存器进行间接寻址操作。因此,在16F84中增加了以下四个专用寄存器,即EECON1、EECON2、EEDATA、EEADR,专门用于片内对E2PROM的操作。该专用寄存器中,EEDATA存放8位读/写数据,EEADR存放正在被访问的E2PROM存储单元的地址。

EECON1是只有低五位的控制寄存器,其高三位不存在,读作“0”。具体见下表。

D7 D6 D5 D4 D3 D2 D1 D0

--- EEIF WRERR WREN WR RD

控制位RD和WR分别用于读写操作的启动,这两位可以由软件置1,以启动读、写操作,但不能用软件清零,原因是防止不恰当的软件操作会使写入失败。当读写操作完成后由硬件自动清零,表示此刻未对E2PROM进行读写操作。当WREN位被置1时,允许进行写操作,而在上电时该位被清零。在正常操作时,一旦有MCLR或WDT复位,WRERR位就置1,表示写操作被中止。当写操作完成时,EEIF被置1(需由软件清零);当写操作未完成或尚未启动时,EEIF为“0”。

EECON2仅是一个逻辑上的寄存器,而不是一个物理上存在的寄存器,读出时将总是为零。它只在写操作时起作用。

(1)E2PROM的读操作

为进行一次E2PROM读操作,需执行如下步骤:

1)将E2PROM的单元地址放入EEADR。2)置RD(EECON的D0位)=1。3)读取EEDATA寄存器。

程序段举例,读取25H处的E2PROM存储器数据:

BCF STATUS,RP0;选Bank0

MOVLW25H

MOVWF EEADR ;地址25H→EEADR

BSF STATUS,RP0 ;选Bank1

BSF EECON1,RD ;启动读操作

BCF STATUS,RP0;选Bank0

MOVF EEDATA,W ;将E2PROM数据

…;读入W寄存器

(2)E2PROM的写操作

要进行一次E2PROM写操作,需执行如下步骤:

1)将E2PROM单元地址放入EEADR;2)将写入数据放入EEDATA;3)执行一段控制程序段。

例如:将数据99H写入E2PROM的25H单元,需执行下列程序:

BCF STATUS,RP0 ;送Bank0

MOVLW25H

MOVWF EEADR ;地址→EEADR

MOVLW99H

MOVWF EEDATA ;写入数据→EEDATA

BSF STATUS,RP0 ;选Bank1

BSF EECON1,WREN;写操作功能允许

1 BCF INTCON,GIE ;关闭总中断

2 MOVLW0x55

3 MOVWF EECON2

4 MOVLW0xAA

5 MOVWF EECON2;操作EECON2

6 BSF EECON1,WR;启动写操作

7 BSF INTCON,GIE;开放总中断

注意:上列程序中的2~6条各语句必须严格执行,否则不能启动E2PROM的写操作。而1~7条则是我们建议用户执行的操作,即在E2PROM写操作序列步骤中要关闭所有中断,以免这个序列被中断打断。

另外,WREN(EECON1的D2位)是用来保证E2PROM不会被意外写入而设置的,所以,在平时,用户程序应保持WREN=0以禁止写操作。只有当需对E2PROM写入时才置WREN=1,并在写入完成后将其恢复为0。用户只有置WREN=1后才能置WREN=1启动写操作。上电复位后WREN位自动清零。

E2PROM写操作约需10ms的时间才能完成。用户程序可通过查询WR位的状态(当WR=0时表示操作已完成),或者用E2PROM写入完成中断来判断E2PROM写操作是否完成。如要使用中断,应先置EEIF(INTCON 的D6)为1,以开中断。E2PROM写完成要中断标志位EEIF,只能用软件清零。

8051单片机的内部结构

8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。 8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: 中央处理器(CPU)是整个单片机的核心 部件,是8位数据宽度的处理器,能处理 8位二进制数据或代码,CPU负责控制、 指挥和调度整个单元系统协调的工作,完 成运算和控制输入输出功能等操作。 ·数据存储器(RAM): 8051内部有128个8位用户数据存储 单元和128个专用寄存器单元,它们是统 一编址的,专用寄存器只能用于存放控制 指令数据,用户只能访问,而不能用于存 放用户数据,所以,用户能使用的的RAM 只有128个,可存放读写的数据,运算的 中间结果或用户定义的字型表。 ·程序存储器(ROM): 8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。 ·定时/计数器(ROM): 8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。 ·并行输入输出(I/O)口: 8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。 ·全双工串行口: 8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以 用作异步通信收发器,也可以当同步移位器使用。 ·中断系统: 8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可 满足不同的控制要求,并具有2级的优先级别选择。 ·时钟电路: 8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051 单片机需外置振荡电容。

单片机部分习题答案

第2章:2、CIP-51有哪些存储空间?各个存储空间的功能及寻址范围是什么? 有程序存储器、内部数据存储器、外部数据存储器、特殊功能寄存器和位寻址区五个独立的地址空间。 ●程序存储器:存放程序和常数,容量为64KB,地址范围0000H-0FFFFH ●内部数据存储器:用于通用寄存器和存放数据的临时存储器,容量为256B, 地址范围00H-0FFH ●外部数据存储器:用于存放数据,容量为64KB(有4KB在芯片内部),地 址为0000-0FFFFH ●特殊功能寄存器(SFR):提供对片内资源和外设的访问和控制,以及与外 设的数据交换,C8051F020有122个,离散分布在地址80H-0FFH中。 ●位地址空间:存放位变量,进行布尔运算,容量为256位,有内部RAM的 20H-2FH(16字节,128位)和部分SFR(字节地址可以被8整除的)组成,地址范围为00H-0FFH 3、CIP-51的内部RAM空间有多少字节?它们在应用中有什么专门用途?堆栈一般应设置在什么位置? ●内部RAM有256字节 ●低128B中的00H-1FH用于通用寄存器,20H-2FH既可以字节寻址也可以 位寻址,30H-7FH作一般存储器用;高128B因为与SFR地址重叠,故只能间接寻址,也作一般存储器用 ●理论上堆栈可以设在内部数据存储器的任何位置,复位时堆栈指针SP为 07H,但为了避开通用寄存器和位地址空间,一般设在30H-0FFH。 5、读写内部RAM与外部RAM的数据时,使用的指令有什么区别?读程序存储器的数据的指令又有什么不同? 读写内部RAM用MOV指令;读写外部RAM用MOVX指令;读程序存储器用MOVC指令,写程序存储器用MOVX指令,但为与写外部RAM相区分,需要对相应SFR的相关位进行设置。 6、若(PSW)=0x10,则当前的R0~R7在内部RAM中有哪些单元? 由(PSW)=0x10可知RS1RS0=10,故通用寄存器R0-R7在内部RAM的0x10-0x17单元。(PSW的格式P22) 第一次作业存在的问题: 第一题:5个存储空间,有的同学写的不全,漏SFR和位寻址区;有的同学对位寻址区的寻址范围写的不对,应为0x00-0xff而非0x20-0x2f。

单片机内部主要部件

1.2 单片机内部主要部件 单片机内部电路比较复杂,MCS-51系列的8051型号单片机的内部电路根据功能可以分为CPU、RAM、ROM/EPROM、并行口、串行口、定时/计数器、中断系统及特殊功能寄存器(SFR)等8个主要部件,如图1-2-1所示。这些部件通过片内的单一总线相连,采用CPU加外围芯片的结构模式,各个功能单元都采用特殊功能寄存器集中控制的方式。其他公司的51系列单片机与8051结构类似,只是根据用户需要增加了特殊的部件,如A/D转换器等。在设计程序过程中,寄存器的使用非常频繁。本节内容在了解单片机内部的组成机构基础上,重点介绍单片机内部常用的寄存器的作用。 图1-2-1 MCS-51架构 1.2.1中央处理器(CPU) 中央处理器是单片机的核心,主要功能是产生各种控制信号,根据程序中每一条指令的具体功能,控制寄存器和输入/输出端口的数据传送,进行数据的算术运算、逻辑运算以及位操作等处理。MCS-51系列单片机的CPU字长是8位,能处理8位二进制数或代码,也可处理一位二进制数据。单片机的CPU从功能上一般可以分为运算器和控制器两部分。 一、控制器 控制器由程序计数器PC、指令寄存器、指令译码器、定时控制与条件转移逻辑电路等组成。其功能是对来自存储器中的指令进行译码,通过定时电路,在规定的时刻发出各种操作所需的全部内部和外部的控制信号,使各部分协调工作,完成指令所规定的功能。各部分功能部件简述如下。 1.程序计数器PC(Program Counter) 程序计数器是一个16位的专用寄存器,用来存放下一条指令的地址,具有自动加1的功能。当CPU要取指令时,PC的内容送地址总线上,从存储器中去取出一个指令码后,PC 内容自动加1,指向下一个指令码,以保证程序按顺序执行。 PC是用来指示程序的执行位置,在顺序执行程序时,单片机每执行一条指令,PC就自动加1,以指示出下一条要取的指令的存储单元的16位地址。也就是说,CPU总是把PC 的内容作为地址,根据该地址从存储器中取出指令码或包含在指令中的操作数。因此,每当取完一个字节后,PC的内容自动加1,为取下一个字节做好准备。由于51系列单片机的寻址范围为64K,所以,PC中数据的编码范围为0000H~FFFFH,共64K。单片机上电或复位时,PC自动清0,即装入地址0000H,这就保证了单片机上电或复位后,程序从0000H 地址开始执行。

单片机的内部结构

单片机的主要组成 ①一个8位的微处理器CPU。 ②片内数据存储器RAM(128B/256B),用以存放可以读/写的数据,如运算的中间结果、最终结果以及欲显示的数据等。 ③片内程序存储器ROM/EPROM(4KB/8KB),用以存放程序、一些原始数据和表格。但也有一些单片机内部不带ROM/EPBOM,如8031、8032、80C31等。 ④四个8位并行I/O(输入/输出)接口P0—P3,每个口可以用作输入,也可以用作输出。 ⑤两个或三个定时/计数器,每个定时/计数器都可以设置成计数方式,用以对外部事件进行计数,也可以设置成定时方式,并可以根据计数或定时的结果实现计算机控制。 ⑥五个中断源的中断控制系统。 ⑦一个全双工UART(通用异步接收发送器)的串行I/O口,可实现单片机与单片机或其它微机之间串行通信。 ⑧片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接,最高允许振荡频率为12MHz。 /* BYTE Registers */ 1sfr P0 = 0x80;

2sfr P1 = 0x90; 3sfr P2 = 0xA0; 4sfr P3 = 0xB0; 5sfr PSW = 0xD0;程序状态字 6sfr ACC = 0xE0;累加器 7sfr B = 0xF0;B寄存器 8sfr SP = 0x81; 堆栈指针 9sfr DPL = 0x82;DPTR数据指针 10sfr DPH = 0x83; 11sfr PCON = 0x87;电源控制寄存器 12sfr TCON = 0x88;定时/计数控制寄存器 13sfr TMOD = 0x89; 定时/计数工作方式状态寄存器 14sfr TL0 = 0x8A; 15sfr TL1 = 0x8B; 16sfr TH0 = 0x8C; 17sfr TH1 = 0x8D; 18sfr IE = 0xA8;中断允许控制寄存器 18sfr IP = 0xB8;中断优先级控制寄存器 20sfr SCON = 0x98;串行口控制寄存器 21sfr SBUF = 0x99;串行口数据缓冲器

PIC单片机16F84的内部硬件资源

PIC单片机16F84的内部硬件资源 成都卫东 现在我们已经知道要单片机工作,就需用汇编语言编制程序。而对某个PIC单片机编程时,还需对选用的PIC单片机内部硬件资源有所了解。这里介绍PIC16F84单片机的内部结构,如图1所示的框图。由图1看出,其基本组成可分为四个主要部分,即运算器ALU和工作寄存器W;程序存储器;数据存储器和输入/ 输出(I/O)口;堆栈存储器和定时器等。现分别介绍如下。 1 运算器ALU及工作寄存器W 运算器ALU是一个通用算术、逻辑运算单元,用它可以对工作寄存器W和任何通用寄存器中的两个数进行算术(如加、减、乘、除等)和逻辑运算(如与、或、异或等)。16F84是八位单片机,ALU的字长是八位。在有两个操作数的指令中,典型的情况是一个操作数在工作寄存器W中,而另一个操作数是在通用寄存器中,或者是一个立即数。在只有一个操作数的情况下,该数要么是在工作寄存器W中,要么是在通用寄存器中。W寄存器是一个专用于ALU操作的寄存器,它是不可寻址的。 根据所执行的指令,ALU还可能会影响框图中状态寄存器STATUS的进位标志C、全零标志Z等。 2 程序存储器 单片机内存放程序指令的存储器称为程序存储器。PIC16F84的所有指令字长为14位。所以程序存储器的各存储单元是14位宽。一个存储单元存放一条指令。16F84的程序存贮器有1024(28)个存储单元(存储容量为1k)。这些程序存储器都是由FPEROM构成的。 程序存储器是由程序计数器PC寻址的。16F84的程序计数器为13位宽,可寻址8K(8×1024)的程序存储器空间,但16F84实际上只使用了1k的空间(单元地址为0~3FFH)。当访问超过这些地址空间的存储单元时,将导致循环回到有效的存储空间。 对于用过其它单片机的用户,可能会感到16F84的片内存储器容量太少了。实际上并非如此,因为16F84的指令系统都是由单字指令构成的,相应于其它由二字节、三字节甚至四字节指令的单片机而言,PIC单片机的程序存储器有效容量要比标称值扩大2 5倍到3倍。 3 数据存储器 在单片机PIC16F84中,除了有存放程序的程序存储器外,还有数据存储器。单片机在执行程序过程中,往往需要随时向单片机输入一些数据,而且有些数据还可能随时改变。在这种情况下就需用数据存储器。由于数据存储器不但要能随时读取存放在其各个单元内的数据,而且还需随时写进新的数据,或改写原来的数据。因此,数据存储器需由随机存储器RAM构成。RAM存储器在断电时,所存数据随即丢失,这在实际应用中有时会带来不便。但是,在16F84中有64×8位E2PROM数据存储器。存放在E2PROM中的数据在断电时不会丢失。 16F84中的RAM数据存储器如表1所示,该RAM分为两个存储体:即存储体0(Bank0)和存储体1(Bank1)。每个存储体均可以直接用内部总线传送信息,所以它们都是以寄存器方式工作和寻址。这些八位寄存器,又可分为通用寄存器和专用寄存器两个部分。通用寄存器存放数据,专用寄存器存放控制单片机运作的信息。每个存储体最大可扩展到7FH(128个字节)。在每个存储体中,专用寄存器被安排在低位地址空间,通用寄存器被安排在高位地址空间。 通用寄存器用法单一,但专用寄存器却各有各的用处,现将较基本的专用寄存器作一简单介绍。 (1)程序计数器(PCL、PCLATH)。程序计数器PC是对程序进行管理的计数器。PIC16F84的程序计数器为13位宽,最大可寻址的存储空间为8k×14位。实际上16F84只使用前1k×14位(0000~03FFH)存储空间。因程序计数器有13位宽,而专用寄存器只有8位。因此PC由两个专用寄存器构成。其低八位PCL是一个可读/写寄存器(地址为02H或82H),而高字节PCH(有效位5位)不能直接进行读/写操作,它是通过一个8位的保持寄存器PCLATH(地址为0A或8AH)把高5位地址传送给程序计数器的高字节。当执行CALL、GOTO指令,或写PCL时,PC值的高字节就从PCLATH寄存器中装入。 (2)状态寄存器STATUS。状态寄存器STATUS含有算术逻辑单元ALU运算结果的状态(如有无进位等)、复位状态及数据存储体选择位。有关位位的设定如表2所示,功能如下: 1)第0位。进位/借位位C。执行加、减运算指令 表2

单片机内部AD的用法

STC系列单片机内部AD的应用 作者:郭天祥来源:原创更新时间:2008-11-27 22:16:38 浏览次数:11438 STC89LE52AD、54AD、58AD、516AD这几款89系列的STC单片机内部自带有8路8位的AD转换器,分布在P1口的8位上,当时钟在40MHz以下时,每17个机器周期可完成一次AD转换。 与AD相关的几个寄存器如表1所示。 表1 STC89系列单片机AD相关寄存器 P1_ADC_EN:P1.X口的AD使能寄存器。 相应位设置为“1”时,对应的P1. X口作为AD转换使用,内部上拉电阻自动断开。 ADC_CONTR:AD 转换控制寄存器。 ADC_START:AD转换启动控制位,设置为“1”时,AD开始转换。 ADC_FLAG:AD转换结束标志位,当AD转换完成后,ADC_FLAG=1。 CHS2、CHS1、CHS0:为模拟输入通道选择,如表2所示。 表2 STC89系列单片机AD模拟通道选择设置

ADC_DATA:AD 转换结果寄存器。模拟/数字转换结果计算公式如下: 结果=256×Vin / Vcc Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。 下面一个例程演示STC89LE516AD/X2系列单片机的A/D转换功能。时钟11.0592MHz,转换结果以16进制形式输出到串行口,可以用串行口调试程序观察输出结果。(本代码摘自宏晶科技芯片手册,经作者调试可正常运行)。 新建文件part3.4.5.c,程序代码如下: #include #include // 定义与ADC 有关的特殊功能寄存器 sfr P1_ADC_EN = 0x97; //A/D转换功能允许寄存器 sfr ADC_CONTR = 0xC5; //A/D转换控制寄存器 sfr ADC_DATA = 0xC6; //A/D转换结果寄存器 typedef unsigned char INT8U; typedef unsigned int INT16U; void delay(INT8U delay_time) // 延时函数 { INT8U n; INT16U m; for (n=0;n

单片机内部资源分配

2.3 单片机内部资源分配 2.3.1 MCS-51存储器空间 MCS-51单片机在物理结构上有四个存储空间: 片内程序存储器(ROM) 片外程序存储器(外扩) 片内数据存储器(RAM) 片外数据存储器(外扩) 但在逻辑上,即从用户的角度上(地址分配),8051单片机有三个存储编址空间,即:片内程序存储器、片外程序存储器统一编址的64KB(26*210=65536个单元)的程序存储器地址空间(C:)、256B(8位地址)的片内数据存储器的地址空间(D:)以及64KB(216)片外数据存储器的地址空间(X:)。在访问三个不同的逻辑空间时,应采用不同形式的指令(具体我们在后面的指令系统学习时将会讲解),以产生不同的存储器空间的选通信号。 在MCS-51单片机的芯片内部,主要有RAM和ROM两类存储器,即所谓的片内RAM和片内ROM。 1、片内数据存储器区(RAM) 8051的内部RAM共有256个单元,通常把这256(28)个单元按其功能划分为两部分:低128(0~127)单元(单元地址为00H~7FH)和高128(128~255)单元(单元地址为80H~FFH)。表2.2所示为低128字节单元的配置情况。 低128单元是单片机的真正RAM存储器,按用途划分为工作寄存器区、位寻址区和用户RAM区三个区域。

表2.2 低128字节单元的配置 30~7FH 数据缓冲区 20~2FH 位寻址区(00~7FH) 18~1FH 工作寄存器组3(R0~R7) 10~17H 工作寄存器组2(R0~R7) 08~0FH 工作寄存器组1(R0~R7) 00~07H 工作寄存器组0(R0~R7) (1)工作寄存器区 8051共有4组工作寄存器,每组8个寄存单元,各组都以R0~R7作寄存单元名称。工作寄存器常用于存放操作数中间结果等。由于它们的功能及使用不作预先规定,因此称之为工作寄存器,有时也叫通用寄存器。4组工作寄存器占据内部RAM的00H~1FH共32个单元地址。 在任何时刻,CPU只能使用其中的一组工作寄存器,并且把正在使用的那组寄存器称之为当前寄存器组。到底是哪一组,由程序状态字寄存器PSW中RS1(D4)、RS0(D3)位的状态组合来决定。 (2)位寻址区(只有位寻址区的位可单独访问,其余的单元均只能按字节为单位访问) 内部RAM的20H~2FH单元,既可作为一般RAM字节单元使用,也可以对单元中每一位进行位操作,因此把该区称之为位寻址区。位寻址区共有16个RAM单元,计128位,每一位都有独立的位地址,其范围为00H~7FH。MCS-51具有布尔处理机功能,这个位寻址区可以构成布尔处理机的存储空间。这种位寻址能力是MCS-51的一个重要特点。表2.3为位寻址区的位地址。

单片机的硬件结构

第2章单片机的硬件结构 (一)填空题 1.通过堆栈实现子程序调用,首先要把(PC)的内容入栈,以进行断点保护。调用返回时 再进行出栈操作,把保护的断点送回(PC)。 2.80C51单片机的时钟电路包括两部分内容,即芯片内的(高增益反相放大器)和芯片外 跨接的(晶振)与(微调电容)。若调高单片机的晶振频率,则单片机的机器周期会变(低)。 3.通常单片机有两种复位操作,即(上电自动复位)和(按键手动复位)。复位后,PC值 为(0000H),SP值为(07H),通用寄存器的当前寄存器组为(第0)组,该组寄存器的地址范围是从(00H)到(07H)。 4.80C51单片机中,一个机器周期包含(6)个状态周期,一个状态周期又可划分为(2) 个拍节,一个拍节为(1)个振荡脉冲周期。因此,一个机器周期应包含(12)个振荡脉冲周期。 5.单片机程序存储器的寻址范围由PC的位数决定。80C51的PC为16位,因此程序存储 器地址空间是(64KB)。 6.MCS-51单片机由(8位CPU)、(程序存储器)、(数据存储器)、(并行I/O口)、(串行I/O 口)、(定时器/计数器)、(中断系统)、振荡器和时钟电路组成,各部分通过(内部总线(地址总线、数据总线和控制总线))相连。 (二)单项选择题 1. 下列概念叙述正确的是(D) (A)80C51中共有5个中断源,因此在芯片上相应地有5个中断请求输入引脚 (B)特殊的存取规则使得堆栈已不是数据存储区的一部分 (C)可以把PC看成是数据存储空间的地址指针 (D)CPU中反映程序运行状态和运算结果特征的寄存器是PSW 2. 取址操作后,PC的值是(C) (A)当前指令前一条指令的地址(B)当前正在执行指令的地址 (C)下一条指令的地址(D)控制寄存器中指令寄存器的地址 3. 80C51单片机中,设置堆栈指针SP为37H后就发生子程序调用,这时SP的值变为(C) (A)37H (B)38H (C)39H (D)3AH 4. 设置堆栈指针SP = 30H后,进行一系列的堆栈操作。当进栈数据全部弹出后,SP应指 向(A)

AT89S51 单片机的硬件结构

第二章 AT89S51 单片机的硬件结构 第二章 AT89S51 单片机的硬件结构 本章“从内到外”主要讲述关于AT89S51单片机的一些基础知识。首先介绍AT89S51单片机的组成、CPU 、存储器组织以及特殊功能寄存器(SFR),然后,详细讲解了AT89S51的引脚分布及其功能;最后,讨论了使用AT89S51单片机时的时钟和复位电路。 2.1 AT89S51 单片机的组成 如前所述,AT89S51单片机与MCS-51完全兼容,内部的结构如图2.1所示: 从功能上分,它包括如下部件:一个8位中央处理器(CPU);4K可在线编程Flash ;128字节RAM与特殊功能寄存器;2个16位定时/计数器;中断逻辑控制电路;一个全双工串行接口(UART);32 条可编程的I/O口线;另外,还包括一些寄存器如程序计数器PC 、程序状态寄存器PSW 、堆栈指针寄存器SP 、数据指针寄存器DPTR等部件。 2.2 AT89S51 单片机 CPU 的结构 CPU是单片机的核心,它主要由运算器(ALU)、时序控制逻辑电路(控制器)以及各种寄存器等部件组成。 ( 1 )运算器的功能是进行算术和逻辑运算。它主要由算术逻辑单元ALU(Arithmetic Logic Unit)和寄存器组成,实现“加、减、乘、除、比较”等算术运算和“与、或、异或、求补、循环”等逻辑操作。运算器中还包含一个布尔处理器,可以执行置位、清零、求补、取反、测试、逻辑与、逻辑或等操作,为单片机的应用提供了极大的便利。 ( 2 )控制器的主要功能是产生各种控制信号和时序。在CPU内部协调各寄存器之间的数据传送,

完成ALU的各种算术或逻辑运算操作;在CPU访问外部存储器或端口时,提供地址锁存信号ALE、外部程序存贮器选通信号PSEN以及读(/RD)、写(/WR)等控制信号。 ( 3 )寄存器。CPU中还有一些寄存器,如累加器(ACC)、程序状态字(PSW)、B寄存器、程序计数器PC 、堆栈指针(SP)、指令寄存器(IR)等,这些寄存器有的在片内特殊功能寄存器空间有地址映像,它们既可看作CPU的寄存器,也可看作具有确定单元的存储单元。 ?累加器ACC(Accumulator)。ACC是一个8位的寄存器,也是CPU中最重要、最繁忙的寄存器,许多运算中的数据和结果都要经过累加器。 ?程序状态字PSW(Program Status Word)。PSW是一个8位的寄存器,用于存放程序运行结果的一些特征,本书拟在特殊功能寄存器一节详细介绍。 ? B寄存器。B寄存器主要是和ACC配合完成乖法和除法运算,存放运算结果,不进行乖、除运算时,B寄存器可作为RAM使用。 ?程序计数器PC。程序计数器PC用来存放即将执行的指令地址。它是一个独立的16位寄存器,没有内存映射单元,总是指向将要执行的指令的地址,并具有内容自动加l功能。 ?堆栈指针SP(Stack Pointer)。为一个指向堆栈顶部的指针,当执行子程序调用或中断服务程序时,需要将下一条要执行的指令地址即PC值压入堆栈保存起来,当子程序或中断返回时,再将SP 指向单元的内容回送到程序计数器PC中。这是一个很重要的指针。 ?指令寄存器IR(Instruction Register)。指令寄存器的功能是存放指令代码,CPU执行指令时,由程序存储器中读取指令代码送入指令寄存器,经译码器译码后,由定时与控制部分发出相应的控制信号,以完成指令功能,它也没有内存映射单元。 ( 4 )布尔(位)处理器。除对字节(Byte)进行操作外,AT89S51单片机借用PSW中的C可以直接对位(Bit)进行操作,在进行位操作时,C就类似进行字节操作的ACC用作数据源或存放结果。通过位操作指令可以实现置位、清零、取反以及位逻辑运算等操作。 2.3 AT89S51 单片机系统的存贮器组织 单片机系统中,存放程序的存储器称为程序存储器,类似与通用计算机系统中的ROM,只能进行读操作,存放数据的存储器称为数据存储器,相当于通用计算机系统中的RAM。与通用计算机系统不同,单片机系统中的程序存储器和数据存储器都有各自的读信号(PSEN 、/RD ),换言之,单片机系统的存储器可以分成两个物理存储器,即程序存储器和数据存储器,它们的范围都是64KB 。

单片机内部结构详解

单片机内部结构详解 MCS-51单片机结构 MCS-51系列单片机产品有8051,8031,8751,80C51,80C31等型号(前三种为CMOS芯片,后两种为CHMOS芯片)。它们的结构基本相同,其主要差别反映在存储器的配置上。8051内部设有4K字节的掩模ROM程序存储器,8031片内没有程序存储器,而8751是将8051片内的ROM换成EPROM。由ATMEL公司生产的89C51将EPROM改成了4K的闪速存储器,他们的结构大同小异,本章将对8051单片机的结构作一介绍。 MCS-51单片机组成 MCS-51单片机是在一块芯片中集成了CPU,RAM,ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本功能部件。MCS-51单片机内包含下列几个部件: ◆ 一个8位CPU; ◆ 一个片内振荡器及时钟电路; ◆ 4K字节ROM程序存储器; ◆ 128字节RAM数据存储器; ◆ 两个16位定时器/计数器; ◆ 可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路; ◆ 32条可编程的I/O线(四个8位并行I/O端口); ◆ 一个可编程全双工串行口; ◆ 具有五个中断源、两个优先级嵌套中断结构。

8051单片机框图如图所示。各功能部件由内部总线联接在一起。图中4K(4096)字节的ROM存储器部分用EPROM替换就成为8751;图中去掉ROM部分就成为8031的结构图。 CPU CPU是单片机的核心部件。它由运算器和控制器等部件组成。 1. 运算器 运算器的功能是进行算术运算和逻辑运算。可以对半字节(4位)、单字节等数据进行操作。例如能完成加、减、乘、除、加1、减1、BCD码十进制调整、比较等算术运算和与、或、异或、求补、循环等逻辑操作,操作结果的状态信息送至状态寄存器。 8051运算器还包含有一个布尔处理器,用来处理位操作。它是以进位标志位C为累加器的, 可执行置位、复位、取反、等于1转移、等于0转移、等于1转移且清0以及进位标志位与其 他可寻址的位之间进行数据传送等位操作。也能使进位标志位与其他可位寻址的位之间进行逻 辑与、或操作。 2. 程序计数器PC 程序计数器PC用来存放即将要执行的指令地址,共16位,可对64K程序存储器直接寻址。执行指令时,PC内容的低8位经P0口输出,高8位经P2口输出。 ?指令寄存器 指令寄存器中存放指令代码。CPU执行指令时,由程序存储器中读取的指令代码送入指令 寄存器,经译码后由定时与控制电路发出相应的控制信号,完成指令功能。 ?定时与控制部件 ①时钟电路 8051片内设有一个由反向放大器所构成的振荡电路,X TAL1和 X TAL2分别为振荡电路的输入和输出端,时钟可以由内部方式产生或外部方式产生。内部方式时钟电路如图2-2所示。 在X TAL1和 X TAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。定时元件通常采用 石英晶体和电容组成的并联谐振回路。晶振可以在1.2MH z到12MH z之间选择,电容值在5-30P F之间选择,电容的大小可起频率微调作用。

单片机的基本组成

单片机的基本组成 在讲单片机的组成之前我们先来说一下大家都熟知的计算机 一、计算机的经典结构 在设计计算机时匈牙利籍数学家冯.诺依曼提出的“程序存储”和“二进制运算”的思想。 1、二进制运算决定了计算机的硬件结构。 二进制运算包括二进制算术运算和逻辑运算(逻辑运算的基础是逻辑代数,又称布尔代数)。逻辑量只表示两种不同的状态,可以对应电子线路中的电阻高低、二极管、三极管的通断等。因此,二进制运算决定了计算机可以由电子元器件,特别是集成电路组成。 2、程序存储决定了软件控制硬件工作。因此,计算机的基本结构包括硬件和软件两部分。计算机的工作原理:由输入设备将软件送入存储器,然后由控制器逐条取出存储器中的控制软件,并运行,再将运行结果送到输出设备。 3、计算机的经典结构 根据以上思路,计算机由运算器、控制器、存储器和输入设备、输出设备组成。 图1.1.1 计算机经典结构图 对经典结构中各部分有机组合,就构成了微型计算机。由于各部分的具体电路(元器件及元器件的组合方式)不同,又形成了各种应用形态。 二、微型计算机(Microcomputer)组成及应用形态 1、微型计算机组成 将经典结构中的运算器、控制器组合在一起,再增加一些寄存器等,集成为一个芯片,这个芯片称为微处理器(Microcontroller),即CPU(Center Processing Unit )。这样微型计算机就由CPU、存储器、输入/输出(I/O)接口组成。再配以输入/输出(I/O)设备和软件,就构成了微型计算机应用系统,简称微型计算机。 图1.1.2 微型计算机系统结构图

2、应用形态 (1)系统机(多版机) 微处理器CPU、存储器、I/O端口电路和总线接口等组装在一块主板上,再通过系统总线和外设适配卡连接键盘、显示器、打印机等,再配上系统软件就构成了一个完整的计算机系统。 图1.1.3 微型计算机结构图 这就是办公室、家庭使用的PC机的典型形态。由于较大的存储容量(存储器、硬盘、软盘、光盘等),输入、输出设备齐全,而且软件丰富(系统软件和应用软件),能够进行海量计算和应用系统开发。 (2)单板机 将CPU、存储器、I/O接口芯片和简单的I/O设备等装配在一块线路板上,再配上监控程序(固化在ROM中)就构成了单板机。 图1.1.4 单板机结构图 实验开发系统就是单板机的典型形态:由于有硬件和软件,能独立运行,但I/O设备简单,特别是软件资源少(只有监控程序),不能应用于海量计算和大型应用程序的开发,主要用于计算机原理教学和简单的测试(调试)系统。 三单片机 将CPU、存储器、I/O接口电路集成到一块芯片上,这个芯片称为单片机。

相关文档
最新文档