PIC单片机内部寄存器信息汇总

2019-04-15 11:55发布

配置字(__CONFIG): 1) 芯片的振荡模式选择。 2) 片内看门狗的启动。 3) 上电复位延时定时器PWRT的启用。 4) 低电压检测复位BOR模块的启用。 5) 代码保护。 __CONFIG_CP_OFF &_WDT_OFF &_BODEN_OFF &_PWRTE_ON &_XT_OSC &_WRT_OFF &_LVP_OFF &_CPD_OFF ;   _CP_OFF             代码保护关闭 _WDT_OFF           看门狗关闭 _BODEN_OFF         _PWRTE_ON          上电延时定时器打开 _XT_OSC             XT振荡模式 _WRT_OFF            禁止Flash程序空间写操作 _LVP_OFF            禁止低电压编程 _CPD_OFF            EEPROM数据读保护关闭   LVP   Low Voltage Program     低电压编程 CP    Code Protect             代码保护        Date EE Read Protect     EEPROM数据读保护         Brown Out Detect       Power Up Timer       Watchdog Timer       Flash Program Write 外部时钟输入(HS, XT或LP OSC配置)如下图: 陶瓷ceramic谐振器电容的选择 如下表 配置字(__CONFIG):   一般情况为: 11  1111  0011  0001    0x3F31  或0x3F71   位13     CP:闪存程序存储器代码保护位      1           1=代码保护关闭           0=所有程序存储器代码保护 位12     未定义:读此位为1              1 位11     DEBUG:在线调试器模式位       1           1=禁止在线调试器,RB6和RB7是通用I / O引脚             0=在线调试功能开启,RB6和RB7专用于调试 位10:9  WRT1WRT0:闪存程序存储器的写使能位      11           PIC16F876A / 877A           11=写保护关闭,所有的程序存储器可能被写入由EECON控制           10=0000h-00FFh写保护,0100h-1FFFh写入由EECON控制           01=0000h-07FFh写保护,0800h-1FFFh写入由EECON控制           00=0000h-0FFFh写保护,1000h-1FFFh写入由EECON控制 位8      CPD:数据EEPROM存储器代码保护位       (Code Protection bit)         1           1=数据EEPROM存储器代码保护关闭           0=数据EEPROM存储器代码保护功能开启 位7      LVP:低电压(单电源)在线串行编程使能位   (Low Voltage Program)      0           1=RB3/PGM引脚有PGM功能,低电压编程启用           0=RB3是数字I / O 引脚,HV(高电压13V左右) 加到 MCLR必须用于编程 位6      BOREN:欠压复位使能位(低电压检测复位) (Brown-out Reset(Detect))     0           1=低电压检测复位BOR(BOD)模块启用           0=低电压检测复位BOR(BOD)模块关闭 位5:4    未定义:读此两位均为1               11 位3      PWRTEN:上电定时器使能位(上电复位延时定时器)  (Power-up Timer)    0           1=上电定时器关闭           0=上电定时器开启 位2      WDT:看门狗定时器使能位    0晶体振荡器电容的选择           1=看门狗开启                  如右图:           0=看门狗关闭 位1:0   Fosc1Fosc0:振荡器选择位   01           11=RC振荡器           10=晶体振荡器HS模式。参考振荡频率范围:>2 MHz           01=晶体振荡器XT模式。参考振荡频率范围:100 kHz ~ 4 MHz               00=晶体振荡器LP模式。参考振荡频率范围:<200 kHz OPTION_REG寄存器 位7      RBPU:PORTB输入引脚内部弱上拉使能控制位           1=所有PORTB的内部弱上拉被禁止           0=设定为输入状态的引脚内部弱上拉被使能 位6      INTEDG:选择RB0/INT引脚的中断沿           1=RB0/INT 上升沿中断           0=RB0/INT 下降沿中断 位5      T0CS:选择TMR0的计数时钟源           1=外部脉冲沿跳变计数           0=内部指令周期计数 位4      T0SE:选择计数的外部脉冲沿           1=T0CKI脉冲上升沿计数           0=T0CKI脉冲下降沿计数 位3      PSA:预分频器指派           1=预分频器分配给看门狗定时器WDT,此时TMR0的计数预分频为1:1           0=预分频器分配给TMR0 位2:0   PS2PS0:设定预分频器的分频系数如下表所示   分频设定 TMR0分频比 WDT分频比 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 T1CON寄存器:   位7:6   没有定义,读此两位的结果为0        位5:4   T1CKPS1T1CKPS0:TMR1预分频设置           11=预分频系数1:8 10=预分频系数1:4 01=预分频系数1:2 00=预分频系数1:1 位3      T1OSCEN: TMR1内部振荡器控制位           1=打开内部振荡器,反相放大器工作,需外接晶体产生振荡时钟           0=关闭内部振荡电路 位2      T1SYNC:TMR1同步/异步计数控制位           1=异步计数模式           0=同步计数模式 位1      TMR1CS:选择TMR1的计数时钟源           1=T1CKI引脚上的上升沿计数           0=内部指令周期计数(Fosc/4) 位0      TMR1ON:TMR1计数允许/禁止控制位           1=TMR1可以计数           0=TMR1计数暂停 T2CON寄存器: 位7      没有定义,读此位的结果为0       位6:3   TOUTPS3TOUTPS0:TMR2计数溢出后分频设置           0000=后分频系数1:1 0001=后分频系数1:2 …… 1111=后分频系数1:16 位2      TMR2ON:TMR2计数允许/禁止控制位           1=TMR2可以计数           0=TMR2计数暂停 位1:0   T2CKPS1T2CKPS0:TMR2预分频设置           00= 1:1预分频 01= 1:4预分频 1x= 1:16预分频 CCPxCON寄存器: 位7:6  没有定义,读此两位的结果为0 位5:4   CCPxXCCPxY:TMR1预分频设置 捕捉模式:  未用 比较模式:  未用 PWM模式: PWM模式占空比控制字为10位,最低2位即放在CCPxX:CCPxY中,高8位数据放入专门的一个寄存器CCPRxL 位3:0   CCPxM2 CCPxM0:CCP模块工作模式选择位           0000 =关闭所有模式,CCPx模块处于复位状态           0100 =捕捉模式,每一个上升沿捕捉一次           0101 =捕捉模式,每一个下降沿捕捉一次           0110 =捕捉模式,每4个上升沿捕捉一次           0111 =捕捉模式,每16个上升沿捕捉一次           1000 =比较模式,预置CCPx引脚输出为0,比较一致时CCPx引脚输出为1           1001 =比较模式,预置CCPx引脚输出为1,比较一致时CCPx引脚输出为0           1010 =比较模式,当比较一致时CCPxIF=1产生软中断,CCPx引脚没有变化           1011 =比较模式,当比较一致时CCPxIF=1且触发特殊事件           11xx =PWM模式 INTCON寄存器: 位7      GIE:全局中断使能控制位           1=允许中断,但各中断还有独立的使能控制位           0=禁止所有的中断,不管各自的中断是否允许 位6      PEIE:外围功能模块中断允许控制位           1=允许外围功能模块中断           0=禁止所有外围功能模块中断 位5      TMR0IET0IE:TMR0中断使能控制位           1=允许TMR0中断           0=禁止TMR0中断 位4      INTE:RB0/INT引脚沿跳变中断允许控制位           1=允许RB0/INT引脚中断           0=禁止RB0/INT引脚中断 位3      RBIE:PORTB引脚状态变化中断使能控制位           1=允许PORTB状态变化中断           0=禁止PORTB状态变化中断 位2      TMR0IFT0IF:TMR0中断标志位           1=TMR0计数溢出发生中断,必须用软件将其清除           0=TMR0没有溢出中断 位1      INTF:RB0/INT引脚沿跳变中断标志           1=RB0/INT引脚发生中断,必须用软件将其清除           0=没有发生RB0/INT引脚中断 位0      RBIF:PROTB引脚状态变化中断标志位           1=PORTB引脚出现状态变化中断,必须用软件将其清除           0=PORTB引脚没有发生状态变化中断 STATUS寄存器: PIE1寄存器: PIR1寄存器: PIE2寄存器: PIR2寄存器: SSPSTAT寄存器: 位7      SMP:SPI模式下数据输入采样点控制  (sample采样)           SPI主模式  (Serial Peripheral interface 串行外围设备接口)           1=输出时间的中点对输入数据采样           0=输出时间结束时对输入数据采样           SPI从模式           此位必须保持为0 位6      CKE:SPI模式下时钟沿选择,与CKE位一起实现SPI时钟极性的4中模式           CKP=0      (clock edge 时钟沿)           0=数据在时钟的上升沿时发送           1=数据在时钟的下降沿时发送           CKP=1           0=数据在时钟的下降沿时发送           1=数据在时钟的上升沿时发送 位5      D/A:数据/地址控制位,只适用于I2C模式           0=表明接收或发送的是地址码           1=表明接收或发送的是普通数据 位4      P:停止位指示,只适用于I2C模式。当SSP模块没有启用时,此位为0           1=表明刚才检测到一个停止位(芯片复位后此位为0)           0=没有检测到停止位 位3      S:起始位指示,只适用于I2C模式。当SSP模块没有启用时,此位为0 1=表明刚才检测到一个起始位(芯片复位后此位为0)           0=没有检测到起始位 位2      R/W:读/写命令指令,只适用于I2C模式。           在I2C通信时如果寻址地址匹配,该位就留有读或写的标志。其有效期限到出现下一个起始位/停止位/无应答信号为止           0=此次I2C通信为写操作           1=此次I2C通信为读操作,与BF位配合可以判断主器件有/无应答位输出 位1      UA:地址更新标志,只适用于I2C通信时的10位寻址模式           0=无需地址更新           1=表明SSPADD寄存器需要更新地址 位0      BF:数据缓冲器满标志           接收时(SPI和I2C)           0=接收没有完成,SSPBUF寄存器为空           1=接收已经完成,SSPBUF寄存器满           发送时(只适用于I2C)           0=发送完成,SSPBUF寄存器为空           1=正在发送过程中,SSPBUF寄存器满     SSPCONSSPCON1)寄存器: 位7      WCOL:发送数据写入时的冲突标志           0=写入时没有冲突发生           1=当SSPBUF正在发送数据时程序又对其进行数据写入而发送冲突,此位被置位后必须有软件将其清0 位6      SSPOV:接收数据溢出标志位           SPI模式           0=数据接收没有溢出           1=当SSPBUF寄存器中所接收的数据还没有被读走时,内部的移位寄存器SSPSR内又有新的数据就绪,此时SSPSR内的数据将被丢弃,SSPBUF不会被更新。SPI模式下接收数据溢出只可能发生在从模式下。如果在从模式下只发送数据,发送完毕后应用程序也必须读一次SSPBUF以免发生溢出标志。在主模式下得一次接收(或发送)过程都必须通过写SSPBUF才能启动,故一般不会出现接收溢出,除非你在接收数据到来后故意不去读SSPBUF寄存器。           I2C模式           0=接收数据没有溢出           1=当SSPBUF中原来接收到的数据还没有被取走时又有新的数据被收到。在I2C处于数据发送模式时,此位不起任何作用。但无论是接收还是发送,如果此位被置1,必须用软件将其清0。 位5      SSPEN:同步串行接口使能控制位           SPI模式           1=开启SPI功能,配置芯片的SCK、SDO、SDI、和SS引脚为SPI通信引脚           0=SSP模块被关闭,相应的引脚为普通数字I/O功能。           I2C模式           1=开启I2C功能,配置芯片的SDA、SDL为I2C通信引脚           0=SSP模块被关闭,相应的引脚为普通数字I/O功能。 位4      CKP:时钟极性控制位  (clock polarity时钟极性)           SPI模式           0=在通信的空闲状态下时钟处于低电平           1=在通信的空闲状态下时钟处于高电平           I2C模式    用于时钟SCK的释放控制           0=将时钟持续拉低,用以保证数据建立或准备所需的时间           1=允许主器件控制时钟变化           位3:0    SSPM3SSPM0:同步串行接口工作模式选择   M=Mode 模式            0000=SPI主模式,时钟=fosc/4            0001=SPI主模式,时钟=fosc/16            0010=SPI主模式,时钟=fosc/64            0011=SPI主模式,时钟=TMR2的溢出率/2            0100=SPI从模式,时钟=SCK引脚输入,使用SS引脚控制            0101=SPI从模式,时钟=SCK引脚输入,无SS引脚控制(SS可以作为普通I/O)            0110=I2C从模式,7位寻址发送            0111=I2C从模式,10位寻址发送            1000=I2C主模式,时钟=fosc/(4(SSPADD+1))            1001=保留            1010=保留            1011=软件控制型I2C主模式,硬件从模式功能关闭            1100=保留            1101=保留            1110=I2C从模式,7位寻址发送,起始位和停止位产生中断响应            1111=I2C从模式,10位寻址发送,起始位和停止位产生中断响应       SSPCON2寄存器:  (只有带MSSP模块的有该寄存器且只在I2C模式时有用 位7      GCEN:广播呼叫使能位(只适用于I2C从模式)           0=禁止广播寻呼           1=当接收到特殊的广播寻呼地址0x00时,允许产生中断 位6      ACKSTST:应答位接收状态标志(只适用于I2C主模式发送数据)           0=发出数据后接收到从器件发出的应答位           1=发出数据后从器件没有产生应答位 位5      ACKDT:应答数据位(只适用于I2C主模式接收数据)           0=数据收到后主器件将发出应答位           1=数据收到后主器件将不发出应答位 位4      ACKEN:使能硬件自动产生应答位(只适用于I2C主模式接收数据)           0=无应答位发出           1=启动SDA和SCL总线上产生ACKDT所设置的应答位。在应答位发出后此位被硬件自动清零0 位3      RCEN:接收使能位(只适用于I2C主模式)           0=禁止I2C接收数据           1=启动I2C接收8位数据,8位数据接收完毕后硬件自动清0 位2      PEN:使能硬件自动产生停止位(只适用于I2C主模式)           0=无停止位发出           1=启动SDA和SCL总线上产生停止位。停止位发出后此位被硬件自动清零0 位1      RSEN:使能硬件自动产生重复起始位(只适用于I2C主模式)           0=无重复起始位发出           1=启动SDA和SCL总线上产生重复起始位。重复起始位发出后此位被硬件自动清零0 位0      SEN:使能硬件自动产生起始位/电平延伸控制位 I2C主模式 0=无起始位发出 1=启动SDA和SCL总线上产生起始位。起始位发出后此位被硬件自动清零0 I2C从模式 0=只在从器件发送数据时延伸时钟电平 1=在从器件接收或发送数据时延伸时钟电平      ADCON0寄存器:设置ADC模块工作方式   位7:6   ADCS1ADCS0:A/D转换时钟选择           00= fosc/2,即时钟源自于芯片主振荡的2分频           01= fosc/8,即时钟源自于芯片主振荡的8分频           10= fosc/32,即时钟源自于芯片主振荡的32分频           11= fRC,即时钟源自于AD模块内自带的RC振荡频率 位5:3   CHS2CHS0:A/D转换输入模拟信号通道选择           000=通道0,AN0           001=通道1,AN1           010=通道2,AN2           011=通道3,AN3           100=通道4,AN4           101=通道5,AN5           110=通道6,AN6           111=通道7,AN7 位2      GO/DONE:A/D转换启动控制位和转换状态标志位           这一位既是A/D转换控制位,通过软件将其置1后开始一个A/D转换过程;同时又是一个标志位           1=A/D转换正在进行中           0=A/D转换过程结束 位1      未定义:程序中记得该位要始终保持为0 位0      ADON:A/D模块启动控制位           1=A/D转换模块开始工作           0=A/D转换模块被禁止,该部分电路没有任何耗电      ADCON1寄存器:设置ADC模块端口和数据格式 位7      ADFM:A / D转换结果格式选择位 (AD Result Format Select Bit)           0=结果左对齐,ADRESL 寄存器的低6位读作0           1=结果右对齐,ADRESH寄存器的高6位读作0 位6      ADCS2:A / D转换时钟频率选择位(ADCON1位在阴影区域,并以粗体字) 位5:4   未定义:读取这些位将得到0 位3:0   PCFG3PCFG0:A / D模块引脚功能配置位           这4个位决定了功能复用的引脚哪些作为普通数字I/O,哪些作为A/D转换时的电压信号输入。如下表所示:   TXSTA数据发送控制及状态寄存器: 位7      CSRC:同步通信时钟源选择控制位           异步通信时 此位不起作用,可以是任意值           同步通信时           1=选择同步通信主模式,时钟信号通过波特率发生器自己产生           0=选择同步通信从模式,时钟信号由其他主芯片提供 位6      TX9:9位数据格式发送使能控制位           1=选择9位数据格式发送           0=选择8位数据格式发送 位5      TXEN:发送使能控制位           1=允许发送数据           0=数据发送被禁止 位4      SYNC:USART工作模式选择           1=选择同步通信模式           0=选择异步通信模式 位3      未定义:读此位结果为0 位2      BRGH:波特率控制位           异步通信时           1=高速波特率发生模式           0=低速波特率发生模式 位1      TRMT:发送移位寄存器状态位,该位只读           1=移位寄存器为空           0=移位寄存器正在忙于发送数据 位0      TX9D:使用9位数据格式时的第9位发送数据,可以作为奇偶校验位        RCSTA数据接收控制及状态寄存器: 位7      SPEN:串行通信端口使能控制位           1=USART通信端口打开,模块接管引脚RX/DT和TX/CK           0=USART通信端口关闭 位6      RX9:9位数据格式接收使能控制位           1=选择9位数据格式接收           0=选择8位数据格式接收 位5      SREN:单次接收使能控制位           异步通信时,此位不起作用           同步通信主模式时           1=启动单次接收方式,当接收完一个数据后自动清0           0=禁止接收数据 位4      CREN:数据连续接收控制位           异步通信时           1=连续接收串行数据           0=禁止接收数据 同步通信时 1=选择数据连续接收模式,直到此位被清0,CREN将超越SREN的控制 0=禁止数据连续接收,将由SREN决定是否启动单次数据接收 位3      未定义:读此位结果为0 位2      FERR:接收数据帧错误标志,只读           1=当前接收的数据发生帧错误,读一次RCREG寄存器该位将被更新           0=没有帧错误 位1      OERR:接收数据溢出错误,该位只读           1=发生溢出错误,只有通过清除CREN位才能将其清除           0=没有溢出错误 位0      RX9D:使用9位数据格式时的第9位接收数据,可以作为奇偶校验位          CMCON寄存器:     CVRCON CONTROL寄存器:   PCON寄存器:     EECON1寄存器:     TRISE寄存器: