8051 포트의 여러 비트를 한 번에 수정할 수있는 간단한 방법이 있는지 알아 내려고하고 있습니다.난파 작업없이 한 번에 여러 비트 수정 - 8051 포트
나는 내 딜레마를 더 구체적인 스타일로 다시 설명 할 것이다.
내 응용 프로그램에는 포트 2가 두 가지 기능으로 나누어 져 있습니다. FA와 FB라고 부르 자.
FA는 하위 3 비트의 출력 값에 의존하며 FB는 나머지 5 비트를 사용하지만 I/O 일 수 있습니다.
FB의 한 비트가 클럭을 제어하는 출력 비트이므로 FA를 수정할 때 FB의 일부를 수정하지 않고 그 반대의 경우도 수정하지 않습니다. 명령의
다음과 같은 종류의 나를 위해 작동하지 않습니다 같은 명령이 두 기능은 아마도 잘못된 시간에 하나 개의 기능을 트리거 값을 덮어 쓰기 때문에
mov P2,#07h
mov P2,#80h
이입니다. 내가 좋아하는 뭔가
멀리 얻을 수있는 다음
setb P2.7
setb P2.6
clr P2.5
clr P2.4
setb P2.3
setb P2.2
clr P2.1
clr P2.0
나는 그 명령은 나머지 비트에 영향을주지 않고 하나의 개별 비트 하나를 설정할 수 있습니다 알고 있지만, 나는 이상을 설정하려고하고 싶습니다 때문에 한 번에 한 비트 씩
읽기 - 수정 - 쓰기에 대해 읽었으며 인터넷에서 MOV가 포트 핀의 논리 연산과 다르다는 것을 알았으므로 여기서 필자의 생각을 기반으로 맞는지 확인하려고 노력할 것입니다. :
FB에 대해 말하십시오. 모든 논리 하이를 출력하고 FA에 대해 최저 비트 = 1을 제외한 모든 논리 로우를 출력하고 싶습니다. 한 번에 하나의 기능으로 작동하고 싶습니다.
mov P2, #0F9h
을하지만 어떻게 든 작동 할 수 포트에 논리를 사용하여 생각하지만, 내 생각이 맞다면 알고 싶어
나는 그것이 한 번에 모든 것을 놓기 때문에이 작동하지 않습니다 알고있다. 아래의 두 경우에서 P2는 mov 명령을 통해 # 0A1h로 설정된 값을 갖고 있다고 가정하고 P2의 핀은 모두 접지에 연결됩니다.는
anl P2,#F8h ;value of P2 = #0A1h AND #F8h = #0A0h
orl P2,#F9h ;value of P2 = #0A0h OR #F9h = #0F9h
anl P2,#F0h ;value of P2 = #0F9h AND #F0h = #0F0h
?이 옳은지 값 P2는 경우 생성 할 이잖아 때문에 I # 개 00H와 방정식을 시작한 두번째 예에서이 더? 정확한
anl P2,#F8h ;value of P2 = #00h AND #F8h = #00h
orl P2,#F9h ;value of P2 = #00h OR #F9h = #0F9h
anl P2,#F0h ;value of P2 = #00h AND #F0h = #00h
이다 I MOV A, P2를 사용하고 A에 대한 값을 원했지만 그 값이 anl 및 orl 계산에 사용되는지 확실하지 않습니다.
전체적으로, 내 질문에, 나머지 비트를 방해하지 않고 포트의 특정 비트 만 수정하려면 anl 및 orl을 사용할 수 있습니까? 또는 setb 및 clr 같은 비트 조작 명령을 사용하여 붙어 있습니까?
R7의 높은 니블에 내 사용자 정의 값을 넣고 포트 2의 하위 니블을 변경하지 않고 포트 2 실제 출력의 상위 니블로 만들고 싶다면이 코딩 방법을 사용하는 것이 더 좋습니다. MOV R7, # 70h MOV A, P2 ANL A, # 0Fh ORL A, R7 MOV P2, A'. 나는 올바른 길을 가고 있는가? – Mike