首页 > 新闻中心 > > 正文

stc12c2052AD的Keil C头文件

更新时间: 2006-02-27 14:42:17来源: 粤嵌教育浏览量:4045

/*
stc12c2052AD 头文件。
/*------------------------------------------------
Byte Registers
------------------------------------------------*/
sfr SP  =0x81;
sfr DPL =0x82;
sfr DPH =0x83;
sfr PCON=0x87;
sfr TCON=0x88;
sfr TMOD=0x89;
sfr TL0 =0x8A;
sfr TL1 =0x8B;
sfr TH0 =0x8C;
sfr TH1 =0x8D;
sfr SCON=0x98;
sfr SBUF=0x99;
sfr IE  =0xA8;
sfr IPH =0XB7;        /* 中断优先级扩展寄存器,用于定义扩展中断源的优先级    */
/*
    IPH^7空
    IPH^6(PPCA_LVDH)... PCA扩展定时器中断与低电压中断公用
    IPH^5(PADC_SPIH)... ADC模数转换与SPI传送结束中断公用
    IPH^4(PSH)......... ??
    IPH^3(PT1H)........
    IPH^2(PX1H)
    IPH^1(PT0H)
    IPH^0(PX0H)
*/
sfr IP =0xB8;        /* 通用中断源的优先级定义寄存器,与IPH合并使用        */
sfr PSW=0xD0;
sfr ACC=0xE0;
sfr B  =0xF0;

/* ----------------- P1口IO定义 ------------------- */
/* P1M0[7~0] P1M1[7~0]    方向作用                    */
/*    0            0        传统51准双向口模式            */
/*    0            1        推挽输出,上拉20mA            */
/*    1            0        高阻单向输入,AD必须。        */
/*    1            1        开漏输出,AD也可以选择        */
sfr P1  =0x90;                    /* P1口地址     */
sfr P1M0=0x91;                    /* P1口方向0    */
sfr P1M1=0x92;                    /* P1口方向1    */

/* ----------------- P3口IO定义 ------------------- */
/* P3M0[7~0] P3M1[7~0]    方向作用                    */
/*    0            0        传统51准双向口模式            */
/*    0            1        推挽输出,上拉20mA            */
/*    1            0        高阻单向输入,AD必须。        */
/*    1            1        开漏输出,AD也可以选择        */
sfr P3  =0xB0;                /* P3口地址     */
sfr P3M0=0xB1;                /* P3口方向0    */
sfr P3M1=0xB2;                /* P3口方向1    */

/*----------------- IAP/IAP 功能寄存器 ------------ */
sfr ISP_DATA =0XE2;            /* 收发数据寄存器    */
sfr ISP_ADDRH=0XE3;            /* 目标操作地址高8位*/
sfr ISP_ADDRL=0XE4;            /* 目标操作地址低8位*/
sfr ISP_CMD  =0XE5;            /* 操作指令寄存器    */
sfr ISP_TRIG =0XE6;            /* 触发寄存器        */
sfr ISP_CONTR=0XE7;            /* 控制寄存器        */

/* --------------- 新增功能控制寄存器 ------------- */
sfr AUXR=0X8E;            /*新增特殊功能寄存器*/
/*
其中:
    AUXR^7(T0x12)..    定时器ct0时钟源设定:0_atbit(传统1/12,1_atbit(1:1不分频;
    AUXR^6(T1x12)..    定时器ct1时钟源设定:0_atbit(传统1/12,1_atbit(1:1不分频;
    AUXR^5(UARTx6). 串口模式0时时钟设定:0_atbit(传统1/12^1_atbit(1/2 2分频;
    AUXR^4(EADCI).. ADC中断允许位:0_atbit(禁止,1_atbit(允许
    AUXR^3(ESPI)... SPI中断允许位:0_atbit(禁止,1_atbit(允许
    AUXR^2(ELVDI).. 低电压中断允许:0_atbit(禁止,1_atbit(允许
                    5V系统3.7V,3V系统2.4V以下发生中断
    AUXR^1/AUXR^0.. 保留
*/

sfr CLOCK_DIV=0XC7;        /* 空闲模式下的时钟分频,可进一步降低功耗    */
sfr WDT_CONTR=0XE1;        /* 看门狗控制寄存器                            */
/* 其中:
    WDT_CONTR^7(WDT_FLAG).. 看门狗溢出标志_atbit(1,可软件清零
    WDT_CONTR^6保留
    WDT_CONTR^5(EN_WDT).... 看门狗允许标志_atbit(1
    WDT_CONTR^4(CLR_WDT)... 看门狗清零_atbit(1,硬件自动回零
    WDT_CONTR^3(IDLE_WDT)..=1空闲模式下继续工作,_atbit(0空闲模式下不工作
    WDT_CONTR^2~0(PS2~0)... 看门狗溢出时间设定:
    0 0 0 ...... 2分频..... @20MHz下  39.3mS
    0 0 1 ...... 4分频..... @20MHz下  78.6mS
    0 1 0 ...... 8分频..... @20MHz下 157.3mS
    0 1 1 ......16分频..... @20MHz下 314.6mS
    1 0 0 ......32分频..... @20MHz下 629.1mS
    1 0 1 ......64分频..... @20MHz下  1.25S
    1 1 0 .....128分频..... @20MHz下   2.5S
    1 1 1 .....256分频..... @20MHz下    5S
    其他主频下的时间可以参照上表作相应换算。
*/
sfr SADDR         = 0XA9;        /* 从地址,未启用        */
sfr SADEN         = 0XB9;        /* 标识地址,未启用        */
sfr SPI_STATUS=0X84;        /* SPSTAT SPI状态寄存器 */
/*    其中:
    SPSTAT^7(SPIF).... SPI 传输完成标志。当一次串行传输完成时,SPIF 置位,
                        并当ESPI和EA 都置位时产生中断。当SPI 处于主模式且
                        SSIG_atbit(0 时,如果/SS 为输入并被驱动为低电平,SPIF
                        也将置位。SPIF标志通过软件向其写入“1”清零。
    SPSTAT^6(WCOL).... SPI 写冲突标志。在数据传输的过程中如果对SPI 数据寄
                        存器SPDAT 执行写操作,WCOL 将置位。WCOL 标志通过软
                        件向其写入“1”清零。
    SPSTAT^5~0保留
*/
sfr SPI_CONTR=0X85;        /* SPI控制寄存器SPCTL    */
/*    其中:
    SPCTL^7(SSIG)......    /SS 忽略。
                        1:MSTR(位4)确定器件为主机还是从机。
                        0:/SS 脚用于确定器件为主机还是从机。/SS 脚可作为I/O
                            口使用(见SPI 主从选择表)。
    SPCTL^6(SPEN)...... SPI 使能。1:SPI 使能。0:SPI 被禁止,所有SPI 管脚都作
                        为I/O 口使用。   
    SPCTL^5(DORD)...... SPI 数据顺序:1:数据字的LSB(位) 发送;
                        0:数据字的MSB(位) 发送。
    SPCTL^4(MSTR)...... 主/从模式选择(见SPI 主从选择表)。
    SPCTL^3(CPOL)...... SPI 时钟极性:1:SPICLK 空闲时为高电平。SPICLK 的前时
                        钟沿为下降沿而后沿为上升沿。0:SPICLK 空闲时为低电平。
                        SPICLK 的前时钟沿为上升沿而后沿为下降沿。
    SPCTL^2(CPHA)...... SPI 时钟相位选择:
                        1:数据在SPICLK 的前时钟沿驱动,并在后时钟沿采样。
                        0:数据在/SS 为低(SSIG=00)时被驱动,在SPICLK 的后时钟
                           沿被改变,并在前时钟沿被采样。
                            (注:SSIG_atbit(1 时的操作未定义)
    SPCTL^1~0(SPR1~0)...SPR0/SPR1是SPI 时钟速率选择控制位。
                        SPR1^SPR0:
                            0 0 -CPU_CLK/4
                            0 1 -CPU_CLK/16
                            1 0 -CPU_CLK/64
                            1 1 -CPU_CLK/128
*/
sfr SPI_DATA  =0X86;        /* SPI数据收发寄存器SPDAT    */
sfr ADC_CONTR =0XC5;        /* ADC控制寄存器            */
/*    其中:
    ADC_CONTR^7(ADC_POWER)..ADC 电源控制位。0:关闭;1:打开.
                            启动AD 转换前一定要确认AD 电源已打开,AD 转换结束
                            后关闭AD 电源可降低功耗,也可不关闭。初次打开内部
                            A/D 转换模拟电源,需适当延时,等内部模拟电源稳定
                            后,再启动A/D 转换建议启动A/D 转换后,在A/D 转换
                            结束之前,不改变任何I/O 口的状态,有利于高精度A/D
                            转换.
    ADC_CONTR^6~5(SPEED1~0).模数转换器转换速度控制位
        SPEED1 SPEED0         A/D 转换所需时间
            1     1            210个时钟周期转换一次,CPU 工作频率20MHz 时,A/D转
                            换速度约 100KHz
            1    0            420个时钟周期转换一次
            0    1            630个时钟周期转换一次
            0    0            840个时钟周期转换一次
    ADC_CONTR^4(ADC_FLAG)...模数转换器转换结束标志位,当A/D 转换完成后,ADC_FLAG
                            _atbit( 1,要由软件清0。不管是A/D 转换完成后由该位申请产
                            生中断,还是由软件查询该标志位A/D 转换是否结束,当A/D
                             转换完成后,ADC_FLAG= 1,一定要软件清0。
    ADC_CONTR^3(ADC_START)...模数转换器(ADC)转换启动控制位,设置为1时,开始转换
    ADC_CONTR^2~0(CHS2~0)....CHS0:模拟输入通道选择
        CHS2 CHS1 CHS0    模拟输入通道选择
            0 0 0         选择 P1.0 作为A/D 输入来用
            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 输入来用
*/
sfr ADC_DATA=0XC6;        /* A/D 转换结果特殊功能寄存器 */
sfr CCON=0XD8;        /* PCA 控制寄存器,支持位寻址后面有定义*/
/*    其中:
    CCON^7(CF)......PCA计数器阵列溢出标志。计数值翻转时该位由硬件置位。
                    如果CMOD寄存器的ECF位置位, CF标志可用来产生中断。
                    CF位可通过硬件或软件置位, 但只可通过软件清零。
    CCON^6(CR)......PCA计数器阵列运行控制位。该位通过软件置位, 用来起
                    动PCA计数器阵列计数。该位通过软件清零, 用来关闭
                    PCA计数器。
    CCON^5~2保留
    CCON^1(CCF1)....PCA模块1中断标志。当出现匹配或捕获时该位由硬件置位。
                    该位必须通过软件清零。
    CCON^0(CCF0)....PCA模块0中断标志。当出现匹配或捕获时该位由硬件置位。
                    该位必须通过软件清零。
*/

