标题:
关于STC15W系列的片内扩展RAM的问题
[打印本页]
作者:
我也喜欢
时间:
2017-2-9 19:41
标题:
关于STC15W系列的片内扩展RAM的问题
最近买了几片STC15W4K58S4芯片,今天在作片内扩展RAM验证发现一个不好理解的现象,在主函数外编一个写片内扩展RAM的函数,主函数调用不能向下运行,但把这个函数的代码复制到主程序中却能运行.先发问题程序
#include"stc15.h"
unsigned char xdata RAM[256]; //声明片内扩展RAM区数组
//*************************************************
void GPIO_config(void)
{
P5M0 = 0x00; //设置P5.5为准双向口
P5M1 = 0x00;
}
//**********************************************
void delay_ms(unsigned char ms)
{
unsigned int i;
do{
i = 12000000 / 13000;
while(--i) ;
}while(--ms);
}
/******************************************************
*************** 写数组函数***************************/
void Write_ram()
{ unsigned char i; // 把这
for(i=0;i<=255;i++) // 部 分 代 码
{ //放在主函数
RAM[i]=255-i; // 中能运行
} // 而写成一个函数调用不行是为什么
}
//*********************************************************
void main (void)
{
unsigned char i,j;
GPIO_config();
P55=0; //能执行到此
Write_ram(); //执行到此不能住下运行
P55=1; //没能到此
while(1)
{
for(i=0;i<+255;i++)
{
j=RAM[i];
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
P55=~P55; //通过P55口的状态看程序的运行
}
}
}
*******************************************************************************************************************
下面是能运行的程序
********************************************************************************************************************
#include"stc15.h"
unsigned char xdata RAM[256];
void GPIO_config(void)
{
P5M0 = 0x00; //设置P5.5为准双向口
P5M1 = 0x00;
}
void delay_ms(unsigned char ms)
{
unsigned int i;
do{
i = 12000000 / 13000;
while(--i) ;
}while(--ms);
}
/*********************************
void Write_ram()
{ unsigned char i; // 把这
for(i=0;i<=255;i++) // 部 分 代 码
{ //放在主函数
RAM[i]=255-i; // 中能运行
} // 而写成一个函数调用不行是为什么
}
**********************************************/
void main (void)
{ unsigned char i,j;
GPIO_config();
P55=0;
// Write_ram(); //执行到此不能住下运行
while(1)
{
for(i=0;i<+255;i++)
{
RAM[i]=255-i; //这里写
j=RAM[i]; //这里读
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
P55=~P55;
}
}
}
作者:
yzwzfyz
时间:
2017-2-12 08:12
51单片机的取指只能从程序存储区取,不能从XRAM区中取!
作者:
阿萨德。
时间:
2017-2-12 19:13
51单片机的取指只能从程序存储区取,不能从XRAM区中取
作者:
STC15fxxxx
时间:
2022-7-10 09:54
无论 main() 还是 Write Ram()的程序代码,都是指令, 对扩展ram区 的 RAM[] 操作,为何,调用Write Ram()不好使? 是数据访问有什么冲突?
作者:
188610329
时间:
2022-7-10 14:13
{ unsigned char i; //
这个是 0~255
for(i=0;i<=255;i++) //
这个循环条件会永远满足
{ //放在主函数
RAM
=255-i; // 中能运行
} //
所以,你程序会死在这里出不去, 和 Xdata 没有任何关系
}
两个方案:
一:
unsigned char i; 改成:
unsigned short i;
二:
for(i=0;i<255;i++) //
这个循环少一次
{
RAM
=255-i;
}
RAM
=255-i; //
出循环后补运行一次
两个方案,二选一。
作者:
dzbj
时间:
2022-7-10 14:41
188610329 发表于 2022-7-10 14:13
{ unsigned char i; // 这个是 0~255
for(i=0;i
一语中的
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1