STC12C2052AD頭檔案

/*
stc12c2052AD 頭檔案。
曉奇工作室編制。http://www.xiao-qi.com/
2006.01.12
*/
/*------------------------------------------------
Byte Registers
------------------------------------------------*/
_sfrbyte SP _at( 0x81 );
_sfrbyte DPL _at( 0x82 );
_sfrbyte DPH _at( 0x83 );
_sfrbyte PCON _at( 0x87 );
_sfrbyte TCON _at( 0x88 );
_sfrbyte TMOD _at( 0x89 );
_sfrbyte TL0 _at( 0x8A );
_sfrbyte TL1 _at( 0x8B );
_sfrbyte TH0 _at( 0x8C );
_sfrbyte TH1 _at( 0x8D );
_sfrbyte SCon _at( 0x98 );
_sfrbyte SBUF _at( 0x99 );
_sfrbyte IE _at( 0xA8 );
_sfrbyte IPH _at( 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)
*/
_sfrbyte IP _at( 0xB8 );/* 通用中斷源的優先權定義暫存器,與IPH合併使用*/
_sfrbyte PSW _at( 0xD0 );
_sfrbyte ACC _at( 0xE0 );
_sfrbyte B _at( 0xF0 );

/* ----------------- P1口IO定義 ------------------- */
/* P1M0[7~0] P1M1[7~0]方向作用*/
/*00傳統51準雙向口模式*/
/*01推輓輸出,上拉20mA*/
/*10高阻單向輸入,AD必須。*/
/*11開漏輸出,AD也可以選擇*/
_sfrbyte P1 _at( 0x90 );/* P1口地址 */
_sfrbyte P1M0 _at( 0x91 );/* P1口方向0*/
_sfrbyte P1M1 _at( 0x92 );/* P1口方向1*/

/* ----------------- P3口IO定義 ------------------- */
/* P3M0[7~0] P3M1[7~0]方向作用*/
/*00傳統51準雙向口模式*/
/*01推輓輸出,上拉20mA*/
/*10高阻單向輸入,AD必須。*/
/*11開漏輸出,AD也可以選擇*/
_sfrbyte P3 _at( 0xB0 );/* P3口地址 */
_sfrbyte P3M0 _at( 0xB1 );/* P3口方向0*/
_sfrbyte P3M1 _at( 0xB2 );/* P3口方向1*/

/*----------------- IAP/IAP 功能暫存器 ------------ */
_sfrbyte ISP_DATA _at( 0XE2 );/* 收發數據暫存器*/
_sfrbyte ISP_ADDRH _at( 0XE3 );/* 目標操作地址高8位*/
_sfrbyte ISP_ADDRL _at( 0XE4 );/* 目標操作地址低8位*/
_sfrbyte ISP_CMD _at( 0XE5 );/* 操作指令暫存器*/
_sfrbyte ISP_TRIG _at( 0XE6 );/* 觸發暫存器*/
_sfrbyte ISP_CONTR _at( 0XE7 );/* 控制暫存器*/