sfr CMOD    =0XD9;        /* PCA 模式寄存器 */
/*    其中:
    CMOD^7(CIDL)....计数器阵列空闲控制:CIDL_atbit(0时,空闲模式下PCA计数器继
                    续工作。CIDL=1时,空闲模式下PCA计数器停止工作。
    CMOD^6~3保留
    CMOD^2~1(CPS1,CPS0)PCA计数脉冲选择
        CPS1 CPS0     选择PCA 时钟源输入
        0    0         0,内部时钟,Fosc/12
        0    1        1,内部时钟,Fosc/2
        1    0        2,定时器0溢出,由于定时器0可以工作在1T方式,所以可以
                        达到计一个时钟就溢出, 频率反而是的, 可达
                        到Fosc
        1    1        3,ECI/P3.4脚的外部时钟输入(速率_atbit(Fosc/2)
    CMOD^0(ECF).....PCA计数溢出中断使能:ECF_atbit(1时,使能寄存器CCON CF位的
                    中断。ECF_atbit(0时,禁止该功能。
*/

sfr CH            = 0XF9;        /* PCA计数器初始值高8位    */
sfr CL         = 0XE9;        /* PCA计数器初始值低8位    */
sfr CCAPM0    =0XDA;        /* PCA 比较/ 捕获模块寄存器0    */
/*
    CCAPM0^7保留
    CCAPM0^6(ECOM0)........ 使能比较器。ECOM0= 1时使能比较器功能。
    CCAPM0^5(CAPP0)........ 正捕获。CAPP0= 1时使能上升沿捕获。
    CCAPM0^4(CAPN0)........ 负捕获。CAPN0= 1时使能下降沿捕获。
    CCAPM0^3(MAT0)......... 匹配。当MAT0= 1时, PCA计数值与模块的比较/捕获寄
                            存器的值的匹配将置位CCON寄存器的中断标志位CCF0。
    CCAPM0^2(TOG0).........    翻转。当TOG0= 1时, PCA计数值与模块的比较/捕获寄
                            存器的值的匹配将使CEXn脚翻转。(CEX0/P3.7)
    CCAPM0^1(PWM0)......... 脉宽调节模式。当PWM0= 1时, 使能CEXn脚用作脉宽调
                            节输出。
    CCAPM0^0(ECCF0)........ 使能CCF0中断。使能寄存器CCON的比较/捕获标志CCF0,
                            用来产生中断。
使用的机种基本模式组合:
 ECOM0 CAPP0 CAPN0 MAT0    TOG0 PWM0 ECCF0            模块功能
    0    0      0        0    0     0        0        无此操作
    X    1      0        0    0     0        X        16位捕获模式,由CEX0的上升沿触发
    X    0      1        0    0     0        X        16位捕获模式,由CEX0的下降沿触发
    X    1      1        0    0     0        X        16位捕获模式,由CEX0的跳变触发
    1    0      0        1    0     0        X        16位软件定时器
    1    0      0        1    1     0        X        16位高速输出
    1    0      0        0    0     1        0        8位PWM
*/
sfr CCAP0H   =0XFA;        /* 当出现捕获或比较时,它们用来保存16 位的计数值。
                               当PCA 模块用在PWM 模式中时,它们用来控制输出的
                               占空比。CCAP0H.CCAP0L分别为高低8位,组合使用    */
