单片机内部扩展RAM |
您所在的位置:网站首页 › 用若干ram实现位扩展 › 单片机内部扩展RAM |
51单片机内部只有128字节的RAM(8051),而8052有256字节的RAM,低128字节RAM直接或间接寻址都可以,高128字节RAM与SRF特殊功能寄存器共用地址,SFR只能直接寻址,高128字节RAM只能间接寻址。所以通常用总线方式扩展一片RAM。一般用62256(32kX8bit RAM)。 现在新出的51单片机都在内部扩展了外部RAM。这个RAM还是叫外部RAM,不过在芯片内部,之所以还叫外部RAM,是因为是用外部总线连接的,访问方式还是用MOVX访问。可以参考STC89C58RD+,扩展了1024字节(byte)RAM。所以STC89C58RD+一共有1024byte+256byte=1280byte这么多字节的RAM。
内部扩展RAM的使用 STC89C58RD+内部扩展RAM的使用是通过对特殊功能寄存器AUXR赋值实现的。 其中 EXTRAM Internal/External RAM access 内部/ 外部 RAM 存取 0: 内部扩展的EXT_RAM 可以存取. RD+ 系列单片机 在00H 到3FFH 单元(1024 字节),使用MOVX @DPTR 指令访问,超过400H 的地址空间总是访问外部数据存储器(含400H 单元),MOVX @Ri 只能访问00H 到FFH 单元 RC 系列单片机 在00H 到FFH 单元(256 字节),使用MOVX @DPTR 指令访问,超过100H 的地址空间总是访问外部数据存储器(含100H 单元),MOVX @Ri 只能访问00H 到FFH 单元
1: External data memory access. 外部数据存储器存取,禁止访问内部扩展RAM,此时MOVX @DPTR / MOVX @Ri 的 使用同普通8052 单片机 调试经过 之前的板子是使用STC89C51RD+总线方式驱动62256,但只用到1024字节的RAM,而STC89C51RD+自身就有内部扩展的1k(外部)RAM,所以这次先没焊接62256。沿用以前程序(问题就处在这!!!)。(以下程序经过简化)
#include #include #include
void Serial_Init(void); void printValue(void); void main(void) { AUXR=0x03; Serial_Init(); printValue(); while(1); }
void Serial_Init(void) { //--------serial init--------------------- //串口初始化 SCON = 0x50; //8 bit UART,enable TMOD |= 0x20; //t1 8 bit reload PCON |=0x80; //bandrate X 2 TH1 = 0xFF; //0xfa set bandrate 9600 with crystal 11.0592M TL1 = 0xFF; //0xff : 57600 TR1 = 1; //t1 start ES=1; //serial interrupt enable REN=1; //recieve enable }
void printValue(void) { //串口输出ScanData,一共3个值 unsigned int j; xdata unsigned char ScanData[3]; TI=1; //开串口定时器 for (j=0;j |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |