最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

PIC18F25K80的配置位设置

IT圈 admin 34浏览 0评论

2024年5月7日发(作者:公孙青枫)

学习的路上,越努力越渺小。

——单片机初学者

本篇文章以“PIC18F25K80.h”与PIC18F25K80的datasheet进行阐述(PIC18F25K80.h可

在PICC18的安装目录下Include下查找,例:E:MPLABPICC18include)。

//配置寄存器:CONFIG1L

XINST://扩展指令集使能位

1=指令集扩展和变址寻址模式被启用

0=指令集扩展和变址寻址模式被禁用(传统模式)

#defineXINST_ON0xFFFF

#defineXINST_OFF0xFFBF

SOSCSEL<1:0>:SOSC电源选择和模式配置位

11=选择的高功率电路SOSC

10=数字(SCLKI)模式;I/O端口RC0和RC1的功能启用

01=选择低功耗SOSC电路

00=保留

#defineSOSCSEL_HIGH0xFFFF

#defineSOSCSEL_LOW0xFFEF

#defineSOSCSEL_DIG0xFFF7

INTOSCSEL:LF-INTOSC低功耗使能位

1=休眠期间LF-INTOSC在高功率模式下

0=休眠期间LF-INTOSC在低功耗模式下

#defineINTOSCSEL_HIGH0xFFFF

#defineINTOSCSEL_LOW0xFFFB

______________

RETEN:

Vreg

休眠使能位

1=在休眠模式下超低功耗稳压电源关闭,由REGSLP(WDTCON<7>)控制

0=在休眠模式下超低功耗稳压电源使能,由SRETEN(WDTCON<4>)控制,超低功耗调节

器被启用

#defineRETEN_ON0xFFFE

#defineRETEN_OFF0xFFFF

//配置寄存器:CONFIG1H

IESO:内部/外部振荡器切换位

1=双速启动时启用

0=双速启动时禁用

#defineIESO_OFF

#defineIESO_ON

0xFFFF

0x7FFF

FCMEN:故障保护时钟监视器使能位

1=故障保护时钟监视器使能

0=故障保护时钟监视器被禁用

#defineFCMEN_OFF0xFFFF

#defineFCMEN_ON0xBFFF

PLLCFG:4XPLL使能位

1=振荡器乘以4

0=振荡器直接使用

#definePLLCFG_ON

#definePLLCFG_OFF

0xEFFF

0xFFFF

FOSC<3:0>:振荡器选择位

1101=EC1,EC振荡器(低功耗,DC-160KHZ)

1100=EC1IO,EC振荡器,RA6上CLKOUT功能(低功耗,DC-160KHZ)

1011=EC2,EC振荡器(中功率,160KHZ-16MHZ)

1010=EC2IO,EC振荡器,RA6上CLKOUT功能(中功率,160KHZ-16MHZ)

1001=INTIO1,内部RC振荡器,RA6上CLKOUT功能

1000=INTIO2,内部RC振荡器

0111=RC,外部RC振荡器

0110=RCIO,外部RC振荡器,在RA6CKLOUT功能

0101=EC3,EC振荡器(高功率,16MHZ-64MHZ)

0100=EC3IO,EC振荡器,RA6上CLKOUT功能(高功率,16MHZ-64MHZ)

0011=HS1,HS振荡器(中功率,4MHZ-16MHZ)

0010=HS2,HS振荡器(高功率,16MHZ-25MHZ)

0001=XT振荡器

0000=LP振荡器

#defineFOSC_RCIO

#defineFOSC_RC

#defineFOSC_EC1

#defineFOSC_EC1IO

#defineFOSC_EC2

#defineFOSC_EC2IO

#defineFOSC_INTIO1

#defineFOSC_INTIO2

#defineFOSC_EC3

#defineFOSC_EC3IO

#defineFOSC_HS1

#defineFOSC_HS2

0xF0FF

0xF1FF

0xFAFF

0xFBFF

0xFCFF

0xFDFF

0xFEFF

0xFFFF

0xF2FF

0xF3FF

0xF4FF

0xF5FF

#defineFOSC_XT

#defineFOSC_LP

0xF6FF

0xF7FF

注:该处发现PIC18F25K80.h与datasheet说明不一致,具体可以参照实验效果。(目

前,我以PIC18F25K80.h为准设置了外部振荡器,以定时器时钟进行测试,实验未发现异常)

//配置寄存器:CONFIG2L

BORPWR<1:0>:BORMV功率电平位

11=ZPBORVMV而不是BORMV选择

10=BORMV被设置为一个高功率电平

01=BORMV被设置为中功率电平

00=BORMV被设置为低功率电平

#defineBORPWR_ZPBORMV0xFFFF

#defineBORPWR_HIGH0xFFDF

#defineBORPWR_MEDIUM0xFFBF

#defineBORPWR_LOW0xFF9F

BORV<1:0>:欠压复位电压位

11=VBORMV被设定为1.8V

10=VBORMV被设定为2.0V

01=VBORMV被设定为2.7V

00=VBORMV被设定为3.0V

#defineBORV_3

#defineBORV_2

#defineBORV_1

#defineBORV_0

0xFFFF

0xFFF7

0xFFEF

0xFFE7

BOREN<1:0>:欠压复位使能位

11=欠压复位是只在硬件启用(SBOREN被禁用)

10=欠压复位只在硬件下启用,在休眠模式下禁止(SBOREN被禁用)

01=欠压复位使能时,由软件控制(使能SBOREN)

00=欠压复位是在硬件和软件禁用

#defineBOREN_SBORDIS0xFFFF

#defineBOREN_NOSLP0xFFFD

#defineBOREN_ON0xFFFB

#defineBOREN_OFF0xFFF9

PWRTEN:上电延时定时器使能位

1=PWRT被禁用

0=PWRT启用

#definePWRTEN_OFF0xFFFF

#definePWRTEN_ON0xFFFE

//配置寄存器:CONFIG2H

WDTPS<4:0>:看门狗定时器分频选择位

10101-11111=保留

10100=1:1,048,576(4,194.304s)

10011=1:524,288(2,097.152s)

10010=1:262,144(1,048.576s)

10001=1:131,072(524.288s)

10000=1:65,536(262.144s)

01111=1:32,768(131.072s)

01110=1:16,384(65.536s)

01101=1:8,192(32.768s)

01100=1:4,096(16.384s)

01011=1:2,048(8.192s)

01010=1:1,024(4.096s)

01001=1:512(2.048s)

01000=1:256(1.024s)

00111=1:128(512ms)

00110=1:64(256ms)

00101=1:32(128ms)

00100=1:16(64ms)

00011=1:8(32ms)

00010=1:4(16ms)

00001=1:2(8ms)

00000=1:1(4ms)

#defineWDTPS_1048576

#defineWDTPS_524288

#defineWDTPS_262144

#defineWDTPS_131072

#defineWDTPS_65536

#defineWDTPS_32768

#defineWDTPS_16384

#defineWDTPS_8192

#defineWDTPS_4096

#defineWDTPS_2048

#defineWDTPS_1024

#defineWDTPS_512

#defineWDTPS_256

#defineWDTPS_128

0xFFFF

0xCFFF

0xCBFF

0xC7FF

0xC3FF

0xBFFF

0xBBFF

0xB7FF

0xB3FF

0xAFFF

0xABFF

0xA7FF

0xA3FF

0x9FFF

#defineWDTPS_64

#defineWDTPS_32

#defineWDTPS_16

#defineWDTPS_8

#defineWDTPS_4

#defineWDTPS_2

#defineWDTPS_1

0x9BFF

0x97FF

0x93FF

0x8FFF

0x8BFF

0x87FF

0x83FF

WDTEN<1:0>:看门狗定时器使能位

11=WDT在硬件中启用;SWDTEN位被禁用

10=WDT由SWDTEN位设置控制

01=仅当设备处于活动状态WDT启用,休眠模式禁用;SWDTEN位禁用

00=WDT是硬件禁用;SWDTEN位被禁用

#defineWDTEN_SWDTDIS0xFFFF

#defineWDTEN_ON0xFEFF

#defineWDTEN_NOSLP0xFDFF

#defineWDTEN_OFF0xFCFF

//配置寄存器:CONFIG3H

MCLRE:MCLR引脚使能位

1=MCLR引脚使能;RG5输入引脚被禁用

0=RG5输入引脚使能;禁止MCLR

#defineMCLRE_ON0xFFFF

#defineMCLRE_OFF0x7FFF

MSSPMSK:MSSPV37位地址掩码模式使能位

1=7位地址掩码模式已启用

0=5位地址掩码模式已启用

#defineMSSPMSK_MSK70xFFFF

#defineMSSPMSK_MSK50xF7FF

T3CKMX:Timer3时钟输入引脚复用位

1=Timer3从64引脚封装的RG2/T3CKI引脚获得时钟输入

0=Timer3从64引脚封装的RB5/T3CKI引脚获取时钟输入

T0CKMX:Timer0时钟输入引脚复用位

1=Timer0从64引脚封装的RB5/T0CKI引脚获得时钟输入

0=Timer0从64引脚封装的RG4/T0CKI引脚获得时钟输入

CANMX:ECAN引脚复用位

1=CANTX和CANRX引脚分别位于RB2和RB3上

0=CANTX和CANRX引脚分别位于RC6和RC7上(28引脚和40/44引脚)

封装)或RE4和RE5分别(64引脚封装)

#defineCANMX_PORTB0xFFFF

#defineCANMX_PORTC0xFEFF

//配置寄存器:CONFIG4L

-----------------------

DEBUG:后台调试器使能位

1=后台调试已禁用,RB6和RB7被配置为通用I/O引脚

0=后台调试启用,RB6和RB7专用于在线调试

BBSIZ0:引导块大小选择位

1=2千瓦引导块大小

0=1千瓦引导块大小

#defineBBSIZ_BB2K

#defineBBSIZ_BB1K

0xFFFF

0xFFEF

STVREN:堆栈满/下溢复位使能位

1=堆栈满/下溢将导致复位

0=堆栈满/下溢不会导致复位

#defineSTVREN_ON0xFFFF

#defineSTVREN_OFF0xFFFE

//配置寄存器:CONFIG5L

CP3:代码保护位

1=Block3没有代码保护

0=Block3代码保护

#defineCP3_OFF

#defineCP3_ON

CP2:代码保护位

1=Block2没有代码保护

0=Block2代码保护

#defineCP2_OFF

#defineCP2_ON

0xFFFF

0xFFF7

0xFFFF

0xFFFB

CP1:代码保护位

1=Block1没有代码保护

0=Block1代码保护

#defineCP1_OFF

#defineCP1_ON

CP0:代码保护位

1=Block0没有代码保护

0=Block0代码保护

#defineCP0_OFF

#defineCP0_ON

0xFFFF

0xFFFD

0xFFFF

0xFFFE

//配置寄存器:CONFIG5H

CPD:数据EEPROM代码保护位

1=数据EEPROM没有代码保护

0=数据EEPROM代码保护

#defineCPD_OFF0xFFFF

#defineCPD_ON0x7FFF

CPB:引导区代码保护位

1=引导块不是代码保护

0=引导块代码保护

#defineCPB_OFF

#defineCPB_ON

0xFFFF

0xBFFF

//配置寄存器:CONFIG6L

WRT3:写保护位

1=Block3没有写保护

0=Block3写保护

#defineWRT3_OFF

#defineWRT3_ON

WRT2:写保护位

1=Block2没有写保护

0=Block2写保护

0xFFFF

0xFFF7

#defineWRT2_OFF

#defineWRT2_ON

WRT1:写保护位

1=Block1没有写保护

0=Block1写保护

#defineWRT1_OFF

#defineWRT1_ON

WRT0:写保护位

1=Block0没有写保护

0=Block0写保护

#defineWRT0_OFF

#defineWRT0_ON

0xFFFF

0xFFFB

0xFFFF

0xFFFD

0xFFFF

0xFFFE

//配置寄存器:CONFIG6H

WRTD:数据EEPROM写保护位

1=数据EEPROM没有写保护

0=数据EEPROM写保护

#defineWRTC_OFF0xFFFF

#defineWRTC_ON0xDFFF

WRTB:引导块写保护位

1=引导块没有写保护

0=引导块写保护

#defineWRTB_OFF

#defineWRTB_ON

0xFFFF

0xBFFF

WRTC:配置寄存器的写保护位

1=配置寄存器,没有写保护

0=配置寄存器,写保护

#defineWRTD_OFF0xFFFF

#defineWRTD_ON0x7FFF

//配置寄存器:CONFIG7L

EBTR3:表读保护位

1=不保护Block3免受在其他块中执行的表读取

0=保护Block3免受在其他块中执行的表读取

#defineEBTR3_OFF0xFFFF

#defineEBTR3_ON0xFFF7

EBTR2:表读保护位

1=不保护Block2免受在其他块中执行的表读取

0=保护Block2免受在其他块中执行的表读取

#defineEBTR2_OFF0xFFFF

#defineEBTR2_ON0xFFFB

EBTR1:表读保护位

1=不保护Block1免受在其他块中执行的表读取

0=保护Block1免受在其他块中执行的表读取

#defineEBTR1_OFF0xFFFF

#defineEBTR1_ON0xFFFD

EBTR0:表读保护位

1=不保护Block0免受在其他块中执行的表读取

0=保护Block0免受在其他块中执行的表读取

#defineEBTR0_OFF0xFFFF

#defineEBTR0_ON0xFFFE

//配置寄存器:CONFIG7H

EBTRB:引导块表读保护位

1=不保护引导块不受其他块中执行的表读取的影响

0=保护引导块不受其他块中执行的表读取的影响

#defineEBTRB_OFF0xFFFF

#defineEBTRB_ON0xBFFF

综上可对PIC18的配置字进行设置,PIC单片机的配置字由__CONFIG(w,s)命令进行设置。

(__CONFIG(w,s)函数在PICC18的安装目录下Include下的PIC18.h中查找,例:

E:MPLABPICC18include)

PIC18的配置位设置与其他配置字设置不一致,其需要单独对每一个配置寄存器进行设

置,也就是CONFIG1…7是分开写的。以我编写的为例:

__CONFIG(1,XINST_OFF&SOSCSEL_DIG&FOSC_HS1&FCMEN_OFF&PLLCFG_OFF);

__CONFIG(2,PWRTEN_OFF&WDTEN_OFF&BOREN_OFF);

__CONFIG(4,STVREN_OFF);

注:配置字设置可参照以上格式进行设置,具体设置值参照上文配置寄存器含义。最好是将

涉及到的配置都进行设置,因为默认配置不适用于大众代码,例如:看门狗是默认打开的,

如若不进行设置,则上电后会出现不断复位,而究其代码却查找不出复位原因。

2024年5月7日发(作者:公孙青枫)

学习的路上,越努力越渺小。

——单片机初学者

本篇文章以“PIC18F25K80.h”与PIC18F25K80的datasheet进行阐述(PIC18F25K80.h可

在PICC18的安装目录下Include下查找,例:E:MPLABPICC18include)。

//配置寄存器:CONFIG1L

XINST://扩展指令集使能位

1=指令集扩展和变址寻址模式被启用

0=指令集扩展和变址寻址模式被禁用(传统模式)

#defineXINST_ON0xFFFF

#defineXINST_OFF0xFFBF

SOSCSEL<1:0>:SOSC电源选择和模式配置位

11=选择的高功率电路SOSC

10=数字(SCLKI)模式;I/O端口RC0和RC1的功能启用

01=选择低功耗SOSC电路

00=保留

#defineSOSCSEL_HIGH0xFFFF

#defineSOSCSEL_LOW0xFFEF

#defineSOSCSEL_DIG0xFFF7

INTOSCSEL:LF-INTOSC低功耗使能位

1=休眠期间LF-INTOSC在高功率模式下

0=休眠期间LF-INTOSC在低功耗模式下

#defineINTOSCSEL_HIGH0xFFFF

#defineINTOSCSEL_LOW0xFFFB

______________

RETEN:

Vreg

休眠使能位

1=在休眠模式下超低功耗稳压电源关闭,由REGSLP(WDTCON<7>)控制

0=在休眠模式下超低功耗稳压电源使能,由SRETEN(WDTCON<4>)控制,超低功耗调节

器被启用

#defineRETEN_ON0xFFFE

#defineRETEN_OFF0xFFFF

//配置寄存器:CONFIG1H

IESO:内部/外部振荡器切换位

1=双速启动时启用

0=双速启动时禁用

#defineIESO_OFF

#defineIESO_ON

0xFFFF

0x7FFF

FCMEN:故障保护时钟监视器使能位

1=故障保护时钟监视器使能

0=故障保护时钟监视器被禁用

#defineFCMEN_OFF0xFFFF

#defineFCMEN_ON0xBFFF

PLLCFG:4XPLL使能位

1=振荡器乘以4

0=振荡器直接使用

#definePLLCFG_ON

#definePLLCFG_OFF

0xEFFF

0xFFFF

FOSC<3:0>:振荡器选择位

1101=EC1,EC振荡器(低功耗,DC-160KHZ)

1100=EC1IO,EC振荡器,RA6上CLKOUT功能(低功耗,DC-160KHZ)

1011=EC2,EC振荡器(中功率,160KHZ-16MHZ)

1010=EC2IO,EC振荡器,RA6上CLKOUT功能(中功率,160KHZ-16MHZ)

1001=INTIO1,内部RC振荡器,RA6上CLKOUT功能

1000=INTIO2,内部RC振荡器

0111=RC,外部RC振荡器

0110=RCIO,外部RC振荡器,在RA6CKLOUT功能

0101=EC3,EC振荡器(高功率,16MHZ-64MHZ)

0100=EC3IO,EC振荡器,RA6上CLKOUT功能(高功率,16MHZ-64MHZ)

0011=HS1,HS振荡器(中功率,4MHZ-16MHZ)

0010=HS2,HS振荡器(高功率,16MHZ-25MHZ)

0001=XT振荡器

0000=LP振荡器

#defineFOSC_RCIO

#defineFOSC_RC

#defineFOSC_EC1

#defineFOSC_EC1IO

#defineFOSC_EC2

#defineFOSC_EC2IO

#defineFOSC_INTIO1

#defineFOSC_INTIO2

#defineFOSC_EC3

#defineFOSC_EC3IO

#defineFOSC_HS1

#defineFOSC_HS2

0xF0FF

0xF1FF

0xFAFF

0xFBFF

0xFCFF

0xFDFF

0xFEFF

0xFFFF

0xF2FF

0xF3FF

0xF4FF

0xF5FF

#defineFOSC_XT

#defineFOSC_LP

0xF6FF

0xF7FF

注:该处发现PIC18F25K80.h与datasheet说明不一致,具体可以参照实验效果。(目

前,我以PIC18F25K80.h为准设置了外部振荡器,以定时器时钟进行测试,实验未发现异常)

//配置寄存器:CONFIG2L

BORPWR<1:0>:BORMV功率电平位

11=ZPBORVMV而不是BORMV选择

10=BORMV被设置为一个高功率电平

01=BORMV被设置为中功率电平

00=BORMV被设置为低功率电平

#defineBORPWR_ZPBORMV0xFFFF

#defineBORPWR_HIGH0xFFDF

#defineBORPWR_MEDIUM0xFFBF

#defineBORPWR_LOW0xFF9F

BORV<1:0>:欠压复位电压位

11=VBORMV被设定为1.8V

10=VBORMV被设定为2.0V

01=VBORMV被设定为2.7V

00=VBORMV被设定为3.0V

#defineBORV_3

#defineBORV_2

#defineBORV_1

#defineBORV_0

0xFFFF

0xFFF7

0xFFEF

0xFFE7

BOREN<1:0>:欠压复位使能位

11=欠压复位是只在硬件启用(SBOREN被禁用)

10=欠压复位只在硬件下启用,在休眠模式下禁止(SBOREN被禁用)

01=欠压复位使能时,由软件控制(使能SBOREN)

00=欠压复位是在硬件和软件禁用

#defineBOREN_SBORDIS0xFFFF

#defineBOREN_NOSLP0xFFFD

#defineBOREN_ON0xFFFB

#defineBOREN_OFF0xFFF9

PWRTEN:上电延时定时器使能位

1=PWRT被禁用

0=PWRT启用

#definePWRTEN_OFF0xFFFF

#definePWRTEN_ON0xFFFE

//配置寄存器:CONFIG2H

WDTPS<4:0>:看门狗定时器分频选择位

10101-11111=保留

10100=1:1,048,576(4,194.304s)

10011=1:524,288(2,097.152s)

10010=1:262,144(1,048.576s)

10001=1:131,072(524.288s)

10000=1:65,536(262.144s)

01111=1:32,768(131.072s)

01110=1:16,384(65.536s)

01101=1:8,192(32.768s)

01100=1:4,096(16.384s)

01011=1:2,048(8.192s)

01010=1:1,024(4.096s)

01001=1:512(2.048s)