/* --------------- 新增功能控制暫存器 ------------- */
_sfrbyte AUXR _at( 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.. 保留
*/

_sfrbyte CLOCK_DIV _at( 0XC7 );/* 空閒模式下的時鐘分頻,可進一步降低功耗*/
_sfrbyte WDT_CONTR _at( 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).. _atbit(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
其他主頻下的時間可以參照上表作相應換算。
*/
_sfrbyte SADDR _at( 0XA9 );/* 從地址,未啟用*/
_sfrbyte SADEN _at( 0XB9 );/* 標識地址,未啟用*/
_sfrbyte SPI_STATUS _at( 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保留
*/
_sfrbyte SPI_CONTR _at( 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
*/
_sfrbyte SPI_DATA _at(0X86);/* SPI數據收發暫存器SPDAT*/
_sfrbyte ADC_CONTR _at(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 1210個時鐘周期轉換一次,CPU 工作頻率20MHz 時,A/D轉
換速度約 100KHz
10420個時鐘周期轉換一次
01630個時鐘周期轉換一次
00840個時鐘周期轉換一次
ADC_CONTR^4(ADC_FLAG)...模數轉換器轉換結束標誌位,當A/D 轉換完成後,ADC_FLAG
_atbit( 1,要由軟體清0。不管是A/D 轉換完成後由該位申請產
生中斷,還是由軟體查詢該標誌位A/D 轉換是否結束,當A/D
轉換完成後,ADC_FLAG _atbit( 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 輸入來用
*/
_sfrbyte ADC_DATA _at( 0XC6 );/* A/D 轉換結果特殊功能暫存器 */
_sfrbyte CCON _at( 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中斷標誌。當出現匹配或捕獲時該位由硬體置位。
該位必須通過軟體清零。
*/

_sfrbyte CMOD _at( 0XD9 );/* PCA 模式暫存器 */
/*其中:
CMOD^7(CIDL)....計數器陣列空閒控制:CIDL_atbit(0時,空閒模式下PCA計數器繼
續工作。CIDL=1時,空閒模式下PCA計數器停止工作。
CMOD^6~3保留
CMOD^2~1(CPS1,CPS0)PCA計數脈衝選擇
CPS1 CPS0 選擇PCA 時鐘源輸入
00 0,內部時鐘,Fosc/12
011,內部時鐘,Fosc/2
102,定時器0溢出,由於定時器0可以工作在1T方式,所以可以
達到計一個時鐘就溢出, 頻率反而是最高的, 可達
到Fosc
113,ECI/P3.4腳的外部時鐘輸入(最大速率_atbit(Fosc/2)
CMOD^0(ECF).....PCA計數溢出中斷使能:ECF_atbit(1時,使能暫存器CCON CF位的
中斷。ECF_atbit(0時,禁止該功能。
*/

_sfrbyte CH_at( 0XF9 );/* PCA計數器初始值高8位*/
_sfrbyte CL _at( 0XE9 );/* PCA計數器初始值低8位*/
_sfrbyte CCAPM0 _at( 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 MAT0TOG0 PWM0 ECCF0模組功能
00 000 00無此操作
X1 000 0X16位捕獲模式,由CEX0的上升沿觸發
X0 100 0X16位捕獲模式,由CEX0的下降沿觸發
X1 100 0X16位捕獲模式,由CEX0的跳變觸發
10 010 0X16位軟體定時器
10 011 0X16位高速輸出
10 000 108位PWM
*/
_sfrbyte CCAP0H _at( 0XFA );/* 當出現捕獲或比較時,它們用來保存16 位的計數值。
當PCA 模組用在PWM 模式中時,它們用來控制輸出的
占空比。CCAP0H.CCAP0L分別為高低8位,組合使用*/
_sfrbyte CCAP0L _at( 0XEA );
_sfrbyte PCA_PWM0 _at( 0XF2 );/* PWM下9位數的最高位
PCA_PWM0^1(EPC0H)....在PWM模式下,與CCAP0H組成9位數
PCA_PWM0^0(EPC0L)....在PWM模式下,與CCAP0L組成9位數
*/
_sfrbyte CCAPM1 _at( 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 MAT1TOG1 PWM1 ECCF1模組功能
00 000 00無此操作
X1 000 0X16位捕獲模式,由CEX1的上升沿觸發
X0 100 0X16位捕獲模式,由CEX1的下降沿觸發
X1 100 0X16位捕獲模式,由CEX1的跳變觸發
10 010 0X16位軟體定時器
10 011 0X16位高速輸出
10 000 108位PWM
*/
_sfrbyte CCAP1H _at( 0XFB );/* 當出現捕獲或比較時,它們用來保存16 位的計數值。
當PCA 模組用在PWM 模式中時,它們用來控制輸出的
占空比。CCAP1H.CCAP1L分別為高低8位,組合使用*/

_sfrbyte CCAP1L _at( 0XEB );
_sfrbyte PCA_PWM1 _at( 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
------------------------------------------------*/
_sfrbit IT0 _atbit(TCON, 0 );
_sfrbit IE0 _atbit(TCON, 1 );
_sfrbit IT1 _atbit(TCON, 2 );
_sfrbit IE1 _atbit(TCON, 3 );
_sfrbit TR0 _atbit(TCON, 4 );
_sfrbit TF0 _atbit(TCON, 5 );
_sfrbit TR1 _atbit(TCON, 6 );
_sfrbit TF1 _atbit(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
------------------------------------------------*/
_sfrbit P1_0 _atbit( P1, 0 );
_sfrbit P1_1 _atbit( P1, 1 );
_sfrbit P1_2 _atbit( P1, 2 );
_sfrbit P1_3 _atbit( P1, 3 );
_sfrbit P1_4 _atbit( P1, 4 );
_sfrbit P1_5 _atbit( P1, 5 );
_sfrbit P1_6 _atbit( P1, 6 );
_sfrbit P1_7 _atbit( P1, 7 );

_sfrbit ADC0 _atbit( P1, 0 ); /* + Analog input */
_sfrbit ADC1 _atbit( P1, 1 ); /* + Analog input */
_sfrbit ADC2 _atbit( P1, 2 ); /* + Analog input */
_sfrbit ADC3 _atbit( P1, 3 ); /* + Analog input */
_sfrbit ADC4 _atbit( P1, 4 ); /* + Analog input */
_sfrbit ADC5 _atbit( P1, 5 ); /* + Analog input */
_sfrbit ADC6 _atbit( P1, 6 ); /* + Analog input */
_sfrbit ADC7 _atbit( P1, 7 ); /* + Analog input */

/* SPI 專用IO */
_sfrbit SS _atbit( P1, 4 );/* 主從SPI選擇,外部輸入P1.4_atbit(0為從機*/
_sfrbit MOSI _atbit( P1, 5 );/* 主輸出/從輸入*/
_sfrbit MISO _atbit( P1, 6 );/* 主輸入/從輸出*/
_sfrbit SCLK _atbit( P1, 7 );/* SPI時鐘,主方輸出,從方接收*/

/*------------------------------------------------
SCON Bit Registers
------------------------------------------------*/
_sfrbit RI _atbit( SCON, 0 );
_sfrbit TI _atbit( SCON, 1 );
_sfrbit RB8 _atbit( SCON, 2 );
_sfrbit TB8 _atbit( SCON, 3 );
_sfrbit REN _atbit( SCON, 4 );
_sfrbit SM2 _atbit( SCON, 5 );
_sfrbit SM1 _atbit( SCON, 6 );
_sfrbit SM0 _atbit( SCON, 7 );

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

_sfrbit EA _atbit( IE, 7 ); /* 0_atbit(Disable all interrupts */

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

_sfrbit RXD _atbit( P3, 0 ); /* Serial data input */
_sfrbit TXD _atbit( P3, 1 ); /* Serial data output */
_sfrbit INT0 _atbit( P3, 2 ); /* External interrupt 0 */
_sfrbit INT1 _atbit( P3, 3 ); /* External interrupt 1 */
_sfrbit T0 _atbit( P3, 4 ); /* Timer 0 外部時鐘輸入口P3.4 */
_sfrbit ECI _atbit( P3, 4 ); /* PCA計數器陣列的可選外部時鐘輸入口P3.4 */
_sfrbit T1 _atbit( P3, 5 ); /* Timer 1 外部時鐘輸入口P3.5 */
_sfrbit CEX1 _atbit( P3, 5 );/* PCA計數器與模組的比較/捕獲暫存器的值的匹配時的輸出口*/
_sfrbit PWM1 _atbit( P3, 5 );/* PWM方式時PWM1的輸出口P3.5/PCA1反相輸出*/
_sfrbit CEX0 _atbit( P3, 7 );/* PCA計數器與模組的比較/捕獲暫存器的值的匹配時的輸出口*/
_sfrbit PWM0 _atbit( P3, 7 );/* PWM方式時PWM0的輸出口P3.7/PCA0反相輸出*/

/*------------------------------------------------
IP 中斷優先權暫存器低8位
------------------------------------------------*/
_sfrbit PX0 _atbit( IP, 0 );/* 外部中斷0 P3.2*/
_sfrbit PT0 _atbit( IP, 1 );/* 定時計數器0中斷*/
_sfrbit PX1 _atbit( IP, 2 );/* 外部中斷1 P3.3*/
_sfrbit PT1 _atbit( IP, 3 );/* 定時計數器1中斷*/
_sfrbit PS _atbit( IP, 4 );/* 通信中斷RI或TI*/

/*------------------------------------------------
PSW Bit Registers
------------------------------------------------*/
_sfrbit P _atbit( PSW, 0 );
_sfrbit FL _atbit( PSW, 1 );
_sfrbit OV _atbit( PSW, 2 );
_sfrbit RS0 _atbit( PSW, 3 );
_sfrbit RS1 _atbit( PSW, 4 );
_sfrbit F0 _atbit( PSW, 5 );
_sfrbit AC _atbit( PSW, 6 );
_sfrbit CY _atbit( PSW, 7 );

/*------------------------------------------------
PCA 控制暫存器CCON Bit Registers
------------------------------------------------*/
_sfrbit CCF0 _atbit( CCON, 0 );/*PCA模組0中斷標誌。當出現匹配或捕獲時該位由硬體置位。
該位必須通過軟體清零。*/
_sfrbit CCF1 _atbit( CCON, 1 );/*PCA模組1中斷標誌。當出現匹配或捕獲時該位由硬體置位。
該位必須通過軟體清零。*/
_sfrbit CR _atbit( CCON, 6 );/*PCA計數器陣列運行控制位。該位通過軟體置位, 用來起
動PCA計數器陣列計數。該位通過軟體清零, 用來關閉
PCA計數器。*/
_sfrbit CF _atbit( CCON, 7 );/*PCA計數器陣列溢出標誌。計數值翻轉時該位由硬體置位。
如果CMOD暫存器的ECF位置位, CF標誌可用來產生中斷。
CF位可通過硬體或軟體置位, 但只可通過軟體清零。*/
/*
stc12c2052AD 頭檔案。
曉奇工作室編制。http://www.xiao-qi.com/
2006.01.12
*/
/*------------------------------------------------
Byte Registers
------------------------------------------------*/
_sfrbyte SP _at( 0x81 );
_sfrbyte DPL _at( 0x82 );
_sfrbyte DPH _at( 0x83 );
_sfrbyte PCON _at( 0x87 );
_sfrbyte TCON _at( 0x88 );
_sfrbyte TMOD _at( 0x89 );
_sfrbyte TL0 _at( 0x8A );
_sfrbyte TL1 _at( 0x8B );
_sfrbyte TH0 _at( 0x8C );
_sfrbyte TH1 _at( 0x8D );
_sfrbyte SCON _at( 0x98 );
_sfrbyte SBUF _at( 0x99 );
_sfrbyte IE _at( 0xA8 );
_sfrbyte IPH _at( 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)
*/
_sfrbyte IP _at( 0xB8 );/* 通用中斷源的優先權定義暫存器,與IPH合併使用*/
_sfrbyte PSW _at( 0xD0 );
_sfrbyte ACC _at( 0xE0 );
_sfrbyte B _at( 0xF0 );

/* ----------------- P1口IO定義 ------------------- */
/* P1M0[7~0] P1M1[7~0]方向作用*/
/*00傳統51準雙向口模式*/
/*01推輓輸出,上拉20mA*/
/*10高阻單向輸入,AD必須。*/
/*11開漏輸出,AD也可以選擇*/
_sfrbyte P1 _at( 0x90 );/* P1口地址 */
_sfrbyte P1M0 _at( 0x91 );/* P1口方向0*/
_sfrbyte P1M1 _at( 0x92 );/* P1口方向1*/

/* ----------------- P3口IO定義 ------------------- */
/* P3M0[7~0] P3M1[7~0]方向作用*/
/*00傳統51準雙向口模式*/
/*01推輓輸出,上拉20mA*/
/*10高阻單向輸入,AD必須。*/
/*11開漏輸出,AD也可以選擇*/
_sfrbyte P3 _at( 0xB0 );/* P3口地址 */
_sfrbyte P3M0 _at( 0xB1 );/* P3口方向0*/
_sfrbyte P3M1 _at( 0xB2 );/* P3口方向1*/

/*----------------- IAP/IAP 功能暫存器 ------------ */
_sfrbyte ISP_DATA _at( 0XE2 );/* 收發數據暫存器*/
_sfrbyte ISP_ADDRH _at( 0XE3 );/* 目標操作地址高8位*/
_sfrbyte ISP_ADDRL _at( 0XE4 );/* 目標操作地址低8位*/
_sfrbyte ISP_CMD _at( 0XE5 );/* 操作指令暫存器*/
_sfrbyte ISP_TRIG _at( 0XE6 );/* 觸發暫存器*/
_sfrbyte ISP_CONTR _at( 0XE7 );/* 控制暫存器*/

/* --------------- 新增功能控制暫存器 ------------- */
_sfrbyte AUXR _at( 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.. 保留
*/

_sfrbyte CLOCK_DIV _at( 0XC7 );/* 空閒模式下的時鐘分頻,可進一步降低功耗*/
_sfrbyte WDT_CONTR _at( 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).. _atbit(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
其他主頻下的時間可以參照上表作相應換算。
*/
_sfrbyte SADDR _at( 0XA9 );/* 從地址,未啟用*/
_sfrbyte SADEN _at( 0XB9 );/* 標識地址,未啟用*/
_sfrbyte SPI_STATUS _at( 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保留
*/
_sfrbyte SPI_CONTR _at( 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
*/
_sfrbyte SPI_DATA _at(0X86);/* SPI數據收發暫存器SPDAT*/
_sfrbyte ADC_CONTR _at(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 1210個時鐘周期轉換一次,CPU 工作頻率20MHz 時,A/D轉
換速度約 100KHz
10420個時鐘周期轉換一次
01630個時鐘周期轉換一次
00840個時鐘周期轉換一次
ADC_CONTR^4(ADC_FLAG)...模數轉換器轉換結束標誌位,當A/D 轉換完成後,ADC_FLAG
_atbit( 1,要由軟體清0。不管是A/D 轉換完成後由該位申請產
生中斷,還是由軟體查詢該標誌位A/D 轉換是否結束,當A/D
轉換完成後,ADC_FLAG _atbit( 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 輸入來用
*/
_sfrbyte ADC_DATA _at( 0XC6 );/* A/D 轉換結果特殊功能暫存器 */
_sfrbyte CCON _at( 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中斷標誌。當出現匹配或捕獲時該位由硬體置位。
該位必須通過軟體清零。
*/

_sfrbyte CMOD _at( 0XD9 );/* PCA 模式暫存器 */
/*其中:
CMOD^7(CIDL)....計數器陣列空閒控制:CIDL_atbit(0時,空閒模式下PCA計數器繼
續工作。CIDL=1時,空閒模式下PCA計數器停止工作。
CMOD^6~3保留
CMOD^2~1(CPS1,CPS0)PCA計數脈衝選擇
CPS1 CPS0 選擇PCA 時鐘源輸入
00 0,內部時鐘,Fosc/12
011,內部時鐘,Fosc/2
102,定時器0溢出,由於定時器0可以工作在1T方式,所以可以
達到計一個時鐘就溢出, 頻率反而是最高的, 可達
到Fosc
113,ECI/P3.4腳的外部時鐘輸入(最大速率_atbit(Fosc/2)
CMOD^0(ECF).....PCA計數溢出中斷使能:ECF_atbit(1時,使能暫存器CCON CF位的
中斷。ECF_atbit(0時,禁止該功能。
*/

_sfrbyte CH_at( 0XF9 );/* PCA計數器初始值高8位*/
_sfrbyte CL _at( 0XE9 );/* PCA計數器初始值低8位*/
_sfrbyte CCAPM0 _at( 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 MAT0TOG0 PWM0 ECCF0模組功能
00 000 00無此操作
X1 000 0X16位捕獲模式,由CEX0的上升沿觸發
X0 100 0X16位捕獲模式,由CEX0的下降沿觸發
X1 100 0X16位捕獲模式,由CEX0的跳變觸發
10 010 0X16位軟體定時器
10 011 0X16位高速輸出
10 000 108位PWM
*/
_sfrbyte CCAP0H _at( 0XFA );/* 當出現捕獲或比較時,它們用來保存16 位的計數值。
當PCA 模組用在PWM 模式中時,它們用來控制輸出的
占空比。CCAP0H.CCAP0L分別為高低8位,組合使用*/
_sfrbyte CCAP0L _at( 0XEA );
_sfrbyte PCA_PWM0 _at( 0XF2 );/* PWM下9位數的最高位
PCA_PWM0^1(EPC0H)....在PWM模式下,與CCAP0H組成9位數
PCA_PWM0^0(EPC0L)....在PWM模式下,與CCAP0L組成9位數
*/
_sfrbyte CCAPM1 _at( 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 MAT1TOG1 PWM1 ECCF1模組功能
00 000 00無此操作
X1 000 0X16位捕獲模式,由CEX1的上升沿觸發
X0 100 0X16位捕獲模式,由CEX1的下降沿觸發
X1 100 0X16位捕獲模式,由CEX1的跳變觸發
10 010 0X16位軟體定時器
10 011 0X16位高速輸出
10 000 108位PWM
*/
_sfrbyte CCAP1H _at( 0XFB );/* 當出現捕獲或比較時,它們用來保存16 位的計數值。
當PCA 模組用在PWM 模式中時,它們用來控制輸出的
占空比。CCAP1H.CCAP1L分別為高低8位,組合使用*/

_sfrbyte CCAP1L _at( 0XEB );
_sfrbyte PCA_PWM1 _at( 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
------------------------------------------------*/
_sfrbit IT0 _atbit(TCON, 0 );
_sfrbit IE0 _atbit(TCON, 1 );
_sfrbit IT1 _atbit(TCON, 2 );
_sfrbit IE1 _atbit(TCON, 3 );
_sfrbit TR0 _atbit(TCON, 4 );
_sfrbit TF0 _atbit(TCON, 5 );
_sfrbit TR1 _atbit(TCON, 6 );
_sfrbit TF1 _atbit(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
------------------------------------------------*/
_sfrbit P1_0 _atbit( P1, 0 );
_sfrbit P1_1 _atbit( P1, 1 );
_sfrbit P1_2 _atbit( P1, 2 );
_sfrbit P1_3 _atbit( P1, 3 );
_sfrbit P1_4 _atbit( P1, 4 );
_sfrbit P1_5 _atbit( P1, 5 );
_sfrbit P1_6 _atbit( P1, 6 );
_sfrbit P1_7 _atbit( P1, 7 );

_sfrbit ADC0 _atbit( P1, 0 ); /* + Analog input */
_sfrbit ADC1 _atbit( P1, 1 ); /* + Analog input */
_sfrbit ADC2 _atbit( P1, 2 ); /* + Analog input */
_sfrbit ADC3 _atbit( P1, 3 ); /* + Analog input */
_sfrbit ADC4 _atbit( P1, 4 ); /* + Analog input */
_sfrbit ADC5 _atbit( P1, 5 ); /* + Analog input */
_sfrbit ADC6 _atbit( P1, 6 ); /* + Analog input */
_sfrbit ADC7 _atbit( P1, 7 ); /* + Analog input */

/* SPI 專用IO */
_sfrbit SS _atbit( P1, 4 );/* 主從SPI選擇,外部輸入P1.4_atbit(0為從機*/
_sfrbit MOSI _atbit( P1, 5 );/* 主輸出/從輸入*/
_sfrbit MISO _atbit( P1, 6 );/* 主輸入/從輸出*/
_sfrbit SCLK _atbit( P1, 7 );/* SPI時鐘,主方輸出,從方接收*/

/*------------------------------------------------
SCON Bit Registers
------------------------------------------------*/
_sfrbit RI _atbit( SCON, 0 );
_sfrbit TI _atbit( SCON, 1 );
_sfrbit RB8 _atbit( SCON, 2 );
_sfrbit TB8 _atbit( SCON, 3 );
_sfrbit REN _atbit( SCON, 4 );
_sfrbit SM2 _atbit( SCON, 5 );
_sfrbit SM1 _atbit( SCON, 6 );
_sfrbit SM0 _atbit( SCON, 7 );

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

_sfrbit EA _atbit( IE, 7 ); /* 0_atbit(Disable all interrupts */

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

_sfrbit RXD _atbit( P3, 0 ); /* Serial data input */
_sfrbit TXD _atbit( P3, 1 ); /* Serial data output */
_sfrbit INT0 _atbit( P3, 2 ); /* External interrupt 0 */
_sfrbit INT1 _atbit( P3, 3 ); /* External interrupt 1 */
_sfrbit T0 _atbit( P3, 4 ); /* Timer 0 外部時鐘輸入口P3.4 */
_sfrbit ECI _atbit( P3, 4 ); /* PCA計數器陣列的可選外部時鐘輸入口P3.4 */
_sfrbit T1 _atbit( P3, 5 ); /* Timer 1 外部時鐘輸入口P3.5 */
_sfrbit CEX1 _atbit( P3, 5 );/* PCA計數器與模組的比較/捕獲暫存器的值的匹配時的輸出口*/
_sfrbit PWM1 _atbit( P3, 5 );/* PWM方式時PWM1的輸出口P3.5/PCA1反相輸出*/
_sfrbit CEX0 _atbit( P3, 7 );/* PCA計數器與模組的比較/捕獲暫存器的值的匹配時的輸出口*/
_sfrbit PWM0 _atbit( P3, 7 );/* PWM方式時PWM0的輸出口P3.7/PCA0反相輸出*/

/*------------------------------------------------
IP 中斷優先權暫存器低8位
------------------------------------------------*/
_sfrbit PX0 _atbit( IP, 0 );/* 外部中斷0 P3.2*/
_sfrbit PT0 _atbit( IP, 1 );/* 定時計數器0中斷*/
_sfrbit PX1 _atbit( IP, 2 );/* 外部中斷1 P3.3*/
_sfrbit PT1 _atbit( IP, 3 );/* 定時計數器1中斷*/
_sfrbit PS _atbit( IP, 4 );/* 通信中斷RI或TI*/

/*------------------------------------------------
PSW Bit Registers
------------------------------------------------*/
_sfrbit P _atbit( PSW, 0 );
_sfrbit FL _atbit( PSW, 1 );
_sfrbit OV _atbit( PSW, 2 );
_sfrbit RS0 _atbit( PSW, 3 );
_sfrbit RS1 _atbit( PSW, 4 );
_sfrbit F0 _atbit( PSW, 5 );
_sfrbit AC _atbit( PSW, 6 );
_sfrbit CY _atbit( PSW, 7 );

/*------------------------------------------------
PCA 控制暫存器CCON Bit Registers
------------------------------------------------*/
_sfrbit CCF0 _atbit( CCON, 0 );/*PCA模組0中斷標誌。當出現匹配或捕獲時該位由硬體置位。
該位必須通過軟體清零。*/
_sfrbit CCF1 _atbit( CCON, 1 );/*PCA模組1中斷標誌。當出現匹配或捕獲時該位由硬體置位。
該位必須通過軟體清零。*/
_sfrbit CR _atbit( CCON, 6 );/*PCA計數器陣列運行控制位。該位通過軟體置位, 用來起
動PCA計數器陣列計數。該位通過軟體清零, 用來關閉
PCA計數器。*/
_sfrbit CF _atbit( CCON, 7 );/*PCA計數器陣列溢出標誌。計數值翻轉時該位由硬體置位。
如果CMOD暫存器的ECF位置位, CF標誌可用來產生中斷。
CF位可通過硬體或軟體置位, 但只可通過軟體清零。*/

相關搜尋

熱門詞條

聯絡我們