最近买了几片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;
}
}
}
|