位地址在匯編語言中,只能直接尋址,不支持間接尋址。那麽,在 C 語言中,也就不能用指針來操作。所以不能定義單片機的寄存器。
訪問寄存器可以通過直接地址引用來完成。
例如52單片機的寄存器有4組,分別為00H-07H,08H-0FH,10H-17H,18H-1FH,各組均8字節,要結合程序狀態字寄存器PSW(D0H)中的RS0,RS1的組合來確定是哪壹組。
可以定義壹個訪問Rn的函數
typedef?unsigned?char?uchar;uchar?dacRn(uchar?n)//n=[0..7]
{
uchar?data?*p; n?+=?(PSW?&?0x18);?//PSW?7:CY?6:AC?5:F0?4:RS1?3:RS0?2:OV?1:F1?0:P//本來要右移三位變為0-3,但由於是8個壹組要乘以8(左移3位),所以直接加上寄存器編號就可以了
return?*(uchar?data?*)n;}