sfr CCAP0L   =0XEA;
sfr PCA_PWM0 =0XF2;        /* PWM下9位数的位
                                PCA_PWM0^1(EPC0H)....在PWM模式下,与CCAP0H组成9位数
                                PCA_PWM0^0(EPC0L)....在PWM模式下,与CCAP0L组成9位数
                            */
sfr CCAPM1  =0XDB;        /* PCA 比较/ 捕获模块寄存器1,支持位寻址定义在后面 */
/*
    CCAPM1^7保留
    CCAPM1^6(ECOM1)........ 使能比较器。ECOM1= 1时使能比较器功能。
    CCAPM1^5(CAPP1)........ 正捕获。CAPP1= 1时使能上升沿捕获。
    CCAPM1^4(CAPN1)........ 负捕获。CAPN1= 1时使能下降沿捕获。
    CCAPM1^3(MAT1)......... 匹配。当MAT1= 1时, PCA计数值与模块的比较/捕获寄
                            存器的值的匹配将置位CCON寄存器的中断标志位CCF1。
    CCAPM1^2(TOG1).........    翻转。当TOG1= 1时, PCA计数值与模块的比较/捕获寄
                            存器的值的匹配将使CEXn脚翻转。(CEX1/P3.5)
    CCAPM1^1(PWM1)......... 脉宽调节模式。当PWMn= 1时, 使能CEXn脚用作脉宽调
                            节输出。
    CCAPM1^0(ECCF1)........ 使能CCF1中断。使能寄存器CCON的比较/捕获标志CCF1,
                            用来产生中断。

使用的机种基本模式组合:
 ECOM1 CAPP1 CAPN1 MAT1    TOG1 PWM1 ECCF1            模块功能
    0    0      0        0    0     0        0        无此操作
    X    1      0        0    0     0        X        16位捕获模式,由CEX1的上升沿触发
    X    0      1        0    0     0        X        16位捕获模式,由CEX1的下降沿触发
    X    1      1        0    0     0        X        16位捕获模式,由CEX1的跳变触发
    1    0      0        1    0     0        X        16位软件定时器
    1    0      0        1    1     0        X        16位高速输出
    1    0      0        0    0     1        0        8位PWM
*/
sfr CCAP1H   =0XFB;        /* 当出现捕获或比较时,它们用来保存16 位的计数值。
                               当PCA 模块用在PWM 模式中时,它们用来控制输出的
                               占空比。CCAP1H.CCAP1L分别为高低8位,组合使用    */

