单片机的一些常识

发布者:dong125612最新更新时间:2015-12-25 来源: eefocus关键字:单片机  片内结构 手机看文章 扫描二维码
随时随地手机看文章
从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。与ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。

在51系列中data,idata,xdata,pdata的区别:

data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。

idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)

xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。

pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。

 

单片机C语言unsigned char code table[] code 是什么作用?

    code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVX(好像是),因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思。

程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data区的数据进行运算处理,因此code区存储在什么介质上并不重要,象以前的计算机程序存储在卡片上,code区也可以放在rom里面,也可以放在ram里面,也可以放在flash里面(但是运行速度要慢很多,主要读flash比读ram要费时间),因此一般的做法是要将程序放到flash里面,然后load到 ram里面运行的;DATA区就没有什么选择了,肯定要放在RAM里面,放到rom里面改动不了。

bdata如何使用它呢?
若程序需要8个或者更多的bit变量,如果你想一次性给8个变量赋值的话就不方便了,(举个例子说说它的方便之处,想更深入的了解请在应用中自己琢磨)又不可以定义bit数组,只有一个方法

char bdata MODE;
sbit MODE_7 = MODE^7;
sbit MODE_6 = MODE^6;
sbit MODE_5 = MODE^5;
sbit MODE_4 = MODE^4;
sbit MODE_3 = MODE^3;
sbit MODE_2 = MODE^2;
sbit MODE_1 = MODE^1;
sbit MODE_0 = MODE^0;
8个bit变量MODE_n 就定义好了
这是定义语句,Keilc 的特殊数据类型。记住一定要是sbit
不能 bit MODE_0 = MODE^0;
赋值语句要是这么些C语言就视为异或运算

//------------------------------------------------------------------------------------------------------------------

空间名称
地址范围
说明
DATA
D:00H~7FH
片内RAM直接寻址区
BDATA
D:20H~2FH
片内RAM位寻址区
IDATA
I:00H~FFH
片内RAM间接寻址区
XDATA
X:0000H~FFFFH
64KB常规片外RAM数据区
HDATA
X:0000H~FFFFFFH
16MB扩展片外RAM数据区
CODE
C:0000H~FFFFH
64K常规片内外ROM代码区
HCONST(ECODE)
C:0000H~FFFFFFH
16MB扩展片外ROM常数区(对Dallas390可用作代码区)
BANK0~BANK31
B0:0000H~FFFFH
:
:
B31:0000H~FFFFH
分组代码区,最大可扩展32X64KB ROM
//-----------------------------------------------------------------------------------------------------------------------------------------
keil生成的文件:
.plg:编译器编译结果
.hex和.bin:可执行文件
.map和.lst:链接文件
.o:目标文件
.crf、.lnp、.d和.axf:调试文件
.opt:保存工程配置信息
.bak:工程备份文件

M51文件,startup文件。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include

typedef unsigned char uint8;
typedef unsigned int  uint16;

char code table[] = {0x30,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

void delay(uint8 N)
{
 uint8 i,j;
 for(i = 0; i < N; i++)
  for(j = 0; j < N; j++);
}

void main()
{
 char addr,i;
 addr = 0x30;

 for(i = 0; i < 16; i++)
 {
  *((char idata*)addr++) = i;    //这块应用到强制类型变换+指针的应用···
 }
 addr = 0x30;

 for(i = 0; i < 16; i++)
 {
  P1 = table[*((char idata*)addr++)];
  delay(400);
 }
 
 delay(400);
 P1 = 0x00;
}

关键字:单片机  片内结构 引用地址:单片机的一些常识

上一篇:浅谈三种单片机程序调试方法
下一篇:给初学8位单片机的一些建议

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

89C51单片机按键控制数码管动态显示0~9
1.preteus仿真图 2.keli代码 #include reg51.h sbit key1=P3^0; int CC_num ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int CC_I=0; void delay_ms(int ms) { int i,j; for(i=0;i ms;i++) for(j=0;j 110;j++); } void key1_exam() { if(key1 == 0) { //按钮延时去抖动 delay_ms(20); if(key1 =
[单片机]
89C51<font color='red'>单片机</font>按键控制数码管动态显示0~9
8051单片机指令定义详解——AJMP addr11(4)
8051单片机指令定义详解 (AJMP addr11) AJMP addr11 功能:绝对跳转。 描述:AJMP指令用于将程序转到相应的目的地址去执行,该地址在程序执行过程之中产生,由PC值(两次递增之后)的高5位、操作码的7-5位和指令的第2字节连接形成。要求跳转的目的地址和AJMP指令的后一条指令的第1字节位于同一2KB的程序存储页内。 示例:假设标号AJMADR位于程序存储器的0123H,指令 AJMP JMPADR 位于0345H,执行完该指令后PC值变为0123H。 AJMP addr11 字节数:2 执行周期:2 机器码:aaa00001 aaaaaaaa 注意:目的地
[单片机]
单片机程序设计中状态机思路的应用
状态机的概念 状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。 比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些,但这不影响我们对状态机的认识。 进一步看,击键动作本身也可以看做一个状态机。一个细小的击键动作包含了:释放、抖动、闭合、抖动和重新释放等状态。 同样,一个串行通信的时序(不管它是遵循何种协议,标准串口也好、I2C也好;也不管它是有线的、还是红外的、无线的)也都可以看做由一系列有限的状
[单片机]
<font color='red'>单片机</font>程序设计中状态机思路的应用
用CPLD实现单片机读写模块
摘要:介绍实现单片机与Xilinx公司XC9500系列可编程逻辑器件的读写逻辑功能模块的接口设计,以及Xilinx公司的XC9500系列可编程逻辑器件的开发流程。 关键词:复杂可编程逻辑电路 微处理器 在系统编程 现场可编程门阵列 1 概述 CPLD(复杂可编程逻辑电路)是一种具有丰富的可编程I/O引脚的可编程逻辑器件,具有在系统可编程、使用方便灵活的特点;不但可实现常规的逻辑器件功能,还可实现复杂的时序逻辑功能。把CPLD应用于嵌入式应用系统,同单片机结合起来,更能体现其在系统可编程、使用方便灵活的特点。CPLD同单片机接口,可以作为单片机的一个外设,实现单片机所要求的功能。例如,实现常用的地址译码、锁存器、8255
[半导体设计/制造]
单片机在工业无线网络中的具体应用
如同今天的许多通用单片机(MCU)已经把USB、CAN和以太网作为标准外设集成在芯片内部一样,越来越多的无线网络芯片和无线网络解决方案也在 向集成SoC 方向发展,比如第一代产品,Nordic公司nRF905,Chipcon公司cc1010 他们集成了8051兼容的单片机.这些无线单片机适合一般的点对点和点对多点的私有网络应用,如单一产品的遥控器和抄表装置等。无线通讯技术给智能装置的 互连互通提供了便捷的途径,工业无线网络作为面向工业和家庭自动化的网络技术也正在向着智能,标准和节能方向发展。   典型的工业无线网络   目前在工业控制和消费电子领域使用的无线网络技术有ZigBee、无线局域网(Wi-Fi)、蓝牙(Blut
[工业控制]
Atmel推出基于ARM Cortex-M0+的汽车级MCU
最新的Atmel | SMART SAM DA1系列MCU搭载外设触摸控制器,提供更为智能的外设; 支持、更高的性能以及更大的存储空间。 中国北京,2015年3月6日 全球微控制器(MCU)及触控解决方案领域的领导者Atmel 公司 (NASDAQ:ATML)近日宣布推出符合汽车级要求的下一代基于ARM Cortex -M0+的MCU系列,内嵌集成外设触摸控制器(PTC),为电容触控应用提供强劲支持。SAM DA1也是符合汽车要求的Atmel |SMART MCU产品组合的首个系列,最大工作频率为48MHz,CoreMark/MHz分数达到2.14。 Atmel最新的SAM DA1系列是电容触控按键、
[汽车电子]
Atmel推出基于ARM Cortex-M0+的汽车级<font color='red'>MCU</font>
80C51单片机模拟I2C总线的主机程序分享
I2C总线协议程序 在使用的过程中一定要注意时序、时间的问题。 i2c.c /* I2C.c 标准80C51单片机模拟I2C总线的主机程序 All rights reserved. */ #include “I2C.h” //定义延时变量,用于宏I2C_Delay() unsigned char data I2C_Delay_t; /* 宏定义:I2C_Delay() 功能:延时,模拟I2C总线专用 */ #define I2C_Delay() { I2C_Delay_t = (I2C_DELAY_VALUE); while ( --I2C_Delay_t != 0 ); } /* 函数:I2C_Init() 功能:I2C
[单片机]
80C51<font color='red'>单片机</font>模拟I2C总线的主机程序分享
80C51单片机的定时计数器的结构和工作原理
单片机怎么学,先从哪入手开始学,怎么开始入门 无论是对于新手还是已经在行内的朋友,学习单片机技术,实战动手能力十分重要,如果只知道从网络上的视频以及配套教材来入手开始学,很肯定的说,你永远也学不会。为何?单片机的学习最重要的一点是需要去动手实战实操,单单只看培训教材,也许看的时候能懂一些,但过了一段时间就会遗忘得一干二净,中国有句成语交“纸上谈兵”,经常用来嘲讽一些完全没有实践过的人,单凭从书上了解的知识就胸有成竹的长篇大论。 在这里建议大家,一定要给自己构建一个合适的动手实战试验场所,结合具体的实操对象就很容易理解单片机的电路组态原理,以及理解单片机的程序编制原理,对于入行不深的人,建议给自己出一道居家智能化的物联网课题,采
[单片机]
80C51<font color='red'>单片机</font>的定时计数器的<font color='red'>结构</font>和工作原理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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