embeded/80512008. 11. 25. 16:05
sfr - Special Function Register
sbit - SFR Bit

sbit name = sfr-name ^ bit-position;
sbit name = sfr-address ^ bit-position;
sbit name = sbit-address;

두번째나 세번째나 매한가지 이지만, readability를 따지자면 1번이나 2번으로 하는 것이 좋을 듯 하다.

#define P0 0x80 // port 0 SFR address
sbit P0_1 = P0 ^ 1;
sbit P0_1 = 0x80 ^ 1;
sbit P0_1 = 0x81;

이런 방법으로 사용이 가능한데,
문제는 sfr 0x81은 SP로 정의 되어 있다. 이런 이유로 혼동의 여지가 있으므로 주의하는게 좋을 듯 하다.

세번째 방법의 경우,
0x80 + bit 식으로 사용하며 예를 들어 7번째 비트를 사용하고 싶다면 0x87을 사용하면 된다.
0xC8의 6번째를 사용하고 싶다면 0xC8 + 6 = 0xCE 가 된다.

제약 조건으로는 세번째 방법의 경우 lower nibble이 0이거나 8이어야 한다고 기술 되어 있는데,
다르게 말하자면
0x80인 P0은 sbit으로 사용가능하지만
0x81인 SP는 sbit으로 사용이 불가능하다.
간단하게 아래 표의 가장 왼쪽 라인의 P0 P1 P2 P3 P4 TCOn SCON IE IP T2CON PSW ACC B 만 사용가능할 듯 하다.




[sfr : http://www.keil.com/support/man/docs/c51/c51_le_sfr.htm]
[sbit : http://www.keil.com/support/man/docs/c51/c51_le_sbit.htm]

'embeded > 8051' 카테고리의 다른 글

Keil compiler - Error : Segment too large  (0) 2009.04.13
8051 TIMER 에 대하여  (0) 2008.12.18
Keil evaluation Limitation  (0) 2008.12.07
KEIL Cx51 - Warning L5: CODE SPACE MEMORY OVERLAP  (0) 2008.12.01
8051에 관하여  (0) 2008.11.28
Posted by 구차니