2016-10-11 5 views
1

문제 : - - 소개 (장)은 bookname 19 페이지 : 참고로 책을 사용하여 입력과 출력PIC를 사용하여 포트를 입력 또는 출력으로 설정하는 방법은 무엇입니까? 존 모튼 제 3 판 - PIC는 마이크로 컨트롤러 :

임로 포트 A 및 포트 B를 설정하는 방법에 대한 이해를 할 수 없습니다 개인 입문 과정

내가 책에서 이해 무엇에 따르면, 비트 번호가 같은 포트 DCBA하고 그게 전부 읽기 왼쪽으로, 그렇게 생각 메신저 오른쪽에서가는 이유 : b'0010 '그러나

,이 단락 페이지 18은 정말로 혼란 스럽습니다.

리터럴을 작업 레지스터로 이동시킵니다. 그런 다음 명령 트리스는 작업 레지스터에서 번호를 가져와 포트의 비트가 입력으로 작동하고 출력으로는 을 선택하는 데 사용합니다. 바이너리 1은 입력에 해당하고 0은 출력에 해당합니다. 각 포트, 4 비트가있는 경우

그리고 다시 읽고, 나는 궁금해, 내가 입력 얼마나 많은 이들의 선택하고 출력은 몇입니까? 하지만 포트는 출력 또는 입력 만 가능하다고 생각했습니다.

누군가가 명확하게 설명하겠습니까?

__config _CP_OFF & _WDT_OFF & _XT_OSC 
list P = 16F57; 
include "C:\Program Files (x86)\Microchip\MPLABX\v3.40\mpasmx\p16f57.inc"; 


portA equ 05 
portB equ 06 
org 0 ; Starts at 0? 
goto Start 


Init 
    clrf portA ; Reset Port A and B States 
    clrf portB ; 
    movlw b'0010'; Set port B as output 
    tris portA; 
    movlw b'0010'; Set Port A as input 
    ;0010 should mean -> ABCD port states? 
    tris portB; 
    retlw 0; return 

Start 
    call Init; 

Main 
    bsf portA,0; 

goto Main; 

    END 

답변

1

개별 포트는 관련된 모든 핀에 해당합니다. 예를 들어, PIC16F57에는 RA0, RA1, RA2 및 RA3 핀이 있습니다. 이 핀은 각각 PORTA 비트 0, 1, 2 및 3에 해당합니다. 그래서, 이것은 실제로 일어나고있는 것입니다. 주목할

clrf portA 
clrf portB 
movlw b'0010' ;Set RA1 as input and RA0,RA2,RA3 as output 
tris portA; 
movlw b'0010' ;Set RB1 as input and RB0,RB2,RB3 as output 
tris portB 

뭔가 PORTA PORTB가 8 비트이고, 단지 4 비트 레지스터 인 동안 모든 핀은, 파워 업시에 입력으로 초기화 또는 리셋된다는 것이다. 이 경우 해당 레지스터의 모든 비트를 명시 적으로 선언하는 것이 좋습니다.

movlw b'00000010' ;Set RB1 as input all others as output. 
tris portB 

PORT 레지스터와 해당 핀의 너비를 결정하려면 데이터 시트를 읽어야합니다.

+0

답변 해 주셔서 감사합니다. 그러나 칩을 외부 세계에 연결하기 위해 "핀"을 사용할 수 있다면 왜 "포트"에 대한 정의가 있습니까? – KenobiShan

+0

@ScientistGirl - 포트의 각 비트가 개별 핀에 해당하기 때문에 - 핀을 사용하려면 올바른 포트 레지스터를 참조해야합니다. 예를 들어, 위의 코드에서 RA0은 출력으로 설정되었습니다. 이제, 만약 그 출력을 높은 레벨로 설정하고 싶다면,이'BSF PORTA, 0'와 같이 PORTA 레지스터 내에서 관련 비트를 설정해야합니다. 출력을 낮게 설정하려면'BCF PORTA, 0'을 사용합니다. –

+0

그것에 대해 생각해 볼 수있는 또 다른 방법은 8 비트 마이크로 컨트롤러로 작업하는 것입니다. 칩의 설계자가 단일 핀에 대해 전체 레지스터를 사용할 수는 있지만, 이는 7 비트의 낭비입니다 (핀에는 1 비트 만 필요함). 보다 효율적으로 사용하려면 각 비트가 개별 핀과 연결되어있는 8 비트 레지스터가 필요합니다. 이는 공간을 절약합니다. 데이터 시트 [여기] (http://ww1.microchip.com/downloads/en/DeviceDoc/41213D.pdf)를 살펴 보시기 바랍니다. –

-1
TRISB=0xFF; //For PortB as a Input 
TRISB=0x00; //For PortB as Output