为什么在16F84中使用porta代替trisa功能?

时间:2016-10-31 12:43:01

标签: pic

仍在学习PIC编程。

我来了accros以下操作代码,如清单顶部所示。在此代码中,PORT寄存器在初始化期间使用,TRIS寄存器作出反应。我不明白为什么这有效,无法弄清楚为什么?我学到的东西,这个代码不能正常工作。

代码的第二部分包含我所做的更改。

在初始化期间,我使用TRIS寄存器代替PORT寄存器。 凭借我学到的知识,我的代码应该是正确的。

我在此过程中使用了MPLAB模拟器。寄存器信息来自特殊功能寄存器。

INIT       

            MOVLW H'C0'                ; PB6 & PB7 inputs all others outputs
            MOVWF PORTB                ;  TRISB is changing. WHY?
            MOVLW H'10'                ; Port RA4 input, others outputs
            MOVWF PORTA                ;  TRISA is changing. WHY? 
            MOVLW H'03'                ; prescaler on TMR0 and 1:16
            OPTION                     
            MOVLW H'A0'                ; GIE & T0IE set T0IF cleared
            MOVWF INTCON               
            MOVLW H'F4'                ; initialize INTCNT
            MOVWF INTCNT               
            MOVLW H'06'                ; initialize FUDGE
            MOVWF FUDGE                
            CLRF OFFSET                ; initialize OFFSET
            RETURN                     

阅读完手册后,似乎需要进行一些更改才能正确初始化

INIT        BSF   STATUS,RP0            ;Change to Bank1 
            MOVLW B'11000000'          ; PB6 & PB7 inputs all others outputs
            MOVWF TRISB
            MOVLW B'00010000'          ; Port RA4 input, others outputs
            MOVWF TRISA                 
            MOVLW H'03'                ; prescaler on TMR0 and 1:16
            MOVWF OPTION_REG
            MOVLW H'A0'                ; GIE & T0IE set T0IF cleared
            MOVWF INTCON               
            MOVLW H'F4'                ; initialize INTCNT
            MOVWF INTCNT               
            MOVLW H'06'                ; initialize FUDGE
            MOVWF FUDGE                
            CLRF OFFSET                ; initialize OFFSET
            RETURN 

1 个答案:

答案 0 :(得分:1)

datasheet第2.2节:数据存储组织

中描述了所有内容
  

数据存储器分为两个区域。首先是   特殊功能寄存器(SFR)区域,而第二个是通用   目的寄存器(GPR)区域.SFR控制器的操作   设备。部分数据存储器被存储。这适用于SFR   区域和探地区域。

因此,当我们编写单CPU指令时,您可以看到SFR / GPR地址长7位!第8位地址是存储器B a.meth() called选择位,该位不是单个14位指令的一部分。 另请参阅:PIC16CXXX指令集!例如,您可以检查Bank指令。它由14位组成:b'00 0011 dfff ffff'其中'd'是方向,'fff ffff'是7位地址。 要处理7位以上的数据,您需要PIC16F84的寻呼机制,这是DECF SFR中存储的单个位RP0。因为PIC16F84只有8位数据存储器地址空间。

检查STATUSPORTA 7位地址,因为您可以看到它是相同的(0x05),但第8位是不同的。此位必须通过TRISA位的另一条指令设置,您在示例中使用:RP0指令。

请记住,MPLAB编译器不知道设置了哪个库,因此标签BSF STATUS,RP0PORTA都是正确的。