/*
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位可通過硬件或軟件置位, 但只可通過軟件清零。*/
stc12c2052AD的Keil C頭文件
更新時間: 2006-02-27 14:42:17來源: 粵嵌教育瀏覽量:4544