您的位置:网站首页 > 电器维修资料网 > 正文 >
51系列单片机的内部结构
来源: 日期:2013-11-23 22:17:13 人气:标签:
at89s51采用片内、片外统一编址的64kb(ooooh~ffffh)程序存储器地址空间。片内有4kb flash memery,地址范围为ooooh~offfh,既可在线编程(isp),也可以用传统方法进行编程。
采用汇编语言或c语言编写的源程序,必须通过编译软件(如keil c51)把编译生成二进制代码,即机器码。用户编写的程序、原始数据、表格等,都是以二进制的形式存放在程序存储器中的。计算机的工作,就是按照事先编好的程序从ooooh地址单元一条条地循序执行的。
当at89s51(31)脚ea接高电平时,从片内rom中的ooooh地址单元开始执行程序。当at89s51(31)脚ea接低电平时,片内rom不起作用,cpu只能从片外rom中取指令。
内部rom ooooh~002ah共43个单元,被分为六段,作为程序运行的入口地址使用。其中:
0000h~0002h为复位后或初始化引导程序地址区;0003h~000ah外部中断0中断入口地址区;000bh~0012h定时器/计数器o中断入口地址区;0013h~001ah外部中断1中断入口地址区;001bh~0022h定时器/计数器1中断入口地址区;0023h~002ah串行中断入口地址区。
通常,我们编写程序时不得占用上述中断程序入口地址单元,即0003h~002ah单元。也就是说,主程序一般不放在该地址空间。编程时,可以采用起始伪指令org,跳过0003h~002ah单元。
伪指令,是告诉汇编程序如何进行汇编的一类指令,不会被汇编成机器代码,只能为汇编软件(如keilc51)所识别。
单片机复位后,是从0000h单元开始取指令执行程序的。因此,应在0000h~0002h三个单元存放一条无条件转移指令,转到主程序,程序结构如下:
org000h;用伪指令org指示随后的指令代码从0000h地址单元开始存放。
ljmpstart;在0000h~0002h存放一条长跳转指令,执行该指令,程序转到以start为语句标号的地址执行。
org0030h;伪指令org指示随后的指令代码从0030h地址单元开始存放。
start:;start是主程序入口地址标号,主程序开始。
end;结束伪指令,标志程序代码到此结束。
通过该程序,保留了各中断入口地址。对各个中断入口地址的使用,我们在学习中断系统时再进行介绍。
3.数据存储器(ram)
单片机的数据存储器有片内和片外之分.at89s51片内有256字节ram,其中高128单元被专用寄存器占用,低128字节供用户使用,用于存放可读写的数据。片外数据存储器可扩展6kb存储空间,地址范围为0000h~ffffh。片内和片外ram的地址空间各自独立,指令mov用于片内数据存储器之间的传送,指令movx用于片外数据存储器和累加器a之间的数据传送。
at89s51内部ram共有256字节,通常分为低128字节(地址00h~7fh)和高128字节(地址80h~ffh)两部分。低128字节,按其用途分为三个区域,如下表所示。
(1)工作寄存器区
工作寄存器区有四组工作寄存器,每组8个寄存器,用于存放操作数及中间结果等。其地址为内部ram的00h~1fh单元地址。在任一时刻,cpu只能使用其中一组寄存器,并把正在使用的那组寄存器称为当前寄存器组,用r0~r7表示。当前使用的到底是哪一组工作寄存器,则由程序状态字寄存器psw得rs1、rso位的状态组合决定,下表为工作寄存器选择。
rs1和rso的状态可以通过指令修改,如指令:
setbrs1;置rs1为1
clrrs0;置rs0为0
置当前工作寄存器为第2组,r0~r7的物理地址为10h~17h。
(2)位寻址区
内部ram的20h~2fh单元,既可作为一般ram单元使用,进行字节操作,也可以对各ram单元的每一位进行位操作,因此,把该区又称为位寻址区。位寻址区有16字节ram单元,共128位,位地址为00h~7fh。可以用位操作类指令对其进行位操作。如指令:
clr00h;00h为位地址,而不是字节地址,将位地址00h清零setb07h;07h为位地址,不是字节地址,将位地址07h置1当位地址为80h~ffh时,所代表的是特殊功能寄存器的位地址。
如指令:clrp1.0clr90h
执行的结果是一样的,因为p1.0的位地址就是90h。
(3)用户ram区及堆栈
用户ram区,包括堆栈区和用户标志区等用户自己设定的数据区。其地址在内部ram低128单元中。如果用户的程序要使用四组工作寄存器,其单元地址为30h~7fh,共80个单元,如果用户程序不需要四组工作寄存器,则其中一部分工作寄存器区也可作用户ram使用。用户ram区中的堆栈,用来暂存数据和地址,它是按“先进后出”
的原则存取数据的。
堆栈有进栈和出栈两种操作,由栈指针sp管理,分别采用压栈和出栈指令push和pop进行数据的存和取。
系统复位后,sp的值为07h,此时堆栈是从08h单元开始的。由于08h~1fh单元属于工作寄存器1~3区,如果程序中要用到这些区, 好把sp值改为2fh或更大。堆栈 好在内部ram的30h~7fh单元中开辟。sp值一经确定,堆栈的位置也就确定下来了。由于sp可通过指令初始化为不同值,因此堆栈的位置是浮动的。如:
movsp,#30h;sp赋初值30h,即置栈底位置clra;累加器a清零,(a)=00hpusha;sp自动加1,(sp)=31h,再把a的内容压入31h中popa;把31h中的内容弹出到a中,然后sp自动减1,(sp)=30h说明:():表示某寄存器、存储单元或表达式的内容。(()):表示某寄存器、存储单元或表达式的内容为地址单元的内容。
4.特殊功能寄存器(sfr)
内部ram的高128单元是特殊功能寄存器区,其单元地址为80h~ffh。本文只讲解累加器acc。
累加器a是 常用的特殊功能寄存器。它既可存放操作数,也可存放运算的中间结果。51系列单片机(at89s51)中大部分单操作数指令的操作数取自累加器,许多双操作数指令中的一个操作数也取自累加器。
如:指令mova,rn;把当前工作寄存器的内容送累加器a。指令mova,#data;把立即数data送累加器a。
5.定时器/计数器
51系列单片机(at89s51)共有2个16位定时器/计数器,用以实现定时或计数功能,并以其定时或计数结果对计算机进行控制。
6.并行i/o口
at89s51共有四个8位i/o口po、p1、p2、p3,以实现数据的并行输入输出。在下面的实例中,我们便是用p1口连接8只发光二极管,并通过程序对其进行控制。
7.串行口
at89s51有一个全双工的串行口,以实现单片机和其他设备之间的串行数据传送。该串行口既可作为全双工异步通信收发器使用,也可作为同步移位器使用。
8.中断控制系统
at89s51共有5个中断源,即外中断2个、定时/计数中断2个、串行中断1个。
综上所述,51系列单片机(at89s51)虽然只是一个芯片,但具有计算机应该具有的基本部件,是一个简单的微型计算机系统。
【看看这篇文章在百度的收录情况】
相关文章
- 上一篇: 51单片机和PIC单片机的区别
- 下一篇: 六大标准判断LED照明显示屏质量