51单片机一个程序能用几组工作寄存器,怎么用?

如题所述

4组都能用
工作寄存器的分组控制位是PSW的PS1,PS0两位

R0 ~ R7 (地址)
PS1 PS0: 00 工作寄存器组0 00H ~ 07H
01 工作寄存器组1 08H ~ 0FH
10 工作寄存器组2 10H ~ 17H
11 工作寄存器组3 18H ~ 1FH
工作寄存器的分组主要是为了中断服务。因为中断发生时间的不确定性,为了在中断服务程序中,工作寄存器的值不会被其它中断改变,于是用分组办法解决这一问题。
使用:在中断服务程序中应在每个中断的中断服务程序中先把PS1,PS0设置成不同的值。
比如:
外中断服务程序:
extt0:mov PSW,#00h ;使用第0组
mov a,@r0;
...
reti
定时器T0中断:
intt0: mov PSW,#08h;使用第1组
mov a,@r0;
...
于是两个中断程序中的r0就是两个不同的寄存器。否则两个中断程序就会相互改变。

C语言:
void extt0(void)interrupt 0 using 0 //使用第0组
{
}

void extt0(void)interrupt 0 using 1 //使用第1组
{
}
温馨提示:答案为网友推荐,仅供参考