PIC单片机各寄存器汇总资料讲解
PIC单片机器件配置字简介和使用

PIC单片机器件配置字简介和使用在PIC系列单片机里,其芯片内部大都有设置一个特殊的程序存储单元,地址为2007,由单片机的用户自由配置,用来定义一些单片机功能电路单元的性能选项。
我们把这个单元叫做器件配置字(Configuration Bits)。
这种设计给单片机开发工程师带来了很大的灵活性,但是也给初学者带来了一些麻烦。
笔者以PIC16F877为例向初学者介绍配置字的用途和使用。
一、器件配置字的用途图1图1就是PIC16F877配置字的寄存器的情形。
对配置字的各位的解释如下:CP1-CP0:代码保护位,说明如下:11 = 代码保护关;10 = 参见器件数据手册;01 = 参见器件数据手册;00 = 所有存储器均受代码保护。
注:有些器件使用较多或较少的位数来配置代码保护。
目前就一些只使用一位(CP0) 的器件,保护位的说明如下:1 = 代码保护关;0 = 代码保护开。
DP:数据EEPROM 存储器的代码保护位,说明如下:1 = 代码保护关;0 = 数据EEPROM 存储器受代码保护。
注:对于具有数据EEPROM 存储器的ROM 程序存储器器件,使用该位。
BODEN:欠压复位(BOR) 使能位,说明如下:1 = BOR 使能;0 = BOR 禁止。
PWRTE:上电定时器(PWRT) 使能位,说明如下:1 = PWRT 禁止;0 = PWRT 使能。
注1:无论PWRTE 位的值为何,使能欠压复位即自动使能了上电定时器(PWRT)。
请确保使能欠压复位时,也使能了上电定时器。
注2:在一些早期的PICmicro® 单片机中,该位的极性被保留。
MCLRE:MCLR 引脚功能选择位,说明如下:1 = 引脚功能为MCLR;0 = 引脚功能为数字I/O,MCLR 在内部连接到VDD 上。
WDTE:看门狗定时器(WDT) 使能位,说明如下:1 = WDT 使能;0 = WDT 禁止。
FOSC1-FOSC0:振荡器选择位,说明如下:11 = RC 振荡器;10 = HS 振荡器;01 = XT 振荡器;00 = LP 振荡器。
PIC 系列单片机数据存储器的特点和功能概要

PIC系列单片机数据存储器的特点和功能(中)PIC单片机学习PIC单片机数据存储器时,不仅要了解各寄存器单元的功能,而且还应在编制程序时会调用它们完成编程目的。
下面笔者将以编程实例说明它们的用途。
2 间接寻址寄存器INDF和FSR位于PIC单片机数据存储器的最顶端、地址00单元(地址码最小)的间接寻址寄存器INDF是一个空的寄存器。
它只有地址码,在物理上不是一个真正的寄存器。
它的功能常常与寄存器FSR(又称寄存器选择寄存器)配合工作,实现间接寻址目的。
初学专用寄存器INDF和FSR时,记住下述的逻辑关系对编程是有帮助的:使用寄存器INDF的任何指令,在逻辑上都是对寄存器FSR所指向的RAM进行访问,即对INDF(本身)进行间接寻址(访问),读出的应是FSR内容。
以下的一个简单程序是用间接寻址方式清除RAM地址20h~2Fh单元寄存器内容的实例。
MOVLW0x20;20h→w,对指向RAM单元的指针;初始化MOVWF FSR;20h→FSR,FSR指向RAMLOOP CLRF INDF;清除INDF,即清除FSR内容所指;向的单元20h→2FhINCF FSR;(指针)FSR内容加1BTFSS FSR,4;判别(指令)FSR的D3位,若为零;执行下条循环指令;若为1间跳;执行。
GOTO LOOP;跳转到LOOP(循环)CONTINUE…;已完成功能,继续执行程序由上述指令看出,因寄存器INDF和FSR的配合工作,达到了对RAM地址20h~2Fh 的寄存器清零目的。
由于完成上述功能的指令数很少,这就会简化指令系统,使PIC单片机的指令集得以精简。
说明:上述各条指令易于看懂,所以无需再复述,但其中的一条判别指令“BTFSS FSR,4”比较关键。
该条指令是保证题设中要选择RAM地址单元上限值2Fh时,其对应的二进制数为00101111B,此时FSR的第4位恰为1。
所以上述指令中用了一条判断指令;BTFSS FSR,4,判断FSR的D3位值是否为1,若不为1而为0,则执行下条循环指令GOTO LOOP,使FSR中的地址不断加1,直到寄存器FSR的D3位为1时,这时它的内容代表的RAM地址恰为2Fh。
PIC单片机原理及应用(第十一章)解读

