仍在学习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
答案 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位数据存储器地址空间。
检查STATUS
和PORTA
7位地址,因为您可以看到它是相同的(0x05),但第8位是不同的。此位必须通过TRISA
位的另一条指令设置,您在示例中使用:RP0
指令。
请记住,MPLAB编译器不知道设置了哪个库,因此标签BSF STATUS,RP0
和PORTA
都是正确的。