最近買了幾片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;
}
}
}
|