2017-03-04 12:44:13 sinat_32582203 阅读数 382

使用Protel DXP绘制以PIC16F877A为CPU,IS65C256AL为外部数据存储器的计算机系统。单片机的B口作为数据/低8位地址复用总线,C口的0~6位作为高7位地址总线,以C口的第7位控制存储器的读写#WR,以D口的0位和1位分别控制存储器的输出使能#OE和片选使能#CE。采用74HC573作为地址锁存器。

PIC单片机存储器拓展

源文件下载地址:http://pan.baidu.com/s/1kVynwDx

2015-12-24 21:52:19 ls667 阅读数 3038

存储器分为程序存储器(ROM)和数据存储器(RAM),两种又都可以分为片内和片外,片外即需要自己在单片机外部扩展。

8051单片机的片内程序存储器有4K,片内数据存储器有256个字节,其中又分为高128字节位特殊功能寄存器区,真正用户能用的RAM只有低128字节。

8052单片机有8K片内程序存储器,而数据存储器除了低128字节外还有扩展的高128字节,地址上跟特殊功能寄存器一样,但物理上是独立的,寻址方式不一样,扩展的高128字节只能间接寻址。


Keil中变量的存储类型:

存储类型

说明

code

程序空间(无需改变的变量)

data

直接访问的内部数据存储器(速度最快)

idata

间接访问的内部数据存储器(可以访问全部256字节RAM)

bdata

可位寻址的内部数据存储器

xdata

外部数据寄存器(最大64K)

pdata

分页的外部数据寄存器(最大256字节,少用)

【如无使用关键字,系统则按默认处理(根据存储模式)】

Keil中的存储模式:

存储模式

说明

Small

变量默认为data型,最大128字节

Compare

变量默认为pdata型,最大256字节

Large

变量默认为xdata型,最大64K

Keil中设置如下图:



我们平常使用的STC单片机,有很多型号,具体存储器大小都要看型号:


【89/90系列的机器周期需要12个或6个时钟周期】


【12/15系列的机器周期只需要1个时钟周期】


51单片机上的FFT算法

最近用增强型51单片机做了一个简易的点阵音乐频谱显示器,最主要是自己刚学完信号处理课程,想自己写一个FFT算法。现将已经能够在51单片机上运行的FFT算法供需要的伙伴们参考。

在51单片机上运行FFT算法,需要注意一下几点:

由于51单片机的内存RAM很小,只有128字节,52有256字节,而16点的浮点数输入,就需要2*4*16=128字节的内存开销,所以只有256字节的做多只能做16点的FFT运算。而且必须要用idata定义才能将其定义在高128字节。所以要做16点以上的FFT运算,必须选用有内部扩展RAM的51系列单片机,然后用xdata定义,并且要将存储模式设为LARGE模式。


2019-09-09 11:06:24 u012308586 阅读数 86

从数据存储类型来说,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;

 

keil生成的文件:
.plg:编译器编译结果
.hex和.bin:可执行文件
.map和.lst:链接文件
.o:目标文件
.crf、.lnp、.d和.axf:调试文件
.opt:保存工程配置信息
.bak:工程备份文件

M51文件,startup文件。

 

bit :是指0x20-0x2f的可位寻址区

 

2018-01-19 14:17:20 a1172483384 阅读数 625

存储器分类如下:

单片机变量存储如下:


2010-07-24 22:35:00 xieshengbin1 阅读数 347

书名:8051单片机数据传输接口扩展技术与应用实例
ISBN:7115128944
定价:34.00
著作者:杨金岩 郑应强
译者:
出版社:
人民邮电
出版商:
出版日期:
2005-01-01
开本:16开
装帧:平装
字数580
页数:371
内容简介:第1章 单片机数据传输接口概述 11.1 单片机并行数据接口 11.2 单片机串行数据接口 21.2.1 异步数据传输接口 21.2.2 同步数据传输接口 31.2.3 单片机的全双工串口 41.3 并行数据接口扩展 61.3.1 外部程序存储器扩展 61.3.2 外部数据存储器扩展 101.3.3 外围设备I/O空间扩展 151.4 串行数据接口扩展 241.5 数据接口扩展中应注意的问题 251.5.1 并行数据接口扩展中的地址分配 251.5.2 串行数据接口扩展中应注意的问题 28第2章 串行数据传输接口RS-232/422/485 302.1 RS-232/422/485接口技术规范 302.1.1 RS-232-C接口标准 302.1.2 RS-422接口标准 312.1.3 RS-485接口标准 332.2 实例1――单片机的RS-232-C传输接口实现 332.2.1 RS-232-C传输接口电路设计 332.2.2 单片机与PC机通信程序设计 342.2.3 单片机多机通信程序设计 402.3 实例2――单片机的RS-485传输接口实现 472.3.1 RS-485传输接口电路设计 472.3.2 单片机RS-485数据传输接口程序设计 482.4 实例3――利用82C51进行单片机串口扩展 552.4.1 串口扩展芯片82C51简介 552.4.2 单片机串行接口扩展模块电路设计 582.4.3 单片机串行接口扩展模块程序设计 602.5 实例4――关于RS-422A串行通信接口 62第3章 USB总线接口 643.1 USB总线协议分析 653.1.1 USB总线协议概述 653.1.2 USB总线数据传输信息包分析 673.2 USB总线接口设备的开发 703.2.1 USB总线接口设备的枚举过程 703.2.2 USB总线控制器的选择 713.2.3 USB总线接口方案设计 713.3 USB总线接口器件 723.3.1 带RISC内核的USB控制器CY7C63001 723.3.2 基于8位并行数据接口的USB总线接口芯片PDIUSBD12 743.4 实例1――基于PDIUSBD12的通用USB数据传输接口模块 783.4.1 USB数据传输接口模块的电路设计 783.4.2 USB数据传输接口模块数据传输协议 803.4.3 USB数据传输接口模块单片机部分程序设计 843.4.4 USB数据传输接口模块PC机应用程序设计 923.5 实例2――通用USB接口模块在数据采集系统中的应用 933.5.1 数据采集系统电路设计 933.5.2 仅占单片机一个外部数据端口的海量数据存储模块 1003.5.3 混合电平系统设计中的注意事项 1033.5.4 USB数据传输接口模块数据交换程序设计 105第4章 I2C总线接口 1104.1 I2C总线协议 1114.1.1 I2C总线的基本特性 1114.1.2 I2C总线上的时钟信号 1114.1.3 I2C总线上的数据传输 1124.1.4 I2C总线的地址与寻址 1144.1.5 I2C总线的竞争与仲裁 1154.2 I2C总线接口(协议)的软件模拟 1174.3 实例1――基于I2C

51单片机存储结构

阅读数 2364

没有更多推荐了,返回首页