请问单片机用c语言编程为什么在主函数开头有时要给sp赋值?

2024-12-04 03:33:51
推荐回答(3个)
回答1:

变量是定义成
还是
得看变量的在程序中所起的作用,比如如下程序:
#include

int_count=0;
unsigned char count=0;
unsigned char second=0;
unsigned char seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};
unsigned char seg1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98};
Delay_1s() //500m秒延时子程序
{unsigned char l,i,n;
for(l=50;l>0;l--)
for(i=20;i>0;i--)
for(n=248;n>0;n--);
}

void t0(void) interrupt 1 using 0
{int_count++;
if(int_count==4000)
{ int_count=0;
second=1;
}
}
void main (void)
{TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(second)
{
second=0;
P0=seg1[count];
count++;
if(count>=10)
count=0;
}
}
}

输出0到9,每一秒变化一次,其中int_count、second是
这是因为,int_count是中断次数统计,他需要在完成一次次的中断以后数值保持不变,如果定义成
,没发生一次中断,它加一,中断结束又变成0了,所以定义成
,这样他的数值会根据中断发生的次数不断增加。而second则因为是
显示的数组的下标,如果定义成
那么每次
结束,内存释放变量值也就没有了,这样就达不到每秒输出不同数字的要求。、
总的来讲呢,如果变量的值在
结束以后还会被其他的函数,活着表达式使用,才定义成全局变量。

回答2:

sp是堆栈指针,你确定讲的是c不是汇编?

回答3:

程序发上来看看,只记得汇编给SP赋值