⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stc12cx052.h

📁 125K曼彻斯特编码的只读ID卡读头程序
💻 H
📖 第 1 页 / 共 2 页
字号:
/*--------------------------------------------------------------------------
STC12CX052.H

Header file for the low voltage Flash Atmel STC12C1052 and STC12C2052
STC12C4052 STC12C5052 STC12C1052AD STC12C2052AD STC12C4052AD STC12C5052AD.
STC12LE1052 STC12LE2052 STC12LE4052 STC12LE5052 STC12LE1052AD STC12LE2052AD STC12LE4052AD STC12LE5052AD.
--------------------------------------------------------------------------*/

#ifndef STC12CX052_HEADER_FILE
#define STC12CX052_HEADER_FILE 1

/* After is STC12CX052 additional SFR or change */

/* Watchdog Timer Register */
sfr  WDT_CONTR = 0xe1;
//#define WDT_FLAG 0x80     //WDT溢出标志
//#define EN_WDT   0x20     //WDT使能
//#define CLR_WDT  0x10     //WDT重新记数
//#define IDLE_WDT 0x08     //空闲模式记数
//#define PS2_     0x04     //WDT预分频值
//#define PS1_     0x02     //PS2 PS1 PS0   预分频值    11.0592M      20M
//#define PS0_     0x01     // 0   0   0        2         71.1mS     39.3mS
                            // 0   0   1        4        142.2mS     78.6mS
                            // 0   1   0        8        284.4mS    157.3mS
                            // 0   1   1       16        568.8mS    314.6mS
                            // 1   0   0       32        1.1377S    629.1mS
                            // 1   0   1       64        2.2755S      1.25S
                            // 1   1   0      128        4.5511S      2.5S
                            // 1   1   1      256        9.1022S        5S

sfr ISP_DATA  = 0xe2;       //ISP/IAP操作时的数据寄存器
sfr ISP_ADDRH = 0xe3;       //ISP/IAP操作时的地址寄存器高八位
sfr ISP_ADDRL = 0xe4;       //ISP/IAP操作时的地址寄存器低八位
sfr ISP_CMD   = 0xe5;       //ISP/IAP操作时的命令模式寄存器,须命令触发寄存器触发方可生效
sfr ISP_TRIG  = 0xe6;       //ISP/IAP操作时的命令触发寄存器
                            //在ISP_EN(ISP_CONTR.7)=1时,对ISP_TRIG先写入46H再写入B9H,ISP/IAP命令才会生效
sfr ISP_CONTR = 0xe7;
/*  ISP_CONTR   */
#define ISP_EN     0x80     //ISP/IAP功能允许位.0:禁止ISP/IAP编程改变Flash,
                            //                  1:允许编程改变Flash.
//#define SWBS     0x40     //软件选择从用户应用程序区启动(0),还是从ISP程序区启动(1).
                            //要与SWRST直接配合才能实现.
//#define SWRST    0x20     //0:不操作,1:产生软件系统复位,硬件自动清零.
//#define CMD_FAIL 0x10     //ISP/IAP命令触发失败标志
//#define WT2      0x40     //设置CPU等待时间     CPU等待时间(机器周期)
//#define WT1      0x20     //WT2  WT1  WT0       Read Program   Sector Erase   Recommended System Clock
//#define WT0      0x10     // 1    1    1          2     55        21012              <  1MHz
                            // 1    1    0          2    110        42024              <  2MHz
                            // 1    0    1          2    165        63036              <  3MHz
                            // 1    0    0          2    330       126072              <  6MHz
                            // 0    1    1          2    660       252144              < 12MHz
                            // 0    1    0          2   1100       420240              < 20MHz
                            // 0    0    1          2   1320       504228              < 24MHz
                            // 0    0    0          2   1760       672348              < 30MHz

//ISP_CONTR = 0x20;         //选择AP区,软复位
//ISP_CONTR = 0x60;         //选择ISP区,软复位

/*  ISP_CMD   */
//#define MS1 0x02          //MS1  MS0
//#define MS0 0x01          // 0    0     待机模式,无ISP操作
                            // 0    1     对用户应用程序Flash区及数据Flash区字节读
                            // 1    0     对用户应用程序Flash区及数据Flash区字节编程
                            // 1    1     对用户应用程序Flash区及数据Flash区扇区擦除

#define ISP_IAP_BYTE_READ    1     //字节读
#define ISP_IAP_BYTE_PROGRAM 2     //字节编程
#define ISP_IAP_SECTOR_ERASE 3     //扇区擦除
#define WAIT_TIME            3     //30M以下0,24M以下1,20M以下2,12M以下3
                                   //6M以下4,3M以下5,2M以下6,1M以下7
#define ISP_WAIT_TIME_EN  0x83     //ISP/IAP使能,等待时间
                                   //30M以下0x80,24M以下0x81,20M以下0x82,12M以下0x83
                                   //6M以下0x84,3M以下0x85,2M以下0x86,1M以下0x87

/* IDLE, Clock Divider */
//STC12CX052系列不要分频
//sfr IDLE_CLK  = 0xc7;       //系统时钟分频寄存器
//#define CLKS2_     0x04     //CLKS2 CLKS1 CLKS0   分频后CPU的实际工作频率
//#define CLKS1_     0x02     //  0     0     0       系统时钟(外部时钟或内部R/C振荡时钟)
//#define CLKS0_     0x01     //  0     0     1       系统时钟/2
                              //  0     1     0       系统时钟/4
                              //  0     1     1       系统时钟/8
                              //  1     0     0       系统时钟/16
                              //  1     0     1       系统时钟/32
                              //  1     1     0       系统时钟/64
                              //  1     1     1       系统时钟/128

/* I_O Port Mode Set Register */
sfr P1M0  = 0x91;
sfr P1M1  = 0x92;
sfr P3M0  = 0xb1;
sfr P3M1  = 0xb2;

/* SPI Register */
sfr SPSTAT  = 0x84;
#define SPIF  0x80        //SPI传输完成标志,SPIF通过软件向其写入1清零
#define WCOL  0x40        //SPI写冲突标志,WCOL通过软件向其写入1清零
sfr SPCTL   = 0x85;
#define SSIG  0x80        //  /SS忽略.1:由MSTR确定器件为主机还是从机;0:由/SS引脚配置成I/O口;
#define SPEN  0x40        //SPI使能位
#define DORD  0x20        //SPI数据顺序.1:数据的LSB(最低位)先发送;0:数据的MSB(最高位)先发送;
#define MSTR  0x10        //主从模式选择
#define CPOL  0x08        //SPI时钟极性,1:SPICLK空闲时为高电平,SPICLK的前时钟沿为下降沿,而后沿为上升沿;
                          //0:SPICLK空闲时为低电平,SPICLK的前时钟沿为上升沿,而后沿为下降沿;
#define CPHA  0x04        //SPI时钟相位选择,1:数据在SPICLK的前时钟沿驱动,并在后时钟沿采样;
                          //0:数据/SS为低(SSIG=0)时被驱动,在SPICLK的后时钟沿被改变,并在前时钟沿被采样;
                          //(注:SSIG=1时的操作未定义)
#define SPR1  0x02        //SPI时钟选择
#define SPR0  0x01        //SPR1 SPR0    SPI时钟
                          //  0    0    系统时钟/4
                          //  0    1    系统时钟/16
                          //  1    0    系统时钟/64
                          //  1    1    系统时钟/128
sfr SPDAT   = 0x86;

/* ADC Register */
sfr ADC_CONTR  = 0xc5;    //A/D转换控制寄存器
sfr ADC_DATA   = 0xc6;    //A/D转换结果寄存器,高8位
sfr ADC_LOW2   = 0xbe;    //A/D转换结果寄存器,低2位
/*  ADC_CONTR  */
#define ADC_POWER   0x80  //ADC电源控制位
//#define SPEED1    0x40  //SPEED1  SPEED0   ADC转换时间
//#define SPEED0    0x20  //   1       1     270个时钟周期转换一次
                          //   1       0     540个时钟周期转换一次
                          //   0       1     810个时钟周期转换一次
                          //   0       0     1080个时钟周期转换一次
//#define ADC_FLAG  0x10  //ADC转换结束位
#define ADC_START 0x08    //ADC转换控制位
//#define CHS2      0x04  //CHS2  CHS1  CHS0  模拟输入通道选择
//#define CHS1      0x02  //  0     0     0   选择P1.0作为A/D输入
//#define CHS0      0x01  //  0     0     1   选择P1.1作为A/D输入
                          //  0     1     0   选择P1.2作为A/D输入
                          //  0     1     1   选择P1.3作为A/D输入
                          //  1     0     0   选择P1.4作为A/D输入
                          //  1     0     1   选择P1.5作为A/D输入
                          //  1     1     0   选择P1.6作为A/D输入
                          //  1     1     1   选择P1.7作为A/D输入
#define ADC_POWER_SPEED_CHS1_0  0xE0   //P1.0作为AD输入
#define ADC_POWER_SPEED_CHS1_1  0xE1   //P1.1作为AD输入
#define ADC_POWER_SPEED_CHS1_2  0xE2   //P1.2作为AD输入
#define ADC_POWER_SPEED_CHS1_3  0xE3   //P1.3作为AD输入
#define ADC_POWER_SPEED_CHS1_4  0xE4   //P1.4作为AD输入
#define ADC_POWER_SPEED_CHS1_5  0xE5   //P1.5作为AD输入
#define ADC_POWER_SPEED_CHS1_6  0xE6   //P1.6作为AD输入
#define ADC_POWER_SPEED_CHS1_7  0xE7   //P1.6作为AD输入

/* PCA SFR */
sfr CCON   = 0xD8;        //PCA控制寄存器
/*  CCON  */
sbit CF    = CCON^7;      //PCA计数器阵列溢出标志,只能软件清零
sbit CR    = CCON^6;      //PCA计数器阵列运行控制位
sbit CCF3  = CCON^3;      //PCA模块3中断标志,必须由软件清零
sbit CCF2  = CCON^2;      //PCA模块2中断标志,必须由软件清零
sbit CCF1  = CCON^1;      //PCA模块1中断标志,必须由软件清零
sbit CCF0  = CCON^0;      //PCA模块0中断标志,必须由软件清零

sfr CMOD   = 0xD9;        //PCA模式寄存器
#define CIDL 0x80         //0:空闲模式PCA计数器继续工作;1:空闲模式PCA计数器停止工作
#define CPL1 0x04         //PCA记数脉冲选择
#define CPL0 0x02         //CPL1  CPL0  PCA时钟源
                          //  0     0    Fosc/12
                          //  0     1    Fosc/2
                          //  1     0    定时器0溢出率
                          //  1     1    P3.4脚外部时钟输入(最大Fosc/2)
#define ECF  0x01         //PCA记数溢出中断使能

sfr CCAPM0 = 0xDA;        //PCA比较/捕获模块寄存器
//#define ECOM0 0x40      //使能比较器
//#define CAPP0 0x20      //使能上升沿捕获
//#define CAPN0 0x10      //使能下降沿捕获
//#define MAT0  0x08      //匹配
//#define TOG0  0x04      //翻转
//#define PWM0  0x02      //使能CEX0脚用作脉宽调制输出
//#define ECCF0 0x01      //使能CCF0中断
sfr CCAPM1 = 0xDB;        //PCA比较/捕获模块寄存器
//#define ECOM1 0x40      //使能比较器
//#define CAPP1 0x20      //使能上升沿捕获
//#define CAPN1 0x10      //使能下降沿捕获
//#define MAT1  0x08      //匹配
//#define TOG1  0x04      //翻转
//#define PWM1  0x02      //使能CEX1脚用作脉宽调制输出
//#define ECCF1 0x01      //使能CCF1中断

/*PCA模块工作模式(CCAPMn寄存器,n:0,1)
 -  ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn   模块功能
       0     0     0    0    0    0    0    无操作                       0x00
       X     1     0    0    0    0   0/1   16位捕获模式,CEXn上升沿触发  0x21 0x20
       X     0     1    0    0    0   0/1   16位捕获模式,CEXn下降沿触发  0x11 0x10
       X     1     1    0    0    0   0/1   16位捕获模式,CEXn跳变触发    0x31 0x30
       1     0     0    1    0    0   0/1   16位软件定时器               0x49 0x48
       1     0     0    1    1    0   0/1   16位高速输出                 0x4D 0x4C

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -