您的位置 首页 培训

与51单片机扩展有关的知识点

这些日子做项目,用到外部ram扩展,很是汗颜,很多基本知识点都不会,现在把不会的东西记下来,做个笔记,也和大家共享,学点知识,更好开…

这些日子做项目,用到外部ram扩展,很是汗颜,许多根本常识点都不会,现在把不会的东西记下来,做个笔记,也和我们同享,学点常识,更好开发产品。

1.单片机中的关键字_at_:界说变量的存储地址。

2.这段程序是什么意思?

  1. #define XBYTE((char*)0x20000L)
  2. XBYTE[0x8000]=0x41;

define XBYTE ((char*)0x20000L) 界说了XBYTE是个指向地址 0x0000L 的字符型指针(或许数组)变量XBYTE[0x8000]=0x41; 对数组XBYTE的第 0x8000个变量进行赋值,赋值为0x41。即对地址0x8000L的内存单元赋值为0x41。这阐明你用的是带外部数据总线的51芯片,外部的存储器多半是RAM,RAM的容量至少有 0x8000(32k)字节-RAM的容量可能是64k字节?L代表 long,这阐明 0x20000L 是一个长整数。一般来说,8位单片机如51,整数用16位二进制一共,长整数用32位二进制一共.0x20000L傍边的2是存储器类型xdata,而不是地址的一部分.

3.51单片机的存储类型:

data—>可寻址片内ram
bdata—>可位寻址的片内ram
idata—>可寻址片内ram,答应拜访悉数内部ram
pdata—>分页寻址片外ram (MOVX @R0) (256 BYTE/页)
xdata—>可寻址片外ram (64k 地址规模)
code—>程序存储区 (64k 地址规模),对应MOVC @DPTR

4.absacc.h

  1. /*————————————————————————–
  2. ABSACC.H
  3. Direct access to 8051, extended 8051 and Philips 80C51MX memory areas.
  4. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
  5. All rights reserved.
  6. ————————————————————————–*/
  7. #ifndef __ABSACC_H__
  8. #define __ABSACC_H__
  9. #define CBYTE ((unsigned char volatile code *) 0)
  10. #define DBYTE ((unsigned char volatile data *) 0)
  11. #define PBYTE ((unsigned char volatile pdata *) 0)
  12. #define XBYTE ((unsigned char volatile xdata *) 0)
  13. #define CWORD ((unsigned int volatile code *) 0)
  14. #define DWORD ((unsigned int volatile data *) 0)
  15. #define PWORD ((unsigned int volatile pdata *) 0)
  16. #define XWORD ((unsigned int volatile xdata *) 0)
  17. #ifdef __CX51__
  18. #define FVAR(object, addr) (*((object volatile far *) (addr)))
  19. #define FARRAY(object, base) ((object volatile far *) (base))
  20. #define FCVAR(object, addr) (*((object const far *) (addr)))
  21. #define FCARRAY(object, base) ((object const far *) (base))
  22. #else
  23. #define FVAR(object, addr) (*((object volatile far *) ((addr)+0x10000L)))
  24. #define FCVAR(object, addr) (*((object const far *) ((addr)+0x810000L)))
  25. #define FARRAY(object, base) ((object volatile far *) ((base)+0x10000L))
  26. #define FCARRAY(object, base) ((object const far *) ((base)+0x810000L))
  27. #endif
  28. #endif

例如:
rval=CBYTE[0x0002];指向程序存贮器的0002h地址
rval=XWORD [0x0002];指向外RAM的0004h地址 //WORD是一个字,两个字节,故为0004h

#define COM8255 XBYTE[0X060FF] //后边若呈现COM8255,则单片机端口P0和P2联合输出0X060FF肯定物理地址(地址指向82C55指令寄存器)
#define PA8255 XBYTE[0X000FF] //后边若呈现PA8255,则单片机端口P0和P2联合输出0X000FF肯定物理地址(地址指向82C55的A组端口寄存器)
#define PB8255 XBYTE[0X020FF] //后边若呈现PB8255,则单片机端口P0和P2联合输出0X020FF肯定物理地址(地址指向82C55的B组端口寄存器)
#define PC8255 XBYTE[0X040FF] //后边若呈现PC8255,则单片机端口P0和P2联合输出0X040FF肯定物理地址(地址指向82C55的C组端口寄存器)

4.驱动外部ram的例程

  1. /**************************************************************************
  2. *程序称号: 51单片机片外扩展RAM测验
  3. *程序功用: 把数据写入片外RAM,再从片外RAM读取数据,点亮P1口的8个LED
  4. *开发工具:WSF-51DB开发板
  5. * MCU类型:AT89S52-24PU
  6. *时钟频率:12MHZ
  7. *程序作者: 吴师傅
  8. *版权阐明:吴师傅版权所有,转载请注明来历地址和作者。
  9. **************************************************************************/
  10. #include
  11. #include //包含片外存储空间肯定地址拜访函数:XBYTE[]
  12. sbit oe=P2^7;//片外RAM芯片片选和地址锁存器74HC573使能
  13. unsigned char code ramdata[100]= //界说100个数据
  14. {
  15. 0,1,2,3,4,5,6,7,8,9,
  16. 10,11,12,13,14,15,16,17,18,19,
  17. 20,21,22,23,24,25,26,27,28,29,
  18. 30,31,32,33,34,35,36,37,38,39,
  19. 40,41,42,43,44,45,46,47,48,49,
  20. 50,51,52,53,54,55,56,57,58,59,
  21. 60,61,62,63,64,65,66,67,68,69,
  22. 70,71,72,73,74,75,76,77,78,79,
  23. 80,81,82,83,84,85,86,87,88,89,
  24. 90,91,92,93,94,95,96,97,98,99
  25. };
  26. //延时ms函数:
  27. void Delayms(unsigned int t)
  28. {
  29. unsigned int i,j;
  30. for(i=t;i>0;i–)
  31. for(j=120;j>0;j–);
  32. }
  33. //主函数:
  34. int main(void)
  35. {
  36. unsigned char i;
  37. oe=0;//使能RAM芯片片选和地址锁存器
  38. for(i=0;i<100;i++)
  39. XBYTE[300+i]=ramdata[i];
  40. //将100个数据写入片外RAM,开始地址为:300
  41. while(1)
  42. {
  43. for(i=0;i<100;i++)
  44. {
  45. P1=XBYTE[300+i];//从片外RAM读取数据,点亮P1口的8个LED
  46. Delayms(500);
  47. }
  48. }
  49. return 0;
  50. }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/265614.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部