?? stc12cx052.h
字號:
/*--------------------------------------------------------------------------
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溢出標(biāo)志
//#define EN_WDT 0x20 //WDT使能
//#define CLR_WDT 0x10 //WDT重新記數(shù)
//#define IDLE_WDT 0x08 //空閑模式記數(shù)
//#define PS2_ 0x04 //WDT預(yù)分頻值
//#define PS1_ 0x02 //PS2 PS1 PS0 預(yù)分頻值 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操作時的數(shù)據(jù)寄存器
sfr ISP_ADDRH = 0xe3; //ISP/IAP操作時的地址寄存器高八位
sfr ISP_ADDRL = 0xe4; //ISP/IAP操作時的地址寄存器低八位
sfr ISP_CMD = 0xe5; //ISP/IAP操作時的命令模式寄存器,須命令觸發(fā)寄存器觸發(fā)方可生效
sfr ISP_TRIG = 0xe6; //ISP/IAP操作時的命令觸發(fā)寄存器
//在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 //軟件選擇從用戶應(yīng)用程序區(qū)啟動(0),還是從ISP程序區(qū)啟動(1).
//要與SWRST直接配合才能實現(xiàn).
//#define SWRST 0x20 //0:不操作,1:產(chǎn)生軟件系統(tǒng)復(fù)位,硬件自動清零.
//#define CMD_FAIL 0x10 //ISP/IAP命令觸發(fā)失敗標(biāo)志
//#define WT2 0x40 //設(shè)置CPU等待時間 CPU等待時間(機(jī)器周期)
//#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區(qū),軟復(fù)位
//ISP_CONTR = 0x60; //選擇ISP區(qū),軟復(fù)位
/* ISP_CMD */
//#define MS1 0x02 //MS1 MS0
//#define MS0 0x01 // 0 0 待機(jī)模式,無ISP操作
// 0 1 對用戶應(yīng)用程序Flash區(qū)及數(shù)據(jù)Flash區(qū)字節(jié)讀
// 1 0 對用戶應(yīng)用程序Flash區(qū)及數(shù)據(jù)Flash區(qū)字節(jié)編程
// 1 1 對用戶應(yīng)用程序Flash區(qū)及數(shù)據(jù)Flash區(qū)扇區(qū)擦除
#define ISP_IAP_BYTE_READ 1 //字節(jié)讀
#define ISP_IAP_BYTE_PROGRAM 2 //字節(jié)編程
#define ISP_IAP_SECTOR_ERASE 3 //扇區(qū)擦除
#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; //系統(tǒng)時鐘分頻寄存器
//#define CLKS2_ 0x04 //CLKS2 CLKS1 CLKS0 分頻后CPU的實際工作頻率
//#define CLKS1_ 0x02 // 0 0 0 系統(tǒng)時鐘(外部時鐘或內(nèi)部R/C振蕩時鐘)
//#define CLKS0_ 0x01 // 0 0 1 系統(tǒng)時鐘/2
// 0 1 0 系統(tǒng)時鐘/4
// 0 1 1 系統(tǒng)時鐘/8
// 1 0 0 系統(tǒng)時鐘/16
// 1 0 1 系統(tǒng)時鐘/32
// 1 1 0 系統(tǒng)時鐘/64
// 1 1 1 系統(tǒng)時鐘/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傳輸完成標(biāo)志,SPIF通過軟件向其寫入1清零
#define WCOL 0x40 //SPI寫沖突標(biāo)志,WCOL通過軟件向其寫入1清零
sfr SPCTL = 0x85;
#define SSIG 0x80 // /SS忽略.1:由MSTR確定器件為主機(jī)還是從機(jī);0:由/SS引腳配置成I/O口;
#define SPEN 0x40 //SPI使能位
#define DORD 0x20 //SPI數(shù)據(jù)順序.1:數(shù)據(jù)的LSB(最低位)先發(fā)送;0:數(shù)據(jù)的MSB(最高位)先發(fā)送;
#define MSTR 0x10 //主從模式選擇
#define CPOL 0x08 //SPI時鐘極性,1:SPICLK空閑時為高電平,SPICLK的前時鐘沿為下降沿,而后沿為上升沿;
//0:SPICLK空閑時為低電平,SPICLK的前時鐘沿為上升沿,而后沿為下降沿;
#define CPHA 0x04 //SPI時鐘相位選擇,1:數(shù)據(jù)在SPICLK的前時鐘沿驅(qū)動,并在后時鐘沿采樣;
//0:數(shù)據(jù)/SS為低(SSIG=0)時被驅(qū)動,在SPICLK的后時鐘沿被改變,并在前時鐘沿被采樣;
//(注:SSIG=1時的操作未定義)
#define SPR1 0x02 //SPI時鐘選擇
#define SPR0 0x01 //SPR1 SPR0 SPI時鐘
// 0 0 系統(tǒng)時鐘/4
// 0 1 系統(tǒng)時鐘/16
// 1 0 系統(tǒng)時鐘/64
// 1 1 系統(tǒng)時鐘/128
sfr SPDAT = 0x86;
/* ADC Register */
sfr ADC_CONTR = 0xc5; //A/D轉(zhuǎn)換控制寄存器
sfr ADC_DATA = 0xc6; //A/D轉(zhuǎn)換結(jié)果寄存器,高8位
sfr ADC_LOW2 = 0xbe; //A/D轉(zhuǎn)換結(jié)果寄存器,低2位
/* ADC_CONTR */
#define ADC_POWER 0x80 //ADC電源控制位
//#define SPEED1 0x40 //SPEED1 SPEED0 ADC轉(zhuǎn)換時間
//#define SPEED0 0x20 // 1 1 270個時鐘周期轉(zhuǎn)換一次
// 1 0 540個時鐘周期轉(zhuǎn)換一次
// 0 1 810個時鐘周期轉(zhuǎn)換一次
// 0 0 1080個時鐘周期轉(zhuǎn)換一次
//#define ADC_FLAG 0x10 //ADC轉(zhuǎn)換結(jié)束位
#define ADC_START 0x08 //ADC轉(zhuǎn)換控制位
//#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計數(shù)器陣列溢出標(biāo)志,只能軟件清零
sbit CR = CCON^6; //PCA計數(shù)器陣列運行控制位
sbit CCF3 = CCON^3; //PCA模塊3中斷標(biāo)志,必須由軟件清零
sbit CCF2 = CCON^2; //PCA模塊2中斷標(biāo)志,必須由軟件清零
sbit CCF1 = CCON^1; //PCA模塊1中斷標(biāo)志,必須由軟件清零
sbit CCF0 = CCON^0; //PCA模塊0中斷標(biāo)志,必須由軟件清零
sfr CMOD = 0xD9; //PCA模式寄存器
#define CIDL 0x80 //0:空閑模式PCA計數(shù)器繼續(xù)工作;1:空閑模式PCA計數(shù)器停止工作
#define CPL1 0x04 //PCA記數(shù)脈沖選擇
#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記數(shù)溢出中斷使能
sfr CCAPM0 = 0xDA; //PCA比較/捕獲模塊寄存器
//#define ECOM0 0x40 //使能比較器
//#define CAPP0 0x20 //使能上升沿捕獲
//#define CAPN0 0x10 //使能下降沿捕獲
//#define MAT0 0x08 //匹配
//#define TOG0 0x04 //翻轉(zhuǎn)
//#define PWM0 0x02 //使能CEX0腳用作脈寬調(diào)制輸出
//#define ECCF0 0x01 //使能CCF0中斷
sfr CCAPM1 = 0xDB; //PCA比較/捕獲模塊寄存器
//#define ECOM1 0x40 //使能比較器
//#define CAPP1 0x20 //使能上升沿捕獲
//#define CAPN1 0x10 //使能下降沿捕獲
//#define MAT1 0x08 //匹配
//#define TOG1 0x04 //翻轉(zhuǎn)
//#define PWM1 0x02 //使能CEX1腳用作脈寬調(diào)制輸出
//#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上升沿觸發(fā) 0x21 0x20
X 0 1 0 0 0 0/1 16位捕獲模式,CEXn下降沿觸發(fā) 0x11 0x10
X 1 1 0 0 0 0/1 16位捕獲模式,CEXn跳變觸發(fā) 0x31 0x30
1 0 0 1 0 0 0/1 16位軟件定時器 0x49 0x48
1 0 0 1 1 0 0/1 16位高速輸出 0x4D 0x4C
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -