51单片机C语言学习 2

发布者:电子科技爱好者最新更新时间:2016-01-21 来源: eefocus关键字:51单片机  C语言学习 手机看文章 扫描二维码
随时随地手机看文章
第二课 初步认识51芯片

  上一课我们的第一个项目完成了,可能有懂C语言的朋友会说,"这和PC机上的C语言没有多大的区别呀"。的确没有太大的区别,C语言只是一种程序语言的统称,针对不同的处理器相关的C语言都会有一些细节的改变。编写PC机的C程序时,如要对硬件编程你就必须对硬件要有一定的认识,51单片机编程就更是如此,因它的开发应用是不可与硬件脱节的,所以我们先要来初步认识一下51苾片的结构和引脚功能。MSC51架构的芯片种类很多,具体特点和功能不尽相同(在以后编写的附录中会加入常用的一些51芯片的资料列表),在此后的教程中就以Atmel公司的AT89C51和AT89C2051为中心对象来进行学习,两者是AT89系列的典型代表,在爱好者中使用相当的多,应用资料很多,价格便宜,是初学51的首选芯片。嘿嘿,口水多多有点卖广告之嫌了。:P

 
图2-1 AT89C51和AT89C2051引脚功能图

AT89C51

AT89C2051

4KB可编程Flash存储器(可擦写1000次)

2KB可编程Flash存储器(可擦写1000次)

三级程序存储器保密

两级程序存储器保密

静态工作频率:0Hz-24MHz

静态工作频率:0Hz-24MHz

128字节内部RAM

128字节内部RAM

2个16位定时/计数器

2个16位定时/计数器

一个串行通讯口

一个串行通讯口

6个中断源

6个中断源

32条I/O引线

15条I/O引线

片内时种振荡器

1个片内模拟比较器

表2-1 AT89C51和AT89C2051主要性能表

  图2-1中是AT89C51和AT89C2051的引脚功能图。而表2-1中则是它们的主要性能表。以上可以看出它们是大体相同的,由于AT89C2051的IO线很少,导致它无法外加RAM和程序ROM,片内Flash存储器也少,但它的体积比AT89C51小很多,以后大家可根据实际需要来选用。它们各有其特点但其核心是一样的,下面就来看看AT89C51的引脚具体功能。
  1.电源引脚
    Vcc 40 电源端
    GND 20 接地端
    *工作电压为5V,另有AT89LV51工作电压则是2.7-6V, 引脚功能一样。

  2.外接晶体引脚

 
图2-2 外接晶体引脚

    XTAL1 19
    XTAL2 18
    XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。
    *型号同样为AT89C51的芯片,在其后面还有频率编号,有12,16,20,24MHz可选。大家在购买和选用时要注意了。如AT89C51 24PC就是最高振荡频率为24MHz,40P6封装的普通商用芯片。

  3.复位 RST 9
    在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。常用的复位电路如图2-3所示。
    *复位操作不会对内部RAM有所影响。

 
图2-3 常用复位电路

  4.输入输出引脚
    (1) P0端口[P0.0-P0.7] P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。
      对内部Flash程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。
      在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。
    (2) P1端口[P1.0-P1.7] P1是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
      对内部Flash程序存储器编程时,接收低8位地址信息。
    (3) P2端口[P2.0-P2.7] P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
      对内部Flash程序存储器编程时,接收高8位地址和控制信息。
      在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
    (4) P3端口[P3.0-P3.7] P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
      对内部Flash程序存储器编程时,接控制信息。除此之外P3端口还用于一些专门功能,具体请看 表2-2.。
      *P1-3端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。

P3引脚

兼用功能

P3.0

串行通讯输入(RXD)

P3.1

串行通讯输出(TXD)

P3.2

外部中断0( INT0)

P3.3

外部中断1(INT1)

P3.4

定时器0输入(T0)

P3.5

定时器1输入(T1)

P3.6

外部数据存储器写选通WR

P3.7

外部数据存储器写选通RD

表2-2 P3端口引脚兼用功能表

  呼!一口气说了那么多,停一下吧。嗯,什么?什么叫上拉电阻?上拉电阻简单来说就是把电平拉高,通常用4.7-10K的电阻接到Vcc电源,下拉电阻则是把电平拉低,电阻接到GND地线上。具体说明也不是这里要讨论的,接下来还是接着看其它的引脚功能吧。
  5.其它的控制或复用引脚
    (1) ALE/PROG 30 访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6)。在访问外部数据存储器时,出现一个ALE脉冲。对Flash存储器编程时,这个引脚用于输入编程脉冲PROG
    (2) PSEN 29 该引是外部程序存储器的选通信号输出端。当AT89C51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲即两次有效。但访问外部数据存储器时,将不会有脉冲输出。
    (3) EA/Vpp 31 外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。要使AT89C51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。对Flash存储器编程时,用于施加Vpp编程电压。Vpp电压有两种,类似芯片最大频率值要根据附加的编号或芯片内的特征字决定。具体如表2-3所列。

 

Vpp = 12V

Vpp = 5V

 

印刷在芯片面上的型号

AT89C51

xxxx

YYWW

AT89LV51

xxxx

YYWW

AT89C51

xxxx-5

YYWW

AT89LV51

xxxx-5

YYWW

 

片内特征字

030H=1EH

030H=1EH

030H=1EH

030H=1EH

031H=51H

031H=61H

031H=51H

031H=61H

032H=FFH

032H=FFH

032H=05H

032H=05H

表2-3 Vpp与芯片型号和片内特征字的关系

  看到这您对AT89C51引脚的功能应该有了一定的了解了,引脚在编程和校验时的时序我们在这里就不做详细的探讨,通常情况下我们也没有必要去撑握它,除非你想自己开发编程器。下来的课程我们要开始以一些简单的实例来讲述C程序的语法和编写方法技巧,中间穿插相关的硬件知识如串口,中断的用法等等。


关键字:51单片机  C语言学习 引用地址:51单片机C语言学习 2

上一篇:51单片机C语言学习 3
下一篇:51单片机C语言学习1

推荐阅读最新更新时间:2024-03-16 14:44

C51单片机全自动洗衣机
源程序: #include reg51.h //定义头文件 #define uint unsigned int //定义字符uint #define uchar unsigned char //定义字符uchar #define TIME0H 0xff //定时器0计数器高位 #define TIME0L 0x9c //定时器0计数器低位 #define TIME1H 0x3c //定时器1计数器高位 #define TIME1L 0xb0
[单片机]
C<font color='red'>51单片机</font>全自动洗衣机
基于51单片机的号音自动播放器设计
1 引言 机关、院校日常作息需要计时和号音提示,笔者利用AT89C51型单片机和LM386型音频功率放大器构成了自动计时和号音播放器,成本低,效果好,值得推广。 2 AT89C51的主要特性和引脚功能 AT89C51是带4K字节闪烁可编程可擦除只读存储器(EPEROM)的低电压、高性能CMOS 8位微处理器(俗称单片机)。该单片机与工业标准的MCS-51型机的指令集和输出引脚兼容。AT89C51将多功能8位CPU和闪烁存储器组合在单个芯片中,为很多嵌入式控制提供了灵活性高且价格低廉的方案。 AT89C51的主要特性如下: 寿命达1000写/擦循环; 数据保留时间:10年; 全静态工作:0Hz-24MHz
[单片机]
基于<font color='red'>51单片机</font>的号音自动播放器设计
如何学习51单片机/心得/KEIL4/DXP
什么是单片机 学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。 有人觉得要先学汇编。不过我个人觉得,学习51单片机,还是从C语言入手,一来方便,二来容易上手,仁者见仁,智者见智吧。 关于学习51单片机的书籍,市场上有很多,大家可以择优选取。 那么,如何用程序控制单片机的呢? 我开始学单片机的时候也曾有过这样的困惑啊,ok,下面帮大家整理一下思路。 怎么在Keil里写程序?keil怎么安装破解? 用过VC6.0的同学都知道,VC6.0是一个编译环境。什么是编译环境?简单地说,就是你写代码的地方。 那么,同理,单片机的编译环境就是Ke
[单片机]
如何<font color='red'>学习</font><font color='red'>51单片机</font>/心得/KEIL4/DXP
原创作品LED流星雨灯(51单片机程序代码)产品分享!
最近公司生产了一款流星雨灯!现把它分享给大家! 一、图片分享: 二、PCB文件分享: 三、原理图分享: 四、 上面只做了5根灯管,如果需要增加灯管的话,只需稍微改动下 下面的程序即可.如果增长 连线把灯管摆成圆形或者方形效果也比较牛逼的. 此款流星灯直径只有1.5公分只可以做30公分、50公分、80公分、1000公分等 。 这个东东主要是做装饰用,技术支持: http://www.51hei.com/ 下面公开全部的源代码. 请大家多多指教.程序代码大家可以随意修改,但不可用于商业用途. /*流星雨程序代码 作者:胡琴 2011-12-12 单片机型号:STC11F04 IO
[单片机]
原创作品LED流星雨灯(<font color='red'>51单片机</font>程序代码)产品分享!
自制51单片机超大数码管时钟
市面上出售的数码管一般都很小,本人用led发光管自己制作了一种个头很非常大的数码管,挂在家里显示效果非常牛逼下面是实物图: 下面是电路图: 下面是c51程序源代码: #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int #define pos P0 //设置数码显示的位选 #define segs P1 //设置数码显示的段选 code unsigned char d = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0
[单片机]
自制<font color='red'>51单片机</font>超大数码管时钟
PCF8591与AT89C51单片机的接口程序
  以AT89C51为主器件.I2C总线上连接4个PCF8591芯片,芯片地址分别为(OOOb、OlOb、020b、400b),89C51的P3.6作为SCL信号.P3.7做为SDA信号,每个芯片的模拟输入采用单端方式输入,参考电压VREF选用4.8V。参考电路如下图所示。下面程序为I2c协议、读取4路A,D转换数据以及写入D/A变换数值的C语言代码。
[单片机]
PCF8591与AT89C<font color='red'>51单片机</font>的接口程序
51单片机扩展中断的方法
一、采用硬件请求和软件查询的方法: 这种方法是:把各个中断源通过硬件“或非(高有效,如CD4002)”(与,低有效)门引入到单片机外部中断源输入端(INT0或INT1),同时再把外部中断源送到单片机的某个输入输出端口,这样当外部中断时,通过“或非”(与)门引起单片机中断,在中断服务程序中再通过软件查询,进而转相应的中断服务程序。显然,这种方法的中断优先级取决于软件查询的次序。其硬件连接和软件编程如下: Void zhongduan (void) interrupt 0 using 3 //中断函数 { EX0=0;//关中断 If(P0_0=1) { *****}//中断查询 If(P0_1=1) { ****
[单片机]
<font color='red'>51单片机</font>扩展中断的方法
关于单片机引脚读写操作
使用时肯定会用到单片机的IO引脚。以51单片机P1口为例。内部结构如图所示 当单片机进行写操作时,引脚锁存器(D触发器)CLK端接收有效电平,然后内部总线上需要写的数据就会通过D触发器传输到Q'。当写1时Q'为0,使MOSFET截止,因此外部引脚电平为1.当写0时Q'为1,MOSFET饱和导通,此时引脚可以看成接地,所以引脚为0。 如果对单片机IO口进行读操作。由图可以看出读操作包括读寄存器和读引脚。以前知道有这两种区别,但是从来没仔细区分过。从图中可以看出读寄存器时读寄存器上的三态缓冲器打开,Q端的值直接传到了内部总线上,而下面的读引脚三台缓冲器是高阻态,读引脚时则相反。 汇编语言中对读寄存
[单片机]
关于单片机引脚读写操作
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved