STC51-C51基础知识

发布者:古古斋最新更新时间:2022-02-11 来源: eefocus关键字:STC51  C51  基础知识 手机看文章 扫描二维码
随时随地手机看文章

1 单片机定义与结构

1.1 什么是单片机

        单板机:将CPU芯片、存储器芯片、I/O接口芯片和简单的I/O设备(小键盘、LED显示器)等装配在一块印刷电路板上,再配上监控程序(固化在ROM中),就构成了一台单板微型计算机(简称单板机)。单板机的I/O设备简单,软件资源少,使用不方便。早期主要用于微型计算机原理的教学及简单的测控系统,现在已很少使用。

        单片机:在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。 Intel公司推出了MCS-51系列单片机:集成 8位CPU、4K字节ROM、128字节RAM、4个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K,并有控制功能较强的布尔处理器。


1.2 单片机的内部结构

        单片机内部结构示意图如下图所示,它由微处理器CPU、随机存取存储器RAM、只读存储器ROM、基本输入/输出(I/O)接口电路、定时器/计数器和中断系统等部件组成,并把它们制作在一块大规模集成电路芯片上,就构成一个完整的单片微型计算机。

1.3 51单片机标识信息

        通常我们所说的51单片机是指以51内核扩展出的单片机。生产51单片机的厂商很多,51单片机的型号也很多。下表列出了一些51单片机的厂商和型号。

        以上提到的单片机都是51内核扩展出来的单片机,只要学会了51单片机的应用,这些单片机也就基本都能使用了。单片机都是相通的,不管是51单片机还是其它单片机,都是用户编程控制来实现一定的功能。


2 51单片机外部引脚介绍

2.1 标识解释

        STC-----前缀,表示芯片为STC公司生产的产品。其他前缀还有如AT,i,Winbond,SST等。

        8---------表示该芯片为8051内核芯片。

        9---------表示内部含Flash E^2PROM储存器。还有如80C51中的0表示内部含Mask ROM(掩模ROM)存储器;如87C51中7表示内部含ERPOM存储器(紫外线可擦除ROM)。

        C--------表示该器件为CMOS产品。还有如89LV52和89LE58中的LV和LE都表示该芯片为低电压产品(通常为3.3V供电);而89S52中的S表示该芯片含有可串行下载功能的Flash存储器,即具有ISP可在线编程功能。

        5---------固定不变。

        1---------表示该芯片内部程序存储空间的大小,1为4KB,2为8KB,3为12KB,即该数乘上4KB就是芯片内部程序存储空间大小。

        40--------表示该芯片外部晶振最高可接入40MHz。对AT单片机数值一般为24,表示其外部晶振最高为24MHz。

        C---------产品级别,表示芯片使用温度范围。C表示商业级,温度范围为0℃~+70℃。


芯片上标号对应温度范围

image.png

        PDIP---产品封装型号PDIP表示双列直插式。

        0707---表示本批芯片生产日期为07年第7周。

        CU8138.00D-----不详。


2.2 区分芯片引脚号

        首先找到单片机表面凹进去的小圆坑,或这个使用颜色标识的小标记(圆点或三角或其他小图形),这个小圆坑或者小标记所对应的引脚就是这个芯片的第1引脚,然后逆时针方向数下去。

        按照上图为例介绍单片机各个引脚的功能(40个引脚):


        ① 电源和时钟引脚。如Vcc、GND、XTAL1、XTAL2(需掌握)


        VCC(40脚)、VSS(20脚)—单片机的电源引脚,不同型号的单片机需要接入对应的电源电源电压。开发板上配带的单片机的供电电压为5V,低压单片机的电压为3.3V,用户在使用时要查看芯片手册,确保接入正确的电压。

        XTAL1(19脚)、XTAL2(18脚)—外部时钟引脚,XTAL1为内部振荡电路的输入端,XTAL2为内部振荡电路的输出端。8051的时钟有两种振荡方式,一种是片内时钟振荡方式,需要在这两个引脚上外接石英晶体和振荡电容,振荡电容的值一般为10pf~30pf;另一种是外部时钟方式,需要将XTAL1接地,外部时钟信号由XTAL2脚输入。


        ② 编程控制引脚。如RST、PSEN、ALE/PROG、EA/VPP,了解即可。


        RST(9脚)—单片机复位引脚。当输入连续两个机器周期以上为高电平时为有效,用来完成单片机的复位初始化操作,复位后程序计数器PC=0000H,即复位后将从程序存储器的0000H单元读取第一条指令码,通俗的讲,就是单片机从头开始执行程序。

        PSEN(29脚)—程序存储器允许输出控制端。在读外部程序存储器时PSEN低电平有效,以实现外部程序存储器单元的读操作,由于现在我们使用的单片机内部已经有足够大的ROM,所以几乎没有人再去扩展外部ROM,因此这个引脚大家只需了解即可。

        ALE/PROG(30脚)—在单片机扩展外部RAM时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。ALE有可能是高电平也可能是低电平,当ALE是高电平时,允许地址锁存信号,当访问外部存储器时,ALE信号会跳变(即由正变负)将P0口上低8位地址信号送入锁存器;当ALE是低电平时,P0口上的内容和锁存器输出一致。关于锁存器的内容,我们后面会有详细介绍。在没有访问外部存储器期间,ALE以1/6振荡周期频率输出(即6分频),当访问外部存储器时,以1/12振荡周期输出(即12分频)。从这里可以看到,当系统没有进行扩展时,ALE会以1/6振荡周期的固定频率输出,因此可以作为外部时钟,或作为外部定时脉冲使用。PROG为编程脉冲的输入端,单片机的内部有程序存储器(ROM),它的作用是用来存放用户需要执行的程序,那么我们怎样才能将写好的程序存入这个ROM中呢?实际上,我们是通过编程脉冲输入才写进去的,这个脉冲的输入端口就是PROG。现在有很多单片机都已经不需要编程脉冲引脚往内部写程序了,比如我们用的STC单片机,它可以直接通过串口往里面写程序,只需要三条线与计算机相连即可。而且现在的单片机内部都已经带有丰富的RAM,所以也不需要再扩展RAM了,因此ALE/PROG这个引脚的用处也已经不大。

        EA(31脚)— EA接高电平时,单片机读取内部程序存储器。当扩展有外部ROM时,当读取完内部ROM后自动读取外部ROM。EA接低电平时,单片机直接读取外部ROM。8031单片机内部是没有ROM的,所以在使用8031单片机时,这个引脚是一直接低电平的。8751单片机烧写内部EPROM时,利用此引脚输入21V的烧写电压。因为现在我们用的单片机都有内部ROM,所以一般在设计电路时此引脚始终接高电平。


        ③ I/O口引脚。如P0、P1、P2、P3、,4组8位I/O(需掌握)


        P0口(32脚~39脚)—双向8位三态I/O口,每个口可独立控制。51单片机P0口内部没有上拉电阻,为高阻状态,所以不能正常地输出高/低电平,因此该组I/O口在使用时务必要外接上拉电阻,一般我们选择接入10k欧的上拉电阻。

        P1口(1脚~8脚)—准双向8位I/O口,每个口可独立控制,内带上拉电阻,这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。之所以称它为“准双向”是因为该口在作为输入使用前,要先向该口进行写1操作,然后单片机内部才可正确读出外部信号,也就是要使其先有个“准”备过程,所以才称为准双向口。单片机P1.0引脚的第二功能为T2定时器/计数器的外部输入,P1.1引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制端。

        P2口(21脚~28脚)—准双向8位I/O口,每个口可独立控制,内带上拉电阻,与P1口相似。

        P3口(10脚~17脚)—准双向8位I/O口,每个口可独立控制,内带上拉电阻,作为第一功能使用时就当做普通I/O口,与P1口相似,作为第二功能使用时,各引脚的定义如下表所示。值得强调的是,P3口的每一个引脚均可独立定义为第一功能的输入/输出或第二功能。


3 电平特性

        数字电路中只有两种电平:高电平和低电平

        单片机为TTL电平:

                高电平:5V或者3.3V,取决单片机电源。

                低电平:0V

        计算机串口的RS232电平:

                高电平:-12V

                低电平:+12V

        所以当我们用单片机跟电脑通信的时候,我们要通过各种元器件将单片机的电平转换为计算机可识别的电平才能跟电脑进行通信。


4 二进制逻辑运算

        ① 按位取反: ~ 每一位上的0和1互换;

        ② 左移: << 左移运算运算符左边是移位对象,右边是整型表达式,代表左移的位数。左移时,右端(低位)补0;左端(高位)移出的部分舍弃。

        ③ 右移: >> 右移时,右端(低位)移出的二进制舍弃,左端(高位)移入的二进制分两种情况:对于无符号整数和正整数,高位补0;对于负数,高位补1。


short int a =-8,b;

b=a>>2;

//a的二进制码:1111111111111000

//移位后     :1111111111111110

        ④ 按位与: & 全1为1,其它为0;

        ⑤ 按位异或: ^ 不同为1,其它为0;

        ⑥ 按位或: | 有1为1,其它为0;


5 单片机的基础知识介绍

5.1 80C51系列介绍

        80C51是MCS-51系列中的一个典型品种;其它厂商以8051为基核开发出的CMOS工艺单片机产品统称为80C51系列。当前常用的80C51系列单片机主要产品有:

                ①Intel的:80C31、80C51、87C51,80C32、80C52、87C52等;

                ②ATMEL的:89C51、89C52、89C2051等;

                ③Philips、华邦、Dallas 、STC、Siemens(Infineon)等公司的许多产品 。


80C51的引脚封装

P3口第二功能各引脚功能定义

image.png


        总线(BUS)是计算机各部件之间传送信息的公共通道。微机中有内部总线和外部总线两类。内部总线是CPU内部之间的连线。外部总线是指CPU与其它部件之间的连线。 外部总线有三种: 数据总线DB(Data  Bus), 地址总线 AB(Address  Bus)和控制总线 CBControl   Bus)。

        CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器

        RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;

        ROM:用以存放程序、一些原始数据和表格;

        I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;

        T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;

        五个中断源的中断控制系统;

        一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;

        片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率取决于单片机型号及性能。


5.2 单片机工作的基本时序

        机器周期和指令周期

                ①振荡周期: 也称时钟周期, 是指为单片机提供时钟脉冲信号的振荡源的周期,我们开发板上为12MHZ。 

                ②状态周期: 每个状态周期为时钟周期的 2 倍, 是振荡周期经二分频后得到的。 

                ③机器周期: 一个机器周期包含 6 个状态周期S1~S6, 也就是 12 个时钟周期。 在一个机器周期内, CPU可以完成一个独立的操作。 

                ④指令周期: 它是指CPU完成一条操作所需的全部时间。 每条指令执行时间都是有一个或几个机器周期组成。MCS - 51 系统中, 有单周期指令、双周期指令和四周期指令。


5.3 利用C语言开发单片机

        C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。目前,使用C语言进行程序设计已经成为软件开发的一个主流。用C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进、扩充和移植。

        一个简单的单片机C程序要有什么?


#include          //包涵头文件

void main()                //程序主函数

{

while(1)

{

}

}

C-51的基本语句

image.png

        if-else语句:


//如果表达式的值为真(非0),则执行语句1,否则执行语句2 

if(表达式) 

    {语句1;}

else  

    {语句2;}

        while语句:


//while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。

while(表达式)

  {语句;}

        do-while 语句:


//这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真, 如果为真则继续循环;如果为假, 则终止循环。因此, do-while循环至少要执行一次循环语句。

do

  {语句;}

while(表达式);

        for语句:


//它的执行过程如下:

//1)先求解表达式1。

//2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。

//3)求解表达式3。

//4)转回上面第2)步继续执行。

//循环结束,执行for语句下面的一个语句。

for(表达式1;表达式2;表达式3)

 {语句}

        switch语句:


//其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

switch(表达式)

  case常量表达式1:语句1;

  case常量表达式2:语句2;

   … 

  case常量表达式n:语句n;

  default        :语句n+1;

}

        函数的定义:


返回变量类型 函数名(输入变量类型)

{

函数体;

}

unsigned char read(unsigned char addr)

{

unsigned char dat;        //定义一个变量存放返回值

(do anything you want); //函数中的程序。

return dat;               //返回函数的返回值

}

        函数的调用:在函数调用之前要在主函数前面加入上该函数的声明。(或者你可以放在头文件里面,包含该头文件时,就可以声明了。)


5.4 C51中的基本数据类型

        大家在 C 语言的书籍上还能看到有short int, long int, signed short int 等数据类型, 在单片机的C 语言中我们默认的规则如下: short int 即为 int, long int 即为 long, 前面若无 unsigned 符号则一律认为是 signed 型。


5.5 C51 数据类型扩充定义

        单片机内部有很多的特殊功能寄存器,每个寄存器在单片机内部都分配有唯一的地址,一般我们会根据寄存器功能的不同给寄存器赋予各自的名称,当我们需要在程序中操作这些特殊功能寄存器时,必须要在程序的最前面将这些名称加以声明,声明的过程实际就是将这个寄存器在内存中的地址编号赋给这个名称,这样编译器在以后的程序中才可认知这些名称所对应的寄存器。对于大多数初学者来讲, 这些寄存器的声明已经完全被包含在 51 单片机的特殊功能寄存器声明头文件 " reg51.h" 中了, 初学者若不想深入了解,完全可以暂不操作它。

        ①sfr—(sfr 变量名=地址值;)—特殊功能寄存器的数据声明,声明一个8位的寄存器。

        ②sfr16—(sfr16 变量名=地址值;)—16位特殊功能寄存器的数据声明。

        ③sbit—(sbit 变量名=地址值;)— 特殊功能位声明, 也就是声明某一个特殊功能寄存器中的某一位。

        ④bit—(bit 变量名=地址值;)—位变量声明,当定义一个位变量时可使用此符号。

        sfr SCON = Ox98;

        SCON 是单片机的串行口控制寄存器, 这个寄存器在单片机内存中的地址为 Ox98 。 这样声明后 , 我们在以后要操作这个控制寄存器时, 就可以直接对 SCON 进行操作, 这时编译器也会明白 , 我们实际要操作的是单片机内部Ox98 地址处的这个寄存器,而 SCON 仅仅是这个地址的一个代号或是名称而已,当然,我们也可以定义成其他的名称。

        sfr16 T2 = OxCC;

        声明一个16位的特殊功能寄存器, 它的起始地址为 OxCC 。

        sbit TI =SCON^1;

        SCON 是一个 8 位寄存器, SCON ^ 1 表示这个 8 位寄存器的次低位, 最低位是 SCON^O;SCON^7 表示这个寄存器的最高位。该语句的功能就是将 SCON 寄存器的次低位声明为 TI,以后若要对 SCON 寄存器的次低位操作, 则可直接操作 Tl。 


5.6 C51 常用到的一些预处理命令

        #define:


#define A P0(注意后面不用加分号)

        #typedef:


typedef unsigned char uint;(后面要加分号)

        重新定义一些常用的关键词,可以增强程序的可移植 性,因为在不同的编译软件上面,C语言的数据类型 的关键词的位宽是不一样的。


        #ifndef…#endif:

[1] [2]
关键字:STC51  C51  基础知识 引用地址:STC51-C51基础知识

上一篇:STC51-Keil使用及流水灯设计
下一篇:《初学者C51自学笔记》之定时器四种工作方式(二)

推荐阅读最新更新时间:2024-11-13 11:01

总结C51、STM32和S3C2440的时钟体系和定时器
/* 名称:总结C51、STM32和S3C2440的时钟体系和定时器 说明:对于C51单片机来说,其谈不上什么时钟体系。片上运行的所有东西都靠一个时钟脉冲提供–外部晶振。 对于STM32来说,其时钟体系比较复杂。为了达到降低能耗的目的,再设计STM32时,其厂商特地设计了一个STM32的时钟树。就连最简单的点亮一个LED灯,都必须配置其时钟树,再打开对应的时钟开关。 在这里简单介绍一些STM32的时钟树的主要部分: 对于这个复杂的时钟树,它的来源可以为外部高速时钟、外部低速时钟、内部低速时钟、内部高速时钟(HSE、HSI、LSI、LSE)。当然,具体选择哪个需要根据需要。在这里选择一个主要的来讲:就是外部高速时钟(HSE)。然
[单片机]
外中断C51程序
没有中断时以流水灯显示,外中断0使左右4个LED交替闪烁,外中断1使LED闪亮, #include reg51.h unsigned char code design ={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00}; void Delay(unsigned int i){ unsigned int j; for(;i 0;i--) for(j=0;j 125;j++); } void main(){ unsigned char i; EA=1; EX0=1; EX1=1; IT0=1; //脉冲触发方式 IT1=0; //使用电平触发
[单片机]
单片机基础(四):C51对C语言的扩展
C51对C语言的扩展 C51与标准C语言在数据结构、I/O处理、函数等方面与标准C语言存在差别 数据结构 sfr、sfr16 特殊功能寄存器型变量 特殊功能寄存器(SFR,Special Function Register)在单片机中有很重要的作用,常见的SFR是8位,所以sfr16用于表示16位的SFR 定义方式为 变量类型 变量名 = 地址 如 sfr P1 = 0x90 所有的sfr、sfr16型变量都已定义在 reg51.h 、 reg52.h 中 bit 、sbit 位变量 bit 、sbit 型变量在内存中都只占一个二进制位 bit 用于定义一般可处理位的变量,sbit 用于定义特殊功能寄存器中的可位寻
[单片机]
单片机基础(四):<font color='red'>C51</font>对C语言的扩展
C51自学笔记】独立键盘+矩阵键盘
独立键盘: 键盘: v键盘分编码键盘(如PS2的键盘)和非编码键盘。 v键盘上按键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如BCD码键盘、ASCLL码键盘等。 v而靠软件编程来识别的称为非编码键盘; v 在单片机组成的各种系统中,用的最多的是非编码键盘。非编码键盘又分为:独立式非编码键盘和行列式非编码键盘。 独立键盘: 符合线与概念:开关闭合之后,IO为低电平(一条线上,一端为0,另一端也为0) 线或:有一端为高组态,完全看另一端的表现。 防抖动: 硬件消抖:CPU太过繁忙 软件消抖:延时函数 如何检测键盘是否按下: 给IO口置为1,时刻检测IO,如果IO为
[单片机]
【<font color='red'>C51</font>自学笔记】独立键盘+矩阵键盘
单片机C语言C51的程序结构
(1)C51中定义的库函数和标准C语言定义的库函数不同。标准的C语言定义的库函数是按通用微型计算机来定义的,而C51中的库函数是按51单片机相应情况来定义的; (2)C51中的数据类型与标准C的数据类型也有一定的区别,在C51中还增加了几种针对51单片机特有的数据类型; (3)C51变量的存储模式与标准C中变量的存储模式不一样,C51中变量的存储模式是与51单片机的存储器紧密相关; (4)C51与标准C的输入输出处理不一样,C51中的输入输出是通过51串行口来完成的,输入输出指令执行前必须要对串行口进行初始化; (5)C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。
[单片机]
ucos在s3c2410上运行过程整体剖析之基础知识
用户模式(user模式),运行应用的普通模式; 快速中断模式(fiq模式),用于支持数据传输或通道处理; 中断模式(irq模式),用于普通中断处理。 超级用户模式(svc模式),操作系统的保护模式 异常中断模式(abt模式),输入数据后登入或预取异常中断指令 系统模式(sys模式),是操作系统使用的一个有特权的用户模式 未定义模式(und模式),执行了未定义指令时进入该模式 外部中断,异常操作或软件控制都可以改变中断模式。大多数应用程序都时是在用户模式下运行。进入特权模式是为了处理中断或异常请求或操作保护资源服务的。 这些工作模式是芯片硬件提供的程序运行的不同环境,不同的模式有不同的硬件访问权限,使用不同的寄存器。这
[单片机]
ucos在s3c2410上运行过程整体剖析之<font color='red'>基础知识</font>
Keil C51编译错误总结
1.第一种错误信息 ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_WRITE_GMVLX1_REG?D_GMVLX1 CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_SPI_SEND_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP ***WARNING L15: MULTIPLE CA
[单片机]
C51学习心得体会,函数的传引用调用和传值调用方法
传值调用建立参数的一份拷贝并把它传给调用的函数,在调用函数中修改参数值的拷贝不影响原始的变量值;传引用调用允许调用函数修改原始变量的值。 C语言用指针*和间接引用运算符&模拟传引用调用,数组会自动模拟传引用调用。传引用调用可以在被调用函数中修改调用函数环境中的参数变量,传值调用保护数据。 e.g. (1)传值调用 int cubeByValue(int); main() { int num=5,result; result=cubeByValue(num); } int cubeByValue(int n) { return n*n*n; } (2)传引用调用 int cubeByValue(int *); main() {
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved