2013-12-20 1 views
5

8051 마이크로 컨트롤러를 리셋하면 모든 포트 핀 래치가 '1'값으로 설정됩니다.내장 c 및 8051 마이크로 컨트롤러

// Assume nothing written to port since reset 
// – DANGEROUS!!! 
Port_data = P1; 

이 경우, 나중에, 누군가가 수정 : 지금은이 책 "임베디드 C"를 읽고있다 그리고 그것은 아래의 코드 THR 문제를 언급하는 것은 보안의 잘못된 인식에 개발자 소강 수 있다는 것입니다 이 코드는 작동하지 않습니다 왜 임베디드 C의 지식을 가진

unsigned char Port_data; 
P1 = 0x00; 
. . . 
// Assumes nothing written to port since reset 
// – WON’T WORK BECAUSE SOMETHING WAS WRITTEN TO PORT ON RESET 
Port_data = P1; 

누구든지 나에게 설명 할 수 : 필요에 따라 동일한 포트의 전부 또는 일부에 쓰기위한 루틴을 포함하는 프로그램은,이 코드는 일반적으로 작동하지 않습니다? 0은 char 변수에 0을 대입합니다.

답변

2

잠재적 인 문제.

1) 포트와 관련된 데이터 방향 레지스터 (DDR)가 예상대로 설정되지 않을 수 있으므로 전원을 켤 때 DDR을 "입력"으로 설정할 수 있습니다. 따라서 포트를 0으로 설정하면 예기치 않게 0이 읽히지 않을 수 있습니다.

2) 포트와 관련된 데이터 방향 레지스터가 "출력"으로 설정되어있을 수 있으며 데이터 읽기가 명확하지 않을 수 있습니다. 아키텍처에 따라, 팬텀 비트는 리드 백을 위해 출력 비트를 섀도 잉하는 데 필요할 수 있습니다.

3) 전원 켜기 코드는 "재설정 벡터"로 점프하는 것 이상의 재설정 명령으로 입력 될 수 있습니다. 따라서 "웜"파워 업이므로 "콜드"파워 업과 관련된 하드웨어 관련 작업은 발생하지 않았습니다.

해결책 : 명시는 DDR 및 (필요에 따라 섀도우 비트) 출력 값을 설정

파워 업 코드

.

일반적으로 임베디드 프로세서를 사용하는 8051에는 적용되지 않을 수 있습니다.

-1

나는 몇 달 전에 같은 책을 읽고 혼란스러워했다. PIC18 및 M0 +를 사용하는 프로젝트에 참여한 후반기에는 실제로 무엇인지 알아 내려고합니다.

실제로 이것은 소프트웨어/프로그래밍 문제가 아니라 하드웨어/전자 문제입니다. 805X 코드가 핀의 외부 입력에서 1과 0을 모두 읽을 수 있기를 원한다면 코드는 먼저 핀에 1을 써야합니다. 코드가 사전에 핀에 0을 기록하면 외부 주변 장치가 핀을 하이로 당겨 코드가 1을 읽을 수 없게됩니다. 왜? 전자 물건 !! 창 밖에서 바람을 즐기고 싶다면 먼저 창문을 열어야한다는 것을 상상해보십시오.

정말로 관심이 있으시다면 혼자서 Google에 "핀 값 대 래치 값"을 입력하십시오. 나는 프로그래머가 이것을 하드웨어 엔지니어에게 맡기는 것이 좋다고 생각한다. 나는 805X가 DDR을 가지고 있지 않다고 믿는다. 핀을 입출력 모드로 전환하는 것은 쉽지만 혼란 스러울 수 있습니다.

관련 문제