2017-03-29 1 views
0

PIC16F818 마이크로 컨트롤러에서 디지털 입력으로 RB0-7을 설정하려고합니다. 나는 다음과 같은 설정을 사용 그렇게하기 위해서는 : - 4 올바르게 작동하지만 스위치된다 (8 비트 블록을 LED) PORTB에Pic16f818 - trisa regiter를 해당 비트의 디지털 입력으로 설정하십시오. RB5 RB6 RB7

void config() { 
    //cmcon = 0x07;  // Sets all IO pins to digital 
    trisa = 0xFF;  // Set porta as inputs 
    trisb = 0x00;  // Set portb as outputs 
    adcon1 = 0x07; // For PIC16F84A comment the line above and uncomment this statement 
    portb = 0x00;  // Reset value of portb (portb = 0) 
    _CONFIG & _CP_OFF & _LVP_OFF & _CPD_OFF & _DEBUG_OFF & _MCLR_OFF & _INTRC_IO & _WRT_ENABLE_OFF & _PWRTE_OFF; 

} 

내가 내 포르타 (8 스위치 블록)를 매핑하여이 설정을 테스트, 0 스위치 5-7은 응답하지 않지만 비트는 다른 PIC 기능에 의해 내부적으로 설정되어 출력됩니다. (b5) 0 (b6) 0 (b7) 1.

+0

방금 ​​RB7 RB6 RB5 중단을 사용하지 않도록 설정하는 구성 설정으로 코드를 업데이트했습니다. – Hubertoss

답변

0

데이터를 포트로 출력하는 데 래치를 사용하는 것이 좋습니다.

"portb"대신 "latb"를 사용하십시오.

"latb"는 사용중인 컴파일러에 따라 다르게 정의 될 수 있습니다.

문제가 해결 된 경우 알려 주시기 바랍니다. 또한

, LATCH 및 포트 사용의 차이에 대한 자세한 내용은 , 그는 PIC18F 제품군에 대한 질문이 경우이 링크

Difference between PORT and LATCH on PIC

를 참조하지만, 주어진 대답은 매우있다 일반적인 그림 프로그래밍 (가족이 무엇이든간에)에 도움이되므로 이점을 누릴 수 있습니다.

0

이것은 마이크로 칩 컨트롤러를 사용할 때 사람들이 흔히 가지고있는 문제입니다. stackexchange에는 Mantra가 있습니다 : "LATx에 쓰기, PORTx에서 읽음"

PORTx는 포트의 현재 상태를 알려줍니다.

LATX는 출력 래치입니다.

초기화하는 동안 모든 포트에 대해 TRISx, ANSELx (아날로그 선택), CNPUx/CNPDx (풀업/풀) 값을 설정해야합니다.