01000=1:256(1.024s)

00111=1:128(512ms)

00110=1:64(256ms)

00101=1:32(128ms)

00100=1:16(64ms)

00011=1:8(32ms)

00010=1:4(16ms)

00001=1:2(8ms)

00000=1:1(4ms)

#defineWDTPS_1048576

#defineWDTPS_524288

#defineWDTPS_262144

#defineWDTPS_131072

#defineWDTPS_65536

#defineWDTPS_32768

#defineWDTPS_16384

#defineWDTPS_8192

#defineWDTPS_4096

#defineWDTPS_2048

#defineWDTPS_1024

#defineWDTPS_512

#defineWDTPS_256

#defineWDTPS_128

0xFFFF

0xCFFF

0xCBFF

0xC7FF

0xC3FF

0xBFFF

0xBBFF

0xB7FF

0xB3FF

0xAFFF

0xABFF

0xA7FF

0xA3FF

0x9FFF

#defineWDTPS_64

#defineWDTPS_32

#defineWDTPS_16

#defineWDTPS_8

#defineWDTPS_4

#defineWDTPS_2

#defineWDTPS_1

0x9BFF

0x97FF

0x93FF

0x8FFF

0x8BFF

0x87FF

0x83FF

WDTEN<1:0>:看门狗定时器使能位

11=WDT在硬件中启用;SWDTEN位被禁用

10=WDT由SWDTEN位设置控制

01=仅当设备处于活动状态WDT启用,休眠模式禁用;SWDTEN位禁用

00=WDT是硬件禁用;SWDTEN位被禁用

#defineWDTEN_SWDTDIS0xFFFF

#defineWDTEN_ON0xFEFF

#defineWDTEN_NOSLP0xFDFF

#defineWDTEN_OFF0xFCFF

//配置寄存器:CONFIG3H

MCLRE:MCLR引脚使能位

1=MCLR引脚使能;RG5输入引脚被禁用

0=RG5输入引脚使能;禁止MCLR

#defineMCLRE_ON0xFFFF

#defineMCLRE_OFF0x7FFF

MSSPMSK:MSSPV37位地址掩码模式使能位

1=7位地址掩码模式已启用

0=5位地址掩码模式已启用

#defineMSSPMSK_MSK70xFFFF

#defineMSSPMSK_MSK50xF7FF

T3CKMX:Timer3时钟输入引脚复用位

1=Timer3从64引脚封装的RG2/T3CKI引脚获得时钟输入

0=Timer3从64引脚封装的RB5/T3CKI引脚获取时钟输入

T0CKMX:Timer0时钟输入引脚复用位

1=Timer0从64引脚封装的RB5/T0CKI引脚获得时钟输入

0=Timer0从64引脚封装的RG4/T0CKI引脚获得时钟输入

CANMX:ECAN引脚复用位

1=CANTX和CANRX引脚分别位于RB2和RB3上

0=CANTX和CANRX引脚分别位于RC6和RC7上(28引脚和40/44引脚)

封装)或RE4和RE5分别(64引脚封装)

#defineCANMX_PORTB0xFFFF

#defineCANMX_PORTC0xFEFF

//配置寄存器:CONFIG4L

-----------------------

DEBUG:后台调试器使能位

1=后台调试已禁用,RB6和RB7被配置为通用I/O引脚

0=后台调试启用,RB6和RB7专用于在线调试

BBSIZ0:引导块大小选择位

1=2千瓦引导块大小

0=1千瓦引导块大小

#defineBBSIZ_BB2K

#defineBBSIZ_BB1K

0xFFFF

0xFFEF

STVREN:堆栈满/下溢复位使能位

1=堆栈满/下溢将导致复位

0=堆栈满/下溢不会导致复位

#defineSTVREN_ON0xFFFF

#defineSTVREN_OFF0xFFFE

//配置寄存器:CONFIG5L

CP3:代码保护位

1=Block3没有代码保护

0=Block3代码保护

#defineCP3_OFF

#defineCP3_ON

CP2:代码保护位

1=Block2没有代码保护

0=Block2代码保护

#defineCP2_OFF

#defineCP2_ON

0xFFFF

0xFFF7

0xFFFF

0xFFFB

CP1:代码保护位

1=Block1没有代码保护

0=Block1代码保护

#defineCP1_OFF

#defineCP1_ON

CP0:代码保护位

1=Block0没有代码保护

0=Block0代码保护

#defineCP0_OFF

#defineCP0_ON

0xFFFF

0xFFFD

0xFFFF

0xFFFE

//配置寄存器:CONFIG5H

CPD:数据EEPROM代码保护位

1=数据EEPROM没有代码保护

0=数据EEPROM代码保护

#defineCPD_OFF0xFFFF

#defineCPD_ON0x7FFF

CPB:引导区代码保护位

1=引导块不是代码保护

0=引导块代码保护

#defineCPB_OFF

#defineCPB_ON

0xFFFF

0xBFFF

//配置寄存器:CONFIG6L

WRT3:写保护位

1=Block3没有写保护

0=Block3写保护

#defineWRT3_OFF

#defineWRT3_ON

WRT2:写保护位

1=Block2没有写保护

0=Block2写保护

0xFFFF

0xFFF7

#defineWRT2_OFF

#defineWRT2_ON

WRT1:写保护位

1=Block1没有写保护

0=Block1写保护

#defineWRT1_OFF

#defineWRT1_ON

WRT0:写保护位

1=Block0没有写保护

0=Block0写保护

#defineWRT0_OFF

#defineWRT0_ON

0xFFFF

0xFFFB

0xFFFF

0xFFFD

0xFFFF

0xFFFE

//配置寄存器:CONFIG6H

WRTD:数据EEPROM写保护位

1=数据EEPROM没有写保护

0=数据EEPROM写保护

#defineWRTC_OFF0xFFFF

#defineWRTC_ON0xDFFF

WRTB:引导块写保护位

1=引导块没有写保护

0=引导块写保护

#defineWRTB_OFF

#defineWRTB_ON

0xFFFF

0xBFFF

WRTC:配置寄存器的写保护位

1=配置寄存器,没有写保护

0=配置寄存器,写保护

#defineWRTD_OFF0xFFFF

#defineWRTD_ON0x7FFF

//配置寄存器:CONFIG7L

EBTR3:表读保护位

1=不保护Block3免受在其他块中执行的表读取

0=保护Block3免受在其他块中执行的表读取

#defineEBTR3_OFF0xFFFF

#defineEBTR3_ON0xFFF7

EBTR2:表读保护位

1=不保护Block2免受在其他块中执行的表读取

0=保护Block2免受在其他块中执行的表读取

#defineEBTR2_OFF0xFFFF

#defineEBTR2_ON0xFFFB

EBTR1:表读保护位

1=不保护Block1免受在其他块中执行的表读取

0=保护Block1免受在其他块中执行的表读取

#defineEBTR1_OFF0xFFFF

#defineEBTR1_ON0xFFFD

EBTR0:表读保护位

1=不保护Block0免受在其他块中执行的表读取

0=保护Block0免受在其他块中执行的表读取

#defineEBTR0_OFF0xFFFF

#defineEBTR0_ON0xFFFE

//配置寄存器:CONFIG7H

EBTRB:引导块表读保护位

1=不保护引导块不受其他块中执行的表读取的影响

0=保护引导块不受其他块中执行的表读取的影响

#defineEBTRB_OFF0xFFFF

#defineEBTRB_ON0xBFFF

综上可对PIC18的配置字进行设置,PIC单片机的配置字由__CONFIG(w,s)命令进行设置。

(__CONFIG(w,s)函数在PICC18的安装目录下Include下的PIC18.h中查找,例:

E:MPLABPICC18include)

PIC18的配置位设置与其他配置字设置不一致,其需要单独对每一个配置寄存器进行设

置,也就是CONFIG1…7是分开写的。以我编写的为例:

__CONFIG(1,XINST_OFF&SOSCSEL_DIG&FOSC_HS1&FCMEN_OFF&PLLCFG_OFF);

__CONFIG(2,PWRTEN_OFF&WDTEN_OFF&BOREN_OFF);

__CONFIG(4,STVREN_OFF);

注:配置字设置可参照以上格式进行设置,具体设置值参照上文配置寄存器含义。最好是将

涉及到的配置都进行设置,因为默认配置不适用于大众代码,例如:看门狗是默认打开的,

如若不进行设置,则上电后会出现不断复位,而究其代码却查找不出复位原因。

发布评论

评论列表 (0)

  1. 暂无评论