如何使用PIC将端口设置为输入或输出?

时间:2016-10-11 23:47:30

标签: pic

问题:无法理解如何将端口A和端口B设置为输入和输出

我使用一本书作为参考:第19页 - 简介(章节) - 书名:John Morton第三版 - PIC MicroController您的个人入门课程

根据我从书中所理解的,位编号从右到左,所以我应该读作DCBA端口,这就是为什么:b' 0010'

然而,第18页上的这一段确实令人困惑:

  

它将文字移动到工作寄存器中。然后是指令   tris获取工作寄存器中的数字并使用它来选择   端口的哪些位用作输入,哪些用作输出。一个   二进制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

2 个答案:

答案 0 :(得分: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只是一个4位寄存器,PORTB是8位。在这种情况下,最好明确声明该寄存器的所有位。

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

您必须确保阅读数据表以确定PORT寄存器及其相应引脚的宽度。

答案 1 :(得分:-1)

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