sfr CCAP1L   =0XEB;
sfr PCA_PWM1 =0XF3;        /* PWM下9位数的位
                                PCA_PWM1^1(EPC1H)....在PWM模式下,与CCAP1H组成9位数
                                PCA_PWM1^0(EPC1L)....在PWM模式下,与CCAP1L组成9位数
                            */


/*------------------------------------------------
PCON Bit Values
------------------------------------------------*/
#define IDL_    0x01
#define STOP_   0x02
#define EWT_    0x04
#define EPFW_   0x08
#define WTR_    0x10
#define PFW_    0x20
#define POR_    0x40
#define SMOD_   0x80

/*------------------------------------------------
TCON Bit Registers
------------------------------------------------*/
sbit     IT0=TCON^0;
sbit     IE0=TCON^1;
sbit     IT1=TCON^2;
sbit     IE1=TCON^3;
sbit     TR0=TCON^4;
sbit     TF0=TCON^5;
sbit     TR1=TCON^6;
sbit     TF1=TCON^7;

/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/
#define T0_M0_   0x01
#define T0_M1_   0x02
#define T0_CT_   0x04
#define T0_GATE_ 0x08
#define T1_M0_   0x10
#define T1_M1_   0x20
#define T1_CT_   0x40
#define T1_GATE_ 0x80

#define T1_MASK_ 0xF0
#define T0_MASK_ 0x0F

/*------------------------------------------------
P1 Bit Registers
------------------------------------------------*/
sbit     P1_0= P1^0;
sbit     P1_1= P1^1;
sbit     P1_2= P1^2;
sbit     P1_3= P1^3;
sbit     P1_4= P1^4;
sbit     P1_5= P1^5;
sbit     P1_6= P1^6;
sbit     P1_7= P1^7;

sbit     ADC0= P1^0;       /* + Analog input */
sbit     ADC1= P1^1;       /* + Analog input */
sbit     ADC2= P1^2;       /* + Analog input */
sbit     ADC3= P1^3;       /* + Analog input */
sbit     ADC4= P1^4;       /* + Analog input */
sbit     ADC5= P1^5;       /* + Analog input */
sbit     ADC6= P1^6;       /* + Analog input */
sbit     ADC7= P1^7;       /* + Analog input */

/* SPI 专用IO */
sbit     SS  = P1^4;        /* 主从SPI选择,外部输入P1.4_atbit(0为从机*/
sbit     MOSI= P1^5;        /* 主输出/从输入    */
sbit     MISO= P1^6;        /* 主输入/从输出    */
sbit     SCLK= P1^7;        /* SPI时钟,主方输出,从方接收    */

/*------------------------------------------------
SCON Bit Registers
------------------------------------------------*/
sbit     RI  = SCON^0;
sbit     TI  = SCON^1;
sbit     RB8 = SCON^2;
sbit     TB8 = SCON^3;
sbit     REN = SCON^4;
sbit     SM2 = SCON^5;
sbit     SM1 = SCON^6;
sbit     SM0 = SCON^7;

/*------------------------------------------------
IE Bit Registers
------------------------------------------------*/
sbit     EX0 = IE^0;       /* 1_atbit(Enable External interrupt 0 */
sbit     ET0 = IE^1;       /* 1_atbit(Enable Timer 0 interrupt */
sbit     EX1 = IE^2;       /* 1_atbit(Enable External interrupt 1 */
sbit     ET1 = IE^3;       /* 1_atbit(Enable Timer 1 interrupt */
sbit     ES  = IE^4;       /* 1_atbit(Enable Serial port interrupt */
sbit     ET2 = IE^5;       /* 1_atbit(Enable Timer 2 interrupt */

sbit     EA  = IE^7;       /* 0_atbit(Disable all interrupts */

/*------------------------------------------------
P3 Bit Registers (Mnemonics & Ports)
------------------------------------------------*/
sbit     P3_0= P3^0;
sbit     P3_1= P3^1;
sbit     P3_2= P3^2;
sbit     P3_3= P3^3;
sbit     P3_4= P3^4;
sbit     P3_5= P3^5;
/* P3_6 Hardwired as AOUT */
sbit     P3_7= P3^7;

sbit     RXD = P3^0;       /* Serial data input */
sbit     TXD = P3^1;       /* Serial data output */
sbit     INT0= P3^2;       /* External interrupt 0 */
sbit     INT1= P3^3;       /* External interrupt 1 */
sbit     T0  = P3^4;       /* Timer 0 外部时钟输入口P3.4 */
sbit     ECI = P3^4;       /* PCA计数器阵列的可选外部时钟输入口P3.4 */
sbit     T1  = P3^5;       /* Timer 1 外部时钟输入口P3.5 */
sbit     CEX1= P3^5;        /* PCA计数器与模块的比较/捕获寄存器的值的匹配时的输出口*/
sbit     PWM1= P3^5;        /* PWM方式时PWM1的输出口P3.5/PCA1反相输出*/
sbit     CEX0= P3^7;        /* PCA计数器与模块的比较/捕获寄存器的值的匹配时的输出口*/
sbit     PWM0= P3^7;        /* PWM方式时PWM0的输出口P3.7/PCA0反相输出*/

/*------------------------------------------------
IP 中断优先级寄存器低8位
------------------------------------------------*/
sbit     PX0 = IP^0;        /* 外部中断0 P3.2    */
sbit     PT0 = IP^1;        /* 定时计数器0中断    */
sbit     PX1 = IP^2;        /* 外部中断1 P3.3    */
sbit     PT1 = IP^3;        /* 定时计数器1中断    */
sbit     PS  = IP^4;        /* 通信中断RI或TI    */

/*------------------------------------------------
PSW Bit Registers
------------------------------------------------*/
sbit     P   = PSW^0;
sbit     FL  = PSW^1;
sbit     OV  = PSW^2;
sbit     RS0 = PSW^3;
sbit     RS1 = PSW^4;
sbit     F0  = PSW^5;
sbit     AC  = PSW^6;
sbit     CY  = PSW^7;

/*------------------------------------------------
PCA 控制寄存器CCON Bit Registers
------------------------------------------------*/
sbit     CCF0= CCON^0;    /*PCA模块0中断标志。当出现匹配或捕获时该位由硬件置位。
                      该位必须通过软件清零。*/
sbit     CCF1= CCON^1;    /*PCA模块1中断标志。当出现匹配或捕获时该位由硬件置位。
                      该位必须通过软件清零。*/
sbit     CR  = CCON^6;    /*PCA计数器阵列运行控制位。该位通过软件置位, 用来起
                      动PCA计数器阵列计数。该位通过软件清零, 用来关闭
                      PCA计数器。*/
sbit     CF  = CCON^7;    /*PCA计数器阵列溢出标志。计数值翻转时该位由硬件置位。
                      如果CMOD寄存器的ECF位置位, CF标志可用来产生中断。
                      CF位可通过硬件或软件置位, 但只可通过软件清零。*/

免费预约试听课