2010-06-09 5 views
2

8051 마이크로 컨트롤러 용 프로그램을 작성하고 있습니다. 프로그램의 첫 번째 부분에서 몇 가지 계산을하고 결과에 따라 LED를 켜거나 끄지 만 (CLR P1.7을 사용합니다. 여기서 P1.7은 LED가 마이크로 컨트롤러에 연결된 포트입니다).(8051) 단일 비트가 설정되어 있는지 확인하십시오.

프로그램의 다음 부분에서 비트를 검색하고 어딘가에 저장하고 JB과 같은 if-jump 명령어에서 사용하려고합니다. 어떻게해야합니까?

또한 코드 샘플에서 MOV C, P1.7 명령을 보았습니다. 여기에 C은 무엇입니까?

답변

4

여기에 C은 8051의 캐리 플래그입니다.이 플래그는 여러 바이트에 대해 더하기 연산을 수행 할 때 "캐리"를 유지하는 데 사용할 수 있기 때문에 호출됩니다.

단일 비트 레지스터로도 사용할 수 있습니다. 여기에서와 같이 비트를 이동하려는 포트 값 (예 : P1.7)으로로드 한 다음 다른 위치에 저장합니다 (예 : :

MOV C, P1.7 
MOV <bit-address>, C 

그런 다음 나중에는 사용하여에 분기 할 수 있습니다 :

JB <bit-address>, <label> 
+0

C51 컴파일러가 사용하는 또 다른 트릭은 '#pragma disable'을 사용할 때 이전 인터럽트 상태를 저장하는 것과 같이 'C'플래그 (다른 상태 워드와 함께)를 푸시하기 위해 'PUSH PSW'를 사용하는 것입니다. –

1

특수 기능 레지스터의 일부는 주소 비트된다. 나는 그것들이 모두 0이나 8로 끝난다고 믿습니다. 제 앞에서는 언급이 없지만 setb r0.1과 같은 것을 할 수 있습니다. 그렇게하면 무언가를 위해 캐리가 필요하다면 그것을 밀고 스택에 공간을 사용하는 것에 대해 걱정할 필요가 없습니다.