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。
飞思卡尔16位单片机寄存器总结

一、输入输出端口寄存器I/O接口包括PORTA、B、E、K、T、S、M、P、H、J、AD。
其中PORTA、B、E、K属于复用扩展总线接口,单片机在扩展方式下工作时,作为总线信号。
1、PORTT、S、M、P、H、JI/O寄存器PTx如果对应位数据方向寄存器DDRx为“0”,输入,读取该寄存器返回引脚值;“1”,输出,读取该寄存器返回I/O寄存器的内容。
数据方向寄存器DDRx决定对应引脚为输出还是输入,“0”为输入,“1”为输出,复位后,默认为输入。
上拉/下拉使能寄存器PERx选择使用内置上拉/下拉器件,“1”允许,“0”禁用。
中断使能寄存器PIExPORTP、H、J三个端口具有中断功能。
“1”对应引脚允许中断,“0”禁止,复位后,所有端口中断关闭。
中断标志寄存器PIFxPORTP、H、J三个端口具有中断功能。
“1”对应引脚允许中断,“0”禁止,复位后,所有端口中断关闭。
2、PORTA、B、E、KI/O寄存器Px若某端口的引脚被定义为输出,写入I/O寄存器中的数值会从对应引脚输出;输入,通过I/O寄存器读取对应引脚电平。
数据方向寄存器DDRx决定对应引脚为输出还是输入,“0”为输入,“1”为输出,复位后,默认为输入。
PORTE最低两位只能为输入。
上拉电阻控制寄存器PERx第7、4、1、0位分别控制K、E、B、A端口,“1”允许使用对应端口的上拉电阻,“0”禁止,复位后,PK、PE端口使能,PB、PA禁止。
二、中断系统中断控制寄存器INTCR第7位IRQE,中断电平/边沿有效选择,0为低电平有效,1为下降沿有效;第6位IRQEN,外部中断IRQ中断请求使能,0关闭,1允许。
三、PWM模块PWM允许寄存器PWME对应每一位PWMEx,1启动输出,0停止输出,读写任意时刻。
PWM预分频时钟选择寄存器PWMPRCLK为Clock A和B选择独立的预分频因子,读写任意时刻。
Clock B对应6、5、4三位,Clock A对应2、1、0三位,分别可以实现2、4、8、16、32、64、128分频。
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寄存器高字节的寄存器。
PIC18F单片机内核组成

PIC18F单片机内核组成
1.中央处理器(1)运算器:8 位运算/逻辑运算部件,累加器(工作寄存器W)
(2)8*8 硬件乘法器:可执行无符号运算,产生一个16 位运算结果
(3)控制单元:定时控制逻辑,RAM 文件寄存器,地址多路选择器,指令寄存器,文件选择寄存器
2.程序存储器和程序计数器
单片机内存放程序指令的存储器称为程序存储器。
程序计数器是21 位宽,可寻址2MB 的程序存储器空间
3.状态寄存器
PIC 单片机的状态寄存器是8 位寄存器,用来存放运算结果的一些特征
bit7~bit5:未用,该位读出时始终为0
bit4:N 表示负标志位,用于有符号的算术运算,结果表明是否为负数1=结果为负
0=结果为正
bit3:表示溢出为,用于有符号算术运算,表明溢出了7 位二进制数的范围1=算术运算或逻辑运算中发生溢出
0=没有发生溢出
bit2:Z 表示全0 标志位
1=算术运算或逻辑运算结果为0
0=算术运算或逻辑运算结果不为0
bit1:DC 表示辅助进位/借位标志位,用于
ADDWF、ADDLW、SUBLW、SUBWF。
pic16f84a的简介

PIC16F84单片机的内部硬件资源学些PIC单片机,在Microchip尚未推出其他Flash系列的情况下,很多菜鸟都是从PIC16F84开始的,我们把它整理了一份中文资料供大家学习。
首先介绍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单片机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寄存器。