📄 pic12c5xx.h
字号:
/*
* Header file for the Microchip
* PIC 12C508
* PIC 12C509
* PIC 12F508
* PIC 12F509
* PIC 12C508A
* PIC 12C509A
* PIC 12CE518
* PIC 12CE519
* PIC 12CR509A
* rfPIC 12C509AG
* rfPIC 12C509AF
* Baseline Microcontrollers
*/
static volatile unsigned char RTCC @ 0x01;//"RTCC"为定时器/记数器
static volatile unsigned char TMR0 @ 0x01;//8位定时/记数器
static volatile unsigned char PCL @ 0x02;//程序指针寄存器
static volatile unsigned char STATUS @ 0x03;//程序状态寄存器
static unsigned char FSR @ 0x04;//特殊功能寄存器(与INDF配合使用)
static volatile unsigned char OSCCAL @ 0x05;//时钟振荡校准寄存器
static volatile unsigned char GPIO @ 0x06;//端口寄存器
static unsigned char control OPTION @ 0x00;//选择控制寄存器
static volatile unsigned char control TRIS @ 0x06;//端口方向寄存器
/* STATUS bits “状态寄存器位定义” */
static bit GPWUF @ (unsigned)&STATUS*8+7;//比较器电平变化唤醒标志位
//CWUF=0;上电或其它复位之后;CWUF=1;比较器电平变化时从休眠中唤醒导致的复位!
static bit PA0 @ (unsigned)&STATUS*8+5;//程序页面选择位;PA0=0选择“0”页面,PA0=1选择“1”页面
static bit TO @ (unsigned)&STATUS*8+4;//超时位;TO=0;发生WDT超时;TO=1;在上电、或
//CLRWDT指令或SLEEP指令之后!
static bit PD @ (unsigned)&STATUS*8+3;//掉电位;PD=0;执行了SLEEP指令;PD=1;上电后
//或者执行了CLRWDT指令之后!
static bit ZERO @ (unsigned)&STATUS*8+2;//零标志位(或简称Z位);ZERO=0;算术或逻辑运
//算的结果不为“0”;ZERO=1;算术或逻辑运算的
//结果为“0”
static bit DC @ (unsigned)&STATUS*8+1;//辅助进位/借位(用于ADDWF和SUBWF指令)
//DC=0运算结果第4低有效位、发生借位(作SUBWF)
//DC=1运算结果第4低有效位未发生借位(作SUBWF)
//DC=0运算结果第4低有效位未发生进位(作ADDWF)
//DC=1运算结果第4低有效位发生了进位(作ADDWF)
static bit CARRY @ (unsigned)&STATUS*8+0;//进位/借位位(用于:ADDWF、SUBWF、和REEF、RLF指令)
//CARRY=0发生借位(用于:SUBWF)
//CARRY=0未发生进位(用于:ADDWF)
//CARRY=1未发生借位(用于:SUBWF)
//CARRY=1发生借位 (用于:ADDWF)
/* OPTION bits 选择寄存器位定义 */
#define GPWU (1<<7) //GP0,GP1,GP3电平变化选择,GPWU=1关闭;GPWU=0,使能。
#define GPPU (1<<6) //GP0,GP1,GP3弱上拉选择,GPPU=1,关闭;GPPU=0,使能。
#define T0CS (1<<5) //TIERM0信号源,T0CS=0,内部指令周期;T0CS=1,外部T0CKI引脚。
#define T0SE (1<<4) //TIERM0触发源选择,T0SE=0,上升沿触发;T0SE=1,下降沿触发
。
#define PSA (1<<3) //预分频器分配,PSA=0,分配给TIERM0;PSA=1,分配给WDT(看门狗)
#define PS2 (1<<2) //分频器参数\000:TMR0为1:2;WDT为1:1
//***********001:TMR0为1:4;WDT为1:2
//***********010:TMR0为1:8;WDT为1:4
#define PS1 (1<<1) //分频器参数 011:TMR0为1:16;WDT为1:8
//***********100:TMR0为1:32;WDT为1:16
//***********101:TMR0为1:64;WDT为1:32
#define PS0 (1<<0) //分频器参数 110:TMR0为1:128;WDT为1:64
//**********/111:TMR0为1:256;WDT为1:128
/* OSCCAL bitsm内部振荡器校准寄存器 */
#if defined(_12C508) || defined(_12C509)
static volatile bit CAL3 @ (unsigned)&OSCCAL*8+7;//
static volatile bit CAL2 @ (unsigned)&OSCCAL*8+6;//
static volatile bit CAL1 @ (unsigned)&OSCCAL*8+5;//
static volatile bit CAL0 @ (unsigned)&OSCCAL*8+4;//
#elif defined(_12C508A) || defined(_12C509A) ||\
defined(_12CE518) || defined(_12CE519) ||\
defined(_12C509AG) || defined(_12C509AF) ||\
defined(_12CR509A)
static volatile bit CAL5 @ (unsigned)&OSCCAL*8+7;//
static volatile bit CAL4 @ (unsigned)&OSCCAL*8+6;//
static volatile bit CAL3 @ (unsigned)&OSCCAL*8+5;//
static volatile bit CAL2 @ (unsigned)&OSCCAL*8+4;//
static volatile bit CAL1 @ (unsigned)&OSCCAL*8+3;//
static volatile bit CAL0 @ (unsigned)&OSCCAL*8+2;//
#elif defined(_12F508) || defined(_12F509)
static volatile bit CAL6 @ (unsigned)&OSCCAL*8+7;//内部振荡器校准位\频率调节位\0111111 = 最高频率
static volatile bit CAL5 @ (unsigned)&OSCCAL*8+6;//内部振荡器校准位 ................
static volatile bit CAL4 @ (unsigned)&OSCCAL*8+5;//内部振荡器校准位 ................
static volatile bit CAL3 @ (unsigned)&OSCCAL*8+4;//内部振荡器校准位 0000000 = 振荡器模块运行在已校准后的频率上
static volatile bit CAL2 @ (unsigned)&OSCCAL*8+3;//内部振荡器校准位 ................
static volatile bit CAL1 @ (unsigned)&OSCCAL*8+2;//内部振荡器校准位 ................
static volatile bit CAL0 @ (unsigned)&OSCCAL*8+1;//内部振荡器校准位/频率调节位\1000000 = 最低频率
#endif
/* GPIO bits 端口寄存器位定义 */
#if defined(_12CE518) || defined(_12CE519)
static volatile bit SCL @ (unsigned)&GPIO*8+7; //串行时钟口
static volatile bit SDA @ (unsigned)&GPIO*8+6; //串行数据控制口
#endif
static volatile bit GP5 @ (unsigned)&GPIO*8+5; //端口寄存器“5”
static volatile bit GP4 @ (unsigned)&GPIO*8+4; //端口寄存器“4”
static volatile bit GP3 @ (unsigned)&GPIO*8+3; //端口寄存器“3”
static volatile bit GP2 @ (unsigned)&GPIO*8+2; //端口寄存器“2”
static volatile bit GP1 @ (unsigned)&GPIO*8+1; //端口寄存器“1”
static volatile bit GP0 @ (unsigned)&GPIO*8+0; //端口寄存器“0”
#if defined(_12CE518) || defined(_12CE519)
#define EEPROM_SIZE 16
#endif
#define CONFIG_ADDR 0xFFF
/* code protection 配置字(外部禁止时为使用内部时钟) */
#define MCLREN 0xFFF // memory clear enable "使用内部时钟"
#define MCLRDIS 0xFEF // memory clear disable "内部时钟禁用"
/*watchdog看门狗设置*/
#define WDTEN 0xFFF // watchdog timer enable "看门狗开"
#define WDTDIS 0xFFB // watchdog timer disable "看门狗关"
/* code protection */
#define PROTECT 0xFF7 // protect the program code "内部代码保护"
#define UNPROTECT 0xFFF // do not protect the program code "代码不保护"
/*osc configurations*/
#define EXTRC 0xFFF // external resistor/capacitor "外部阻容振荡器"
#define INTRC 0xFFE // internal "内部振荡器"
#define XT 0xFFD // crystal/resonator “外部标准晶体振/陶瓷振荡”
#define LP 0xFFC // low power crystal/resonator“外部低功耗低速晶振”
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -