51单片机(一)——总览

发布者:黄金大花猫最新更新时间:2018-05-01 来源: eefocus关键字:51单片机  总览 手机看文章 扫描二维码
随时随地手机看文章

一、前言

之前花了一点时间阅读了编译器sdcc的man文档,算是对这款交叉编译器有了基本的了解。但要写重新写单片机程序,还要对相应的知识做进一步的复习。下面我将阅读芯片的datasheet和application guide,结合一些实际的应用,对单片机的知识进行复习。我开发板上的芯片是stc90c51,不同型号的51芯片可能会略有差异。

二、外围电路

要使单片机正常工作,需要在VCC脚上给予5v/3.3v的电压,将GND脚接地。为了滤波 ,VCC和GND之间接两个电容。XTAL上接一个外部振荡器,RST脚上接外部复位电路。

虽然这些都已经标准化,无关编程。但在某些特殊情况下(比如晶振、稳压芯片坏了,虚焊等等),需要配合示波器等作出硬件故障的排除,就需要检查外围电路的工作状态。

三、片内资源

3.1 特殊功能寄存器&相关模块

这里贴一下sdcc下c51通用的头文件。可以清晰得看到控制GPIO,定时器,中断,串口的相关寄存器。

#ifndef REG8051_H

#define REG8051_H


/*  BYTE Register  */

__sfr __at (0x80) P0   ;

__sfr __at (0x81) SP   ;

__sfr __at (0x82) DPL  ;

__sfr __at (0x83) DPH  ;

__sfr __at (0x87) PCON ;

__sfr __at (0x88) TCON ;

__sfr __at (0x89) TMOD ;

__sfr __at (0x8A) TL0  ;

__sfr __at (0x8B) TL1  ;

__sfr __at (0x8C) TH0  ;

__sfr __at (0x8D) TH1  ;

__sfr __at (0x90) P1   ;

__sfr __at (0x98) SCON ;

__sfr __at (0x99) SBUF ;

__sfr __at (0xA0) P2   ;

__sfr __at (0xA8) IE   ;

__sfr __at (0xB0) P3   ;

__sfr __at (0xB8) IP   ;

__sfr __at (0xD0) PSW  ;

__sfr __at (0xE0) ACC  ;

__sfr __at (0xF0) B    ;



/*  BIT Register  */

/* P0 */

__sbit __at (0x80) P0_0 ;

__sbit __at (0x81) P0_1 ;

__sbit __at (0x82) P0_2 ;

__sbit __at (0x83) P0_3 ;

__sbit __at (0x84) P0_4 ;

__sbit __at (0x85) P0_5 ;

__sbit __at (0x86) P0_6 ;

__sbit __at (0x87) P0_7 ;


/*  TCON  */

__sbit __at (0x88) IT0  ;

__sbit __at (0x89) IE0  ;

__sbit __at (0x8A) IT1  ;

__sbit __at (0x8B) IE1  ;

__sbit __at (0x8C) TR0  ;

__sbit __at (0x8D) TF0  ;

__sbit __at (0x8E) TR1  ;

__sbit __at (0x8F) TF1  ;


/* P1 */

__sbit __at (0x90) P1_0 ;

__sbit __at (0x91) P1_1 ;

__sbit __at (0x92) P1_2 ;

__sbit __at (0x93) P1_3 ;

__sbit __at (0x94) P1_4 ;

__sbit __at (0x95) P1_5 ;

__sbit __at (0x96) P1_6 ;

__sbit __at (0x97) P1_7 ;


/*  SCON  */

__sbit __at (0x98) RI   ;

__sbit __at (0x99) TI   ;

__sbit __at (0x9A) RB8  ;

__sbit __at (0x9B) TB8  ;

__sbit __at (0x9C) REN  ;

__sbit __at (0x9D) SM2  ;

__sbit __at (0x9E) SM1  ;

__sbit __at (0x9F) SM0  ;


/* P2 */

__sbit __at (0xA0) P2_0 ;

__sbit __at (0xA1) P2_1 ;

__sbit __at (0xA2) P2_2 ;

__sbit __at (0xA3) P2_3 ;

__sbit __at (0xA4) P2_4 ;

__sbit __at (0xA5) P2_5 ;

__sbit __at (0xA6) P2_6 ;

__sbit __at (0xA7) P2_7 ;


/*  IE   */

__sbit __at (0xA8) EX0  ;

__sbit __at (0xA9) ET0  ;

__sbit __at (0xAA) EX1  ;

__sbit __at (0xAB) ET1  ;

__sbit __at (0xAC) ES   ;

__sbit __at (0xAF) EA   ;


/*  P3  */

__sbit __at (0xB0) P3_0 ;

__sbit __at (0xB1) P3_1 ;

__sbit __at (0xB2) P3_2 ;

__sbit __at (0xB3) P3_3 ;

__sbit __at (0xB4) P3_4 ;

__sbit __at (0xB5) P3_5 ;

__sbit __at (0xB6) P3_6 ;

__sbit __at (0xB7) P3_7 ;


__sbit __at (0xB0) RXD  ;

__sbit __at (0xB1) TXD  ;

__sbit __at (0xB2) INT0 ;

__sbit __at (0xB3) INT1 ;

__sbit __at (0xB4) T0   ;

__sbit __at (0xB5) T1   ;

__sbit __at (0xB6) WR   ;

__sbit __at (0xB7) RD   ;


/*  IP   */

__sbit __at (0xB8) PX0  ;

__sbit __at (0xB9) PT0  ;

__sbit __at (0xBA) PX1  ;

__sbit __at (0xBB) PT1  ;

__sbit __at (0xBC) PS   ;


/*  PSW   */

__sbit __at (0xD0) P    ;

__sbit __at (0xD1) F1   ;

__sbit __at (0xD2) OV   ;

__sbit __at (0xD3) RS0  ;

__sbit __at (0xD4) RS1  ;

__sbit __at (0xD5) F0   ;

__sbit __at (0xD6) AC   ;

__sbit __at (0xD7) CY   ;


/* BIT definitions for bits that are not directly accessible */

/* PCON bits */

#define IDL             0x01

#define PD              0x02

#define GF0             0x04

#define GF1             0x08

#define SMOD            0x80


/* TMOD bits */

#define T0_M0           0x01

#define T0_M1           0x02

#define T0_CT           0x04

#define T0_GATE         0x08

#define T1_M0           0x10

#define T1_M1           0x20

#define T1_CT           0x40

#define T1_GATE         0x80


#define T0_MASK         0x0F

#define T1_MASK         0xF0


/* Interrupt numbers: address = (number * 8) + 3 */

#define IE0_VECTOR      0       /* 0x03 external interrupt 0 */

#define TF0_VECTOR      1       /* 0x0b timer 0 */

#define IE1_VECTOR      2       /* 0x13 external interrupt 1 */

#define TF1_VECTOR      3       /* 0x1b timer 1 */

#define SI0_VECTOR      4       /* 0x23 serial port 0 */


#endif


3.2 内部Ram&Rom

最初的51单片机有128byte的片内Ram和4K的片内的Rom,现在的51单片机可以有1K的片内Ram和64K片内的Rom。至于如何选择芯片型号要根据项目的实际需要和成本,参考选型指南、供应市场的具体情况作出。


关键字:51单片机  总览 引用地址:51单片机(一)——总览

上一篇:51单片机(二)—— GPIO&Uart
下一篇:51系列单片机程序跑飞的学习

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

51单片机控制的LED流水灯设计
  1.引言   当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。   2.硬件组成   按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系
[单片机]
用<font color='red'>51单片机</font>控制的LED流水灯设计
基于51单片机的简易计算器proteus仿真 数码管显示
硬件设计 仿真图: 数码管显示,支持整数加减乘除,不支持小数和负数及连续运算; (20x3 和20÷3的结果 ) 程序设计 //************************************************************************************************* //************************************************************************************************* //** 程序名 :计算器处理主程序,根据计算器的输入状态分派不同的函数对按键进行处理。 **
[单片机]
基于<font color='red'>51单片机</font>的简易计算器proteus仿真 数码管显示
51单片机实现带数码管显示的加法简易计算器
一、使用proteus绘制简单的电路图,用于后续仿真 二、编写程序 /******************************************************************************************************************** ---- @Project: LED-74HC595 ---- @File: main.c ---- @Edit: ZHQ ---- @Version: V1.0 ---- @CreationTime: 20200701 ---- @ModifiedTime: 20200701
[单片机]
<font color='red'>51单片机</font>实现带数码管显示的加法简易计算器
51单片机入门教程(2)——实现流水灯
一、搭建流水灯电路 在Proteus中搭建流水灯电路如图 二、流水灯程序 我们可以把流水灯看作依次点亮若干个灯。 程序如下: #include reg52.h sbit led1 = P2^0; sbit led2 = P2^1; sbit led3 = P2^2; sbit led4 = P2^3; sbit led5 = P2^4; sbit led6 = P2^5; sbit led7 = P2^6; sbit led8 = P2^7; void main() { //点亮第一个灯 led1 = 1; led2 = 0; led3 = 0; led4 = 0; led5 = 0; l
[单片机]
<font color='red'>51单片机</font>入门教程(2)——实现流水灯
8通道自动温度检测系统仿真
仿真程序功能:用八个通道分别检测8路信号,并通过数码管实时显示 程序参考源代码如下: CLR P3.7 MAIN:MOV 38H,#00H MOV 39H,#00H MOV 3AH,#00H MOV 3BH,#00H LCALL GET_TEMPER LCALL TEMPRRO MOV P2,#06H LCALL PRO ;------------------------------------------------------ MOV 38H,#00H MOV 39H,#00H MOV 3AH,#00H MOV 3BH,#00H LCALL GET_TEMPER2 LCALL TEMPRRO M
[单片机]
8通道自动温度检测系统仿真
51单片机基础剖析(基于C语言)
一、51单片机内存剖析 在编写应用程序时,定义一个变量,一个数组,或是说一个固定表格,到底存储在什么地方;当定义变量大小超过MCU的内存范围时怎么办;如何控制变量定义不超过存储范围; 以及如何定义变量才能使得变量访问速度最快,写出的程序运行效率最高。以下将一一解答。 1.六类存储类型 code data idata xdata pdata bdata code:程序存储器,也即只读存储器,用来保存常量或是程序,采用16位地址线编码,可以是在片内,或是片外,大小被限制在64KB。 作用:定义常量,如八段数码表或是编程使用的常,在定义时加上code或明确指明定义的常量保存到code memory(只读。)比如:
[单片机]
51单片机最小系统概念、组成及电路原理图
1.单片机最小系统的概念: 能使单片机正常工作的最小硬件单元电路,就叫单片机最小系统。 2.单片机最小系统的组成: (1)复位电路:t=RC1(t≥10ms); (2)时钟电路:C2=C3=(30±10)pF(一般是20~30pF); (3)存储器访问路经控制:EA/VPP=+5V时,先内后外。 另外,一般还有单片机的ISP下载口也包含在单片机最小系统中。 3.51系列单片机的最小系统电路的原理图:
[单片机]
<font color='red'>51单片机</font>最小系统概念、组成及电路原理图
基于AT89C51单片机的CAN/LIN网关设计
引言 现场总线技术已经广泛应用于工业控制中,尤其是CAN(Controler Area Nerwork)总线由于具有可靠性高、成本低、容易实现等优点,在现场总线实际工程应用中占有了较大份额。伴随着总线技术发展,LIN(Local Interconnect Network)总线作为一种低成本串行通信网络,其目标是为现有现场总线控制网络提供辅助功能,特别是汽车控制网络中总线应用,因此必然存在一个LIN总线和其它总线通信接口实现,本文以CAN总线为例,提出了一种基于AT89C51CC03单片机CAN-LIN网关设计方案。 LIN是一种低成本串行通讯网络用于实现汽车中分布式电子系统控制,LIN目标是为现有汽车网络(例如CAN总
[单片机]
基于AT89C<font color='red'>51单片机</font>的CAN/LIN网关设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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