天天看點

51單片機間接尋址C語言,51單片機寄存器間接尋址方式與舉例

寄存間接尋址方式是指寄存器中存放的是操作數的位址,即操作數是通過寄存器間接得到的,是以稱為寄存器間接尋址。

MCS-51單片機規定工作寄存器的R0、R1做為間接尋址寄存器。用于尋址内部或外部資料存儲器的256個單元。為什麼會是256個單元呢?我們知道,R0或者R1都是一個8位的寄存器,是以它的尋址空間就是2的八次方=256。

例:MOV  R0,#30H  ;将值30H加載到R0中

MOV  A,@R0    ;把内部RAM位址30H内的值放到累加器A中

MOVX A,@R0    ;把外部RAM位址30H内的值放到累加器A中

大家想想,如果用DPTR做為間址寄存器,那麼它的尋址範圍是多少呢?DPTR是一個16位的寄存器,是以它的尋址範圍就是2的十六次方=65536=64K。因用DPTR做為間址寄存器的尋址空間是64K,是以通路片外資料存儲器時,我們通常就用DPTR做為間址寄存器。

例:MOV   DPTR,#1234H  ;将DPTR值設為1234H(16位)

MOVX  A,@DPTR      ;将外部RAM或I/O位址1234H内的值放到累加器A中

在執行PUSH(壓棧)和POP(出棧)指令時,采用堆棧指針SP作寄存器間接尋址。

例:PUSH  30H    ;把内部RAM位址30H内的值放到堆棧區中

堆棧區是由SP寄存器指定的,如果執行上面這條指令前,SP為60H,指令執行後會把内部RAM位址30H内的值放到RAM的61H内。

那麼做為寄存器間接尋址用的寄存器主要有哪些呢?我們前面提到的有四個,R0、R1、DPTR、SP

寄存器間接尋址範圍總結:

1、内部RAM低128單元。對内部RAM低128單元的間接尋址,應使用R0或R1作間址寄存器,其通用形式為@Ri(i=0或1)。

2、外部RAM 64KB。對外部RAM64KB的間接尋址,應使用@DPTR作間址尋址寄存器,其形式為:@DPTR。

例如MOVX A,@DPTR;其功能是把DPTR指定的外部RAM的單元的内容送入累加器A中。

外部RAM的低256單元是一個特殊的尋址區,除可以用DPTR作間址寄存器尋址外,還可以用R0或R1作間址寄存器尋址。

例如MOVX  A,@R0;這條指令的意思是,把R0指定的外部RAM單元的内容送入累加器A。

堆棧操作指令(PUSH和POP)也應算作是寄存器間接尋址,即以堆棧指針SP作間址寄存器的間接尋址方式。

寄存器間接尋址方式不可以通路特殊功能寄存器!!

寄存器間接尋址也須以寄存器符号的形式表示,為了差別寄存器尋址我寄存器間接尋址的差別,在寄存器間接尋址方式式中,寄存器的名稱前面加字首标志“@”。