標(biāo)題:
關(guān)于STC15W系列的片內(nèi)擴展RAM的問題
[打印本頁]
作者:
我也喜歡
時間:
2017-2-9 19:41
標(biāo)題:
關(guān)于STC15W系列的片內(nèi)擴展RAM的問題
最近買了幾片STC15W4K58S4芯片,今天在作片內(nèi)擴展RAM驗證發(fā)現(xiàn)一個不好理解的現(xiàn)象,在主函數(shù)外編一個寫片內(nèi)擴展RAM的函數(shù),主函數(shù)調(diào)用不能向下運行,但把這個函數(shù)的代碼復(fù)制到主程序中卻能運行.先發(fā)問題程序
#include"stc15.h"
unsigned char xdata RAM[256]; //聲明片內(nèi)擴展RAM區(qū)數(shù)組
//*************************************************
void GPIO_config(void)
{
P5M0 = 0x00; //設(shè)置P5.5為準(zhǔn)雙向口
P5M1 = 0x00;
}
//**********************************************
void delay_ms(unsigned char ms)
{
unsigned int i;
do{
i = 12000000 / 13000;
while(--i) ;
}while(--ms);
}
/******************************************************
*************** 寫數(shù)組函數(shù)***************************/
void Write_ram()
{ unsigned char i; // 把這
for(i=0;i<=255;i++) // 部 分 代 碼
{ //放在主函數(shù)
RAM[i]=255-i; // 中能運行
} // 而寫成一個函數(shù)調(diào)用不行是為什么
}
//*********************************************************
void main (void)
{
unsigned char i,j;
GPIO_config();
P55=0; //能執(zhí)行到此
Write_ram(); //執(zhí)行到此不能住下運行
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口的狀態(tài)看程序的運行
}
}
}
*******************************************************************************************************************
下面是能運行的程序
********************************************************************************************************************
#include"stc15.h"
unsigned char xdata RAM[256];
void GPIO_config(void)
{
P5M0 = 0x00; //設(shè)置P5.5為準(zhǔn)雙向口
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++) // 部 分 代 碼
{ //放在主函數(shù)
RAM[i]=255-i; // 中能運行
} // 而寫成一個函數(shù)調(diào)用不行是為什么
}
**********************************************/
void main (void)
{ unsigned char i,j;
GPIO_config();
P55=0;
// Write_ram(); //執(zhí)行到此不能住下運行
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單片機的取指只能從程序存儲區(qū)取,不能從XRAM區(qū)中!
作者:
阿薩德。
時間:
2017-2-12 19:13
51單片機的取指只能從程序存儲區(qū)取,不能從XRAM區(qū)中取
作者:
STC15fxxxx
時間:
2022-7-10 09:54
無論 main() 還是 Write Ram()的程序代碼,都是指令, 對擴展ram區(qū) 的 RAM[] 操作,為何,調(diào)用Write Ram()不好使? 是數(shù)據(jù)訪問有什么沖突?
作者:
188610329
時間:
2022-7-10 14:13
{ unsigned char i; //
這個是 0~255
for(i=0;i<=255;i++) //
這個循環(huán)條件會永遠(yuǎn)滿足
{ //放在主函數(shù)
RAM
=255-i; // 中能運行
} //
所以,你程序會死在這里出不去, 和 Xdata 沒有任何關(guān)系
}
兩個方案:
一:
unsigned char i; 改成:
unsigned short i;
二:
for(i=0;i<255;i++) //
這個循環(huán)少一次
{
RAM
=255-i;
}
RAM
=255-i; //
出循環(huán)后補運行一次
兩個方案,二選一。
作者:
dzbj
時間:
2022-7-10 14:41
188610329 發(fā)表于 2022-7-10 14:13
{ unsigned char i; // 這個是 0~255
for(i=0;i
一語中的
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1