1011:特殊事件触发,如果CCPR1与TMR1 相等, CCP1电 平不变,( CCP1IF 置位, CCP1 将 TMR1 复位,并且启动 A/D模数转换电路)。
11.3.3
CCP1比较方式应用
CCP1模块构成输出比较功能,需要对 相应的控制位进行设置,即所谓 CCP1 模块 比较工作方式的初始化。
实例
输出脉冲信号
改变信号频率
1、CCP1引脚的设定
CCP1和RC2合用一个引脚RC2/CCP1,在 CCP1 的捕捉方式下, RC2 引脚必须由 TRISC的 Bit2设定为输入方式。
2、 TMR1工作方式的设定
当CCP1工作于捕捉模式时,必须和TMR1 搭配。同时 TMR1必须设定为定时器工作方式 或者同步计数器方式。计数初值一般以0开 始。
TMR2控制寄存器:T2CON
CCP控制寄存器CCP1CON
Bit3-Bit0/CCP1M3-CCP1M0 :脉宽调制功能设置, 主动参数。
11XX:脉宽调制方式,低2位不起作用。
Bit5~Bit4/CCP1X~CCP1Y:CCP1脉宽寄存器的低2 位,高8位在CCPR1L中,数据参数。
PWM操作设置
比较功能
CCP 模块第 2 个功能是比较方式输出,用于 从引脚上输出不同宽度的矩形脉冲信号、不同 的周期频率脉冲以及非周期频率信号等。 根据预置的特定值(CCPR1)与TMR1计数器 的计数值进行比较,当两者数值一致时给出比 配信号,触发 CCP 中断标志位置位。由 RC2 引脚 可以输出3种逻辑状态。
脉宽调制方式原理图
PWM输出信号周期
PWM输出信号周期可通过向TMR2的周期 寄存器PR2写入来设定,计算公式如下: PWM周期=4Tosc×((PR2)+1)×(TMR2 预分频值) 其中,Tosc为系统时钟周期;4×Tosc为 指令周期;TMR2预分频值可以为1、4或16。
PIC16系列单片机中断寄存器

PIC16系列单片机中断寄存器1、EECON1---eeprom控制寄存器————————————————————————————-| R/W-x | U-0 | U-0 | U-0 | R/W-x | R/W-0 | R/S-0 | R/S-0 | ————————————————————————————-| EEPGD |------|-------|------|WRERR| WREN | WR | RD | ————————————————————————————-EEPGD:程序/数据选择位EEPGD=0;访问数据内存EEPGD=1;访问程序内存WRERR:错误标志位WRERR=0;写操作已经完成WRERR=1;写操作过早终止,指正常操作期间出现MCLR或WDT复位WREN:写使能位WREN=0;禁止写入EEPROMWREN=1;允许写入EEPROMWR:写操作控制位WR=0; EEPROM的写周期已经完成WR=1; 启动写周期。
一旦写入完成,该位将被硬件清零。
RD:读操作控制位RD=0; 未启动EEPROM读操作RD=1; 启动EEPROM读操作EEARD:2、INTCON---中断控制寄存器————————————————————————————--------- | R/W-0 | R/W-0 | R/W-0 | R/W-0 | R/W-0 | R/W-0 | R/S-0 | R/S-0 | ————————————————————————————--------- | GIE | PEIE | TMR0IE| INTE | RBIE | TMR0IF | INTF | RBIF | ————————————————————————————---------GIE: 全局中断允许位GIE=0; 禁止所有中断GIE=1; 允许所有未屏蔽中断PEIE:外设中断允许位PEIE=0;禁止所有外设中断PEIE=1;允许所有未屏蔽外设中断T0IE:TMR0溢出中断允许位T0IE=0; 禁止TMR0溢出中断T0IE=1; 允许TMR0溢出中断INTE:INT外部引脚中断允许位INTE=0; 禁止INT外部引脚中断INTE=1; 允许INT外部引脚中断RBIE:RB端口电平变化中断允许位RBIE=0; 禁止RB端口电平变化中断RBIE=1; 允许RB端口电平变化中断T0IF:TMR0溢出中断标志位T0IF=0; TMR0寄存器未发送溢出T0IF=1; TMR0寄存器已经溢出(必须用软件清零)INTF:INT外部引脚中断标志位INTF=0; 未发生INT外部中断INTF=1; 发生INT外部中断(必须用软件清零)RBIF:RB端口电平变化中断标志位RBIF=0; RB4-RB7引脚未有发生状态变化(电平变化)RBIF=1; RB4-RB7引脚中至少有一位的状态发生了变化(电平变化)3、PIE1:外设中断独立使能寄存器————————————————————————————--------- | R/W-0 | R/W-0 | R/W-0 | R/W-0 | R/W-0 | R/W-0 | R/S-0 | R/S-0 | ————————————————————————————--------- | PSPIE | ADIE | RCIE | TXIE | SSPIE | CCP1IE| TMR2IE| TMR1IE| ————————————————————————————---------PSPIE:并行从动端口的读/写中断允许位PSPIE=0; 禁止PSP的读/写中断PSPIE=1; 允许PSP的读/写中断ADIE:A/D转换中断允许位ADIE=0; 禁止A/D中断ADIE=1; 允许A/D中断RCIE:USART接收中断允许位RCIE=0; 禁止USART接收中断RCIE=1; 允许USART接收中断TXIE:USART发送中断允许位TXIE=0; 禁止USART发送中断TXIE=1; 允许USART发送中断SSPIE:同步串行口中断允许位SSPIE=0; 禁止SSP中断SSPIE=1; 允许SSP中断CCP1IE:CCP1中断允许位CCP1IE=0; 禁止CCP1中断CCP1IE=1; 允许CCP1中断TMR2IE:TMR2与PR2匹配中断允许位TMR2IE=0; 禁止TMR2与PR2匹配中断TMR2IE=1; 允许TMR2与PR2匹配中断TMR1IE:TMR1中断允许位TMR1IE=0; 禁止TMR1中断TMR1IE=1; 允许TMR1中断4、PIE2:外设中断独立使能寄存器2————————————————————————————- | U-0 | R/W-0 | U-0 | R/W-0 | R/W-0 | U-0 | U-0 | R/W-0 | ————————————————————————————- |-------| CMIE |--------| EEIE | BCLIE |-----|-------| TRISE0| ————————————————————————————-CMIE:比较强中断允许位CMIE=0; 禁止比较器中断CMIE=1; 允许比较器中断EEIE:比较强中断允许位EEIE=0; 禁止EEPROM写操作完成中断EEIE=1; 允许EEPROM写操作完成中断BCLIE:比较强中断允许位BCLIE=0; 禁止总线冲突中断BCLIE=1; 允许总线冲突中断CCP2IE:CCP2中断允许位CCP2IE=0; 禁止CCP2中断CCP2IE=1; 允许CCP2中断5、PIR1:外设中断独立标志位寄存器1————————————————————————————----- | R/W-0 | R/W-0 | R-0 | R-0 | R/W-0 | R/W-0 | R/W-0 | R/W-0 | ————————————————————————————- | PSPIF | ADIF | RCIF | TXIF| SSPIF | CCP1IF| TMR2IF| TMR1IF| ————————————————————————————----- PSPIF:并行从动端口读/写中断标志位PSPIF=0; 未发生读/写操作PSPIF=1; 发生了读/写操作ADIF:A/D转换器中断标志位ADIF=0; 未完成A/D转换ADIF=1; 完成A/D转换(必须用软件清零)RCIF:USART接收中断标志位RCIF=0; 接收缓冲器为空RCIF=1; 接收缓冲器RCREG满(当读取RCREG时清零)TXIF:USART发生中断标志位TXIF=0; 接收缓冲器满TXIF=1; 接收缓冲器RCREG为空(当写入TXREG时清零)SSPIF:同步串行中断标志位SSPIF=0; 等待发送/接收完成SSPIF=1; 完成发送/接收CCP1IF:CCP1中断标志位*输入捕捉模式CCP1IF=0; 未发生TMR1寄存器捕捉CCP1IF=1; 发生TMR1寄存器捕捉(必须用软件清零)*输出比较模式CCP1IF=0; 未发生TMR1寄存器的比较匹配CCP1IF=1; 发生了TMR1寄存器的比较匹配(必须用软件清零)*脉宽调制模式(PWM)下未定义TMR2IF:TMR2对PR2匹配中断标志位TMR2IF=0; TMR2对PR2不匹配TMR2IF=1; TMR2对PR2匹配(必须用软件清零)TMR1IF:TMR1溢出中断标志位TMR1IF=0; TMR1寄存器未发生溢出TMR1IF=1; TMR1寄存器发生溢出(必须用软件清零)6、PIR2:外设中断独立标志位寄存器2 ————————————————————————————- | U-0 | R/W-0 | U-0 | R/W-0 | R/W-0 | U-0 | U-0 | R/W-0 | ————————————————————————————- | --- | CMIF | --- | EEIF | BCLIF | --- | --- | CCP2IF| ————————————————————————————- CMIF:比较器中断标志位CMIF=0; 比较器输入未发生变化CMIF=1; 比较器输入发生变化(必须用软件清零)EEIF:EEPROM写操作完成中断标志位EEIF=0; EEPROM写操作未完成EEIF=1; EEPROM写操作已经完成(必须用软件清零)BCLIF:总线冲突中断标志位BCLIF=0; 未出现总线冲突BCLIF=1; 配置SSP模块I2C主控模式时出现总线冲突CCP2IF:CCP2中断标志位*输入捕捉模式CCP2IF=0; 未发生TMR1寄存器捕捉CCP2IF=1; 发生了TMR1寄存器捕捉(必须用软件清零)*输出比较模式CCP2IF=0; 未发生TMR1寄存器的比较匹配CCP2IF=1; 发生了TMR1寄存器的比较匹配(必须用软件清零)*脉宽调制模式(PWM)下未定义7、TRISE:并行从动端口状态/控制寄存器————————————————————————————----| R-0 | R-0 | R/W-0 | R/W-0 | U-0 | R/W-1 | R/W-1 | R/W-1 | ————————————————————————————----| IBF | OBF | IBOV | PSPMODE| --- | TRISE2| TRISE1| TRISE0| ————————————————————————————----8、OPTION_REG:选项寄存器————————————————————————————--------- | R/W-1 | R/W-1 | R/W-1 | R/W-1 | R/W-1 | R/W-1 | R/W-1 | R/W-1 | ————————————————————————————--------- | RBPU | INTEDG | T0CS | T0SE | PSA | PS2 | PS1 | PS0 | ————————————————————————————--------- RBPU:弱上拉使能位RBPU=0; 使能弱上拉RBPU=1; 禁止弱上拉INTEDG:中断信号边沿选择位INTEDG=0; INT引脚下降沿中断INTEDG=1; INT引脚上升沿中断T0CS:TMR0时钟源选择位T0CS=0; 内部指令周期时钟(CLKOUT)T0CS=1; T0CKI引脚输入时钟PSA:预分频器分配位PSA=0; 预分频器分配给TIMER0PSA=1; 预分频器分配给WDTPS2-PS0:预分频比选择位PS2 PS1 PS0 TMR0分频比WDT分频比000 1:2 1:1001 1:4 1:2010 1:8 1:4011 1:16 1:8100 1:32 1:116101 1:64 1:32110 1:128 1:64111 1:256 1:1289、T1CON:TIMER1控制寄存器————————————————————————————--------- | U-0 | U-0 | R/W-0 | R/W-0 | R/W-0 | R/W-0 | R/W-0 | R/W-0 | ————————————————————————————--------- | --- | --- |T1CKPS1|T1CKPS0|T1OSCEN| T1SYNC| TMR1CS| TMR1ON| ————————————————————————————--------- T1CKPS1-T1CKPS0: TIMER1输入时钟预分频比选择位11:1:8预分频比10:1:4预分频比01:1:2预分频比00:1:1预分频比T1OSCEN: TIMER1振荡器使能位T1OSCEN=0; 振荡器关闭T1OSCEN=1; 振荡器使能T1SYNC: TIMER1外部时钟输入同步控制位*当TMR1CS=1时:T1SYNC=0; 同步外部时钟T1SYNC=1; 不同步外部时钟*当TMR1CS=0时:此位被忽略,TIMER1使用内部时钟TMR1CS: TIMER1时钟源选择位TMR1CS=0; 选择内部时钟(FOSC/4)TMR1CS=1; 选择T1OSO/T1CKI引脚的外部时钟(上升沿计数)TMR1ON: TIMER1使能位TMR1ON=0; 关闭TIMER1TMR1ON=1; 开启TIMER1*与TIMER1相关的寄存器有:1.TMR1L保存16位TMR1寄存器低字节的寄存器2.TMR1H保存16位TMR1寄存器高字节的寄存器。
PIC单片机基础教程

PIC单片机基础教程PIC 单片机基础教程第一章PIC 系列单片机结构原理目前在全世界,利用单片机设计的嵌入式系统带来的工业年产值已超过几万亿美元。
在美国,但是使用嵌入式电脑的全数字电视产品预计每年将产生超过1500亿美元的于世界市场,我国的占有率好不到1 % 。
这说明单片机应用早我国才刚刚起步,有着广阔的前景。
因此,培养单片机应用人才,特别是在大学和中等专业学校相关专业中普及单片机知识,有着重要现实意义。
1.1单片机概述微型计算机是一种以电子器件为基础,可以介入输入信息,并能够对各种输入的数字化信息进行算术和逻辑运算,最后产生输出的电子设备。
微型计算机机油快速运算能力,又有极强的逻辑判断能力和的容量存储功能,是20世纪人类最卓越的发明之一,而单片微型计算机就是将CPU 、RAM、ROM、定时器/计数器和多种接口都集成到一块集成电路芯片上的尖端武器和日常生活中最广泛使用的计算机。
近年来,单片机得到突飞猛进的发展,已经完全深入到了人们的生活和工作的各个方面。
单片机的发展过程和性能的日益完善,实际上是对传统控制技术的一场革命,开创了为控制技术的新天地,现代控制系统的核心内涵就是嵌入式计算机应用系统(MCU),而单片机就是最典型、最广泛和最普及的嵌入式计算机应用系统。
可以毫不夸张地说,在现代化的设备中,单片机无处不在,如电信、家用电器、工业控制、仪器仪表、汽车和玩具等;单片机也比比皆是,如自动调台收音机、VCD、遥控空调、微波炉、智能玩具、人体秤和心电监护仪等。
随着科技的发展,单片机必将在更多的方面发挥作用。
目前,全世界各大公司的单片机品种已经形成多个系列,同一系列的单片机在软件和硬件方面有很大的相同之处。
例如,PIC16F87X 系列单片机有着相同的内核、相同和兼容的指令系统。
各种单片机在其内部所处理的对象都是用二进制数表示的信息,因此在学习单片机原理之前,首先要了解二进制数和二进制编码。
1、1、1 二进制数和编码1 计算机中的二进制数字的表示,有二进制、十进制和十六进制等。
PIC单片机总结

一、引言据统计,我国的单片机年容量已达1-3亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。
这说明单片机应用在我国才刚刚起步,有着广阔的前景。
培养单片机应用人才,特别是在工程技术人员中普及单片机知识有着重要的现实意义。
当今单片机厂商琳琅满目,产品性能各异。
针对具体情况,我们应选何种型号呢?首先,我们来弄清两个概念:集中指令集(CISC)和精简指令集(RISC)。
采用CISC结构的单片机数据线和指令线分时复用,即所谓冯.诺伊曼结构。
它的指令丰富,功能较强,但取指令和取数据不能同时进行,速度受限,价格亦高。
采用RISC结构的单片机数据线和指令线分离,即所谓哈佛结构。
这使得取指令和取数据可同时进行,且由于一般指令线宽于数据线,使其指令较同类CISC单片机指令包含更多的处理信息,执行效率更高,速度亦更快。
同时,这种单片机指令多为单字节,程序存储器的空间利用率大大提高,有利于实现超小型化。
属于CISC结构的单片机有Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、台湾Winbond(华邦)W78系列、荷兰Pilips的PCF80C51系列等;属于RISC结构的有Microchip公司的PIC系列、Zilog的Z86系列、Atmel的AT90S系列、韩国三星公司的KS57C系列4位单片机、台湾义隆的EM-78系列等。
一般来说,控制关系较简单的小家电,可以采用RISC型单片机;控制关系较复杂的场合,如通讯产品、工业控制系统应采用CISC单片机。
不过,RISC单片机的迅速完善,使其佼佼者在控制关系复杂的场合也毫不逊色。
根据程序存储方式的不同,单片机可分为EPROM、OTP(一次可编程)、QTP(掩膜)三种。
我国一开始都采用ROMless型单片机(片内无ROM,需片外配EPROM),对单片机的普及起了很大作用,但这种强调接口的单片机无法广泛应用,甚至走入了误区。
PIC单片机16F84的内部硬件资源

PIC单片机16F84的内部硬件资源成都卫东现在我们已经知道要单片机工作,就需用汇编语言编制程序。
而对某个PIC单片机编程时,还需对选用的PIC单片机内部硬件资源有所了解。
这里介绍PIC16F84单片机的内部结构,如图1所示的框图。
由图1看出,其基本组成可分为四个主要部分,即运算器ALU和工作寄存器W;程序存储器;数据存储器和输入/输出(I/O)口;堆栈存储器和定时器等。
现分别介绍如下。
1 运算器ALU及工作寄存器W运算器ALU是一个通用算术、逻辑运算单元,用它可以对工作寄存器W和任何通用寄存器中的两个数进行算术(如加、减、乘、除等)和逻辑运算(如与、或、异或等)。
16F84是八位单片机,ALU的字长是八位。
在有两个操作数的指令中,典型的情况是一个操作数在工作寄存器W中,而另一个操作数是在通用寄存器中,或者是一个立即数。
在只有一个操作数的情况下,该数要么是在工作寄存器W中,要么是在通用寄存器中。
W寄存器是一个专用于ALU操作的寄存器,它是不可寻址的。
根据所执行的指令,ALU还可能会影响框图中状态寄存器STATUS的进位标志C、全零标志Z等。
2 程序存储器单片机内存放程序指令的存储器称为程序存储器。
PIC16F84的所有指令字长为14位。
所以程序存储器的各存储单元是14位宽。
一个存储单元存放一条指令。
16F84的程序存贮器有1024(28)个存储单元(存储容量为1k)。
这些程序存储器都是由FPEROM构成的。
程序存储器是由程序计数器PC寻址的。
16F84的程序计数器为13位宽,可寻址8K(8×1024)的程序存储器空间,但16F84实际上只使用了1k的空间(单元地址为0~3FFH)。
当访问超过这些地址空间的存储单元时,将导致循环回到有效的存储空间。
对于用过其它单片机的用户,可能会感到16F84的片内存储器容量太少了。
实际上并非如此,因为16F84的指令系统都是由单字指令构成的,相应于其它由二字节、三字节甚至四字节指令的单片机而言,PIC单片机的程序存储器有效容量要比标称值扩大2 5倍到3倍。
PIC单片机各寄存器汇总

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 DetectPower Up TimerWatchdog TimerFlash Program Write外部时钟输入(HS,XT或LP OSC配置)如下图:陶瓷(ceramic)谐振器电容的选择如下表:一般情况为:11 1111 0011 0001 0x3F31 或0x3F71位13 CP:闪存程序存储器代码保护位11=代码保护关闭0=所有程序存储器代码保护位12 未定义:读此位为1 1位11 DEBUG:在线调试器模式位11=禁止在线调试器,RB6和RB7是通用I / O引脚0=在线调试功能开启,RB6和RB7专用于调试位10:9 WRT1:WRT0:闪存程序存储器的写使能位11PIC16F876A / 877A11=写保护关闭,所有的程序存储器可能被写入由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 V oltage 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 Fosc1:Fosc0:振荡器选择位0111=RC振荡器10=晶体振荡器HS模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 DetectPower Up TimerWatchdog TimerFlash Program Write外部时钟输入(HS,XT或LP OSC配置)如下图:陶瓷(ceramic)谐振器电容的选择如下表:一般情况为:11 1111 0011 0001 0x3F31 或0x3F71位13 CP:闪存程序存储器代码保护位11=代码保护关闭0=所有程序存储器代码保护位12 未定义:读此位为1 1位11 DEBUG:在线调试器模式位11=禁止在线调试器,RB6和RB7是通用I / O引脚0=在线调试功能开启,RB6和RB7专用于调试位10:9 WRT1:WRT0:闪存程序存储器的写使能位11PIC16F876A / 877A11=写保护关闭,所有的程序存储器可能被写入由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 V oltage 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 Fosc1:Fosc0:振荡器选择位0111=RC振荡器10=晶体振荡器HS模式。
参考振荡频率范围:>2 MHz01=晶体振荡器XT模式。
参考振荡频率范围:100 kHz ~ 4 MHz00=晶体振荡器LP模式。
参考振荡频率范围:<200 kHzOPTION_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:10=预分频器分配给TMR0位2:0 PS2:PS0:设定预分频器的分频系数如下表所示分频设定TMR0分频比WDT分频比000 1:2 1:1001 1:4 1:2010 1:8 1:4011 1:16 1:8100 1:32 1:16101 1:64 1:32110 1:128 1:64111 1:256 1:128T1CON寄存器:位7:6 没有定义,读此两位的结果为0位5:4 T1CKPS1:T1CKPS0:TMR1预分频设置11=预分频系数1:810=预分频系数1:401=预分频系数1:200=预分频系数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 TOUTPS3:TOUTPS0:TMR2计数溢出后分频设置0000=后分频系数1:10001=后分频系数1:2……1111=后分频系数1:16位2 TMR2ON:TMR2计数允许/禁止控制位1=TMR2可以计数0=TMR2计数暂停位1:0 T2CKPS1:T2CKPS0:TMR2预分频设置00= 1:1预分频01= 1:4预分频1x= 1:16预分频CCPxCON寄存器:位7:6 没有定义,读此两位的结果为0位5:4 CCPxX:CCPxY: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引脚输出为11001 =比较模式,预置CCPx引脚输出为1,比较一致时CCPx引脚输出为01010 =比较模式,当比较一致时CCPxIF=1产生软中断,CCPx引脚没有变化1011 =比较模式,当比较一致时CCPxIF=1且触发特殊事件11xx =PWM模式INTCON寄存器:位7 GIE:全局中断使能控制位1=允许中断,但各中断还有独立的使能控制位0=禁止所有的中断,不管各自的中断是否允许位6 PEIE:外围功能模块中断允许控制位1=允许外围功能模块中断0=禁止所有外围功能模块中断位5 TMR0IE(T0IE):TMR0中断使能控制位1=允许TMR0中断0=禁止TMR0中断位4 INTE:RB0/INT引脚沿跳变中断允许控制位1=允许RB0/INT引脚中断0=禁止RB0/INT引脚中断位3 RBIE:PORTB引脚状态变化中断使能控制位1=允许PORTB状态变化中断0=禁止PORTB状态变化中断位2 TMR0IF(T0IF):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=10=数据在时钟的下降沿时发送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寄存器满SSPCON(SSPCON1)寄存器:位7 WCOL:发送数据写入时的冲突标志0=写入时没有冲突发生1=当SSPBUF正在发送数据时程序又对其进行数据写入而发送冲突,此位被置位后必须有软件将其清0位6 SSPOV:接收数据溢出标志位SPI模式0=数据接收没有溢出1=当SSPBUF寄存器中所接收的数据还没有被读走时,内部的移位寄存器SSPSR内又有新的数据就绪,此时SSPSR内的数据将被丢弃,SSPBUF不会被更新。
SPI模式下接收数据溢出只可能发生在从模式下。
如果在从模式下只发送数据,发送完毕后应用程序也必须读一次SSPBUF以免发生溢出标志。
在主模式下得一次接收(或发送)过程都必须通过写SSPBUF才能启动,故一般不会出现接收溢出,除非你在接收数据到来后故意不去读SSPBUF寄存器。