51单片机auxr寄存器_STC12C5A60S2单片机AD采样程序及其寄存器讲解
/*********************************************************************************************************************************************************
*程序說明:本程序使用STC12C5A60S2 ADC轉換功能,ADC采樣使用查詢方式
*芯片供電:5V
*時間:2013/3/27
*采樣通道:P1^0
*********************************************************************************************************************************************************/
#include "STC12C5A60S2.h"
#include "stdio.h"
#include "intrins.h"
#include "math.h"
#define uint unsigned int
#define uchar unsigned char
/*******************************************************************************************************************************************************************
*函數功能:獲取ADC采樣值
*時間:2013、3、27
*相關寄存器講解:? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?7? ?? ?? ?? ?? ?? ???6? ?? ?? ?? ???5? ?? ?? ?? ?? ? 4? ?? ?? ?? ?? ?? ?? ? 3? ?? ?? ?? ?? ?? ?? ? 2? ?? ?? ?? ? 1? ?? ?? ?? ?? ?? ?0? ?? ?? ???Reset Vale
*:ADC_CONTR://A/D 轉換控制寄存器 ADC_POWER SPEED1 SPEED0? ?ADC_FLAG? ?ADC_START??CHS2? ???CHS1? ?? ???CHS0? ?? ? 0000,0000
* ADC_RES? ? //A/D 轉換結果高8位? ?? ?? ?? ?? ?ADCV.9? ?? ? ADCV.8? ? ADCV.7? ?? ?ADCV.6? ?? ?? ???ADCV.5? ?? ?? ? ADCV.4? ?ADCV.3? ???ADCV.2? ? 0000,0000
*ADC_RESL? ? //A/D 轉換結果低2位? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?ADCV.1? ? ADCV.0? ???0000,0000
*寄存器位控制講解:
ADC_POWER:ADC電源
ADC_START:ADC轉換啟動控制位 設置為1時開始轉換 轉換結束后為0
ADC_FLAG:ADC轉換結束標志位 轉換完成后 ADC_FLAG=1 要由軟件一定要清0
SPEED1|SPEED0:模數轉換器速度控制位? ?? ?? ???CHS2/CHS1CHS0:模擬輸入通道選擇
------------------------------------------------? ?? ?? ?? ?? ? -------------------------------------------------
|SPEED1 | SPEED0? ?|??轉換時間? ?? ?? ???|? ?? ?? ?? ???| CHS2 | CHS1 | CHS0? ? | 模擬輸入通道|
|? ?1? ?? ?? ?|? ?? ? 1? ?? ?? ?|??90個時鐘周期? ?|? ?? ?? ?? ?? ?|??0? ?? ? |??0? ?? ? |? ?0? ?|? ?? ? |? ?P1^0? ?? ?|
|??1? ?? ?? ? |? ?? ? 0? ?? ?? ?|??180個時鐘周期 |? ?? ?? ?? ?? ?|??0? ?? ? |??0? ?? ? |? ?1? ?|? ?? ? |? ?P1^1? ?? ?|
|??0? ?? ?? ? |? ?? ? 1? ?? ?? ?| 360個時鐘周期??|? ?? ?? ?? ?? ?|??0? ?? ? |??1? ?? ? |? ?0? ?|? ?? ? |? ?P1^2? ?? ?|
|??0? ?? ?? ? |? ?? ? 0? ?? ?? ?|??540個時鐘周期 |? ?? ?? ?? ?? ?|??0? ?? ? |??1? ?? ? |? ?1? ?|? ?? ? |? ?P1^3? ?? ?|
-------------------------------------------------? ?? ?? ?? ?? ?|??1? ?? ? |??0? ?? ? |? ?0? ?|? ?? ? |? ?P1^4? ?? ?|
|??1? ?? ? |??0? ?? ? |? ?1? ?|? ?? ? |? ?P1^5? ?? ?|
|??1? ?? ? |??1? ?? ? |? ?0? ?|? ?? ? |? ?P1^6? ?? ?|
|??1? ?? ? |??1? ?? ? |? ?1? ?|? ?? ? |? ?P1^7? ?? ?|
----------------------------------------------
************************************************************************************************************************************************************************/
uint ADC_Get(uchar Channel)
{
ADC_CONTR=0x88|Channel;
_nop_(); _nop_(); _nop_(); _nop_();
while(!(ADC_CONTR&0x10));? ? //等待轉換完成
ADC_CONTR&=0xe7;? ?? ?//關閉AD轉換,ADC_FLAG位由軟件清0
return(ADC_RES*4+ADC_RESL);? ?//返回AD轉換完成的10位數據(16進制)
}
/******************************************************************
*函數功能:將ADC采樣值轉換為10進制數據
*時間:2013、3、27
******************************************************************/
float ADC_Value(uchar Channel)
{
float AD_Value;
uint i;
for(i=0;i<10;i++) //采樣10次取平均值
AD_Value+=ADC_Get(Channel); //轉換100次求平均值(提高精度)
AD_Value/=10;
AD_Value=(AD_Value*5)/1024;//ADRJ=0,取10位轉換結果ADC_RES+ADC_RESL=1024*Vin/Vcc
return AD_Value;
}
/***************************************************************
*Funtion Name:delay
*Time:2013/3/27
Author:zhuhao
***************************************************************/
void delay(unsigned int a) //延時約1ms
{
unsigned int i;
while (--a!=0)
for(i=600;i>0;i--);? ?//1T單片機i=600,若是12T單片機i=125
}
/***************************************************************
*Funtion Name:USART_Init
*Time:2013/3/27
Author:zhuhao
***************************************************************/
void USART_Init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd; //設置9600波特率
SCON=0x50; //串口方式1,允許接收
TR1=1;
}
/**********************************************************************
*函數功能:ADC初始化配置
*時間:2013、3、27
*寄存器講解:? ?? ?? ?? ???7? ?? ?6? ?? ?5? ?? ?4? ?? ?3? ?? ? 2? ?? ?1? ?? ?0? ?? ???Reset Value
P1ASF:選擇模擬功能A/D端口??P1ASF??P1ASF??P1ASF??P1ASF??P1ASF? ?P1ASF??P1ASF??P1ASF? ? 0000,0000
P1ASF相應位置1則P1口的相應位作為模擬功能A/D使用
7? ? 6? ?? ?5? ?? ???4? ???3? ???2? ?? ? 1? ? 0? ?? ?Reset Value
AUXR1:? ?? ? PCA_P4??SPI_P4??S2_P4??GF2? ?ADRJ? ?? ?? ?DPS? ???0000,0000
其中ADRJ位控制A/D轉換結果寄存器(ADC_RES,ADC_RESL)的數據格式調整
ADRJ=0:10位A/D轉換結果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中
ADRJ=1:10位A/D轉換結果的高8位存放在ADC_RESL中,低2位存放在ADC_RES的低2位中
***********************************************************************/
void ADC_Init()
{
P1ASF=0x01;//ADC I/O選擇 P1^0;
AUXR1=0x00;//ADRJ=0
ADC_RES=0;//10位ADC采樣結果的高8位存放在ADC_RES中,低二位存放在ADC_RES_L的低二位中
ADC_RESL=0;
ADC_CONTR=0x80;//開啟ADC電源
delay(2);//必要的延時
}
void main()
{
USART_Init();
ADC_Init();
while(1)
{
TI=1;
printf("轉化:%.2f V\n",ADC_Value(0));//將ADC采樣的實際電壓值發送給串口助手
TI=0;
}
}
/*******************************************************************************************************************************************************************
*? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???STC12C5A60S2.h 文件
******************************************************************************************************************************************************************/
//--------------------------------------------------------------------------------
//新一代 1T 8051系列 單片機內核特殊功能寄存器 C51 Core SFRs
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?7? ???6? ?? ?5? ?? ? 4? ???3? ? 2? ? 1? ???0? ?Reset Value
sfr ACC??= 0xE0; //Accumulator? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???0000,0000
sfr B? ? = 0xF0; //B Register? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?0000,0000
sfr PSW??= 0xD0; //Program Status Word? ?? ?CY? ? AC? ? F0? ? RS1? ?RS0? ? OV? ? F1? ? P? ? 0000,0000
//-----------------------------------
sbit CY??= PSW^7;
sbit AC??= PSW^6;
sbit F0??= PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV??= PSW^2;
sbit P? ?= PSW^0;
//-----------------------------------
sfr SP? ?= 0x81; //Stack Pointer? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?0000,0111
sfr DPL??= 0x82; //Data Pointer Low Byte? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr DPH??= 0x83; //Data Pointer High Byte? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?0000,0000
//--------------------------------------------------------------------------------
//新一代 1T 8051系列 單片機系統管理特殊功能寄存器
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?7? ???6? ?? ?5? ? 4? ???3? ?? ?2? ? 1? ???0? ???Reset Value
sfr PCON? ?= 0x87; //Power Control? ?? ???SMOD??SMOD0??LVDF??POF? ?GF1? ? GF0? ?PD? ?IDL? ? 0001,0000
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 7? ???6? ?? ? 5? ?? ?4? ???3? ?? ?2? ?? ?1? ?? ?0? ?Reset Value
sfr AUXR??= 0x8E; //Auxiliary Register??T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS??0000,0000
//-----------------------------------
sfr AUXR1 = 0xA2; //Auxiliary Register 1??-??PCA_P4??SPI_P4??S2_P4??GF2? ? ADRJ? ?-? ? DPS??0000,0000
/*
PCA_P4:
0, 缺省PCA 在P1 口
1,PCA/PWM 從P1 口切換到P4 口: ECI 從P1.2 切換到P4.1 口,
PCA0/PWM0 從P1.3 切換到P4.2 口
PCA1/PWM1 從P1.4 切換到P4.3 口
SPI_P4:
0, 缺省SPI 在P1 口
1,SPI 從P1 口切換到P4 口: SPICLK 從P1.7 切換到P4.3 口
MISO 從P1.6 切換到P4.2 口
MOSI 從P1.5 切換到P4.1 口
SS 從P1.4 切換到P4.0 口
S2_P4:
0, 缺省UART2 在P1 口
1,UART2 從P1 口切換到P4 口: TxD2 從P1.3 切換到P4.3 口
RxD2 從P1.2 切換到P4.2 口
GF2: 通用標志位
ADRJ:
0, 10 位A/D 轉換結果的高8 位放在ADC_RES 寄存器, 低2 位放在ADC_RESL 寄存器
1,10 位A/D 轉換結果的最高2 位放在ADC_RES 寄存器的低2 位, 低8 位放在ADC_RESL 寄存器
DPS: 0, 使用缺省數據指針DPTR0
1,使用另一個數據指針DPTR1
*/
//-----------------------------------
sfr WAKE_CLKO = 0x8F; //附加的 SFR WAK1_CLKO
/*
7? ?? ?? ?? ?6? ?? ?? ? 5? ?? ?? ? 4? ?? ?? ? 3? ?? ? 2? ?? ? 1? ?? ?0? ?? ?? ?Reset Value
PCAWAKEUP??RXD_PIN_IE??T1_PIN_IE??T0_PIN_IE??LVD_WAKE? ? _? ? T1CLKO??T0CLKO? ?? ?0000,0000B
b7 - PCAWAKEUP : PCA 中斷可喚醒 powerdown。
b6 - RXD_PIN_IE : 當 P3.0(RXD) 下降沿置位 RI 時可喚醒 powerdown(必須打開相應中斷)。
b5 - T1_PIN_IE : 當 T1 腳下降沿置位 T1 中斷標志時可喚醒 powerdown(必須打開相應中斷)。
b4 - T0_PIN_IE : 當 T0 腳下降沿置位 T0 中斷標志時可喚醒 powerdown(必須打開相應中斷)。
b3 - LVD_WAKE : 當 CMPIN 腳低電平置位 LVD 中斷標志時可喚醒 powerdown(必須打開相應中斷)。
b2 -
b1 - T1CLKO : 允許 T1CKO(P3.5) 腳輸出 T1 溢出脈沖,Fck1 = 1/2 T1 溢出率
b0 - T0CLKO : 允許 T0CKO(P3.4) 腳輸出 T0 溢出脈沖,Fck0 = 1/2 T1 溢出率
*/
//-----------------------------------
sfr CLK_DIV = 0x97; //Clock Divder? ?? ?? ? -? ???-? ?? ?-? ?? ? -? ???-??CLKS2 CLKS1 CLKS0 xxxx,x000
//-----------------------------------
sfr BUS_SPEED = 0xA1; //Stretch register? ?? ?-? ???-? ? ALES1? ?ALES0? ?-? ?RWS2??RWS1??RWS0 xx10,x011
/*
ALES1 and ALES0:
00 : The P0 address setup time and hold time to ALE negative edge is one clock cycle
01 : The P0 address setup time and hold time to ALE negative edge is two clock cycles.
10 : The P0 address setup time and hold time to ALE negative edge is three clock cycles. (default)
11 : The P0 address setup time and hold time to ALE negative edge is four clock cycles.
RWS2,RWS1,RWS0:
000 : The MOVX read/write pulse is 1 clock cycle.
001 : The MOVX read/write pulse is 2 clock cycles.
010 : The MOVX read/write pulse is 3 clock cycles.
011 : The MOVX read/write pulse is 4 clock cycles. (default)
100 : The MOVX read/write pulse is 5 clock cycles.
101 : The MOVX read/write pulse is 6 clock cycles.
110 : The MOVX read/write pulse is 7 clock cycles.
111 : The MOVX read/write pulse is 8 clock cycles.
*/
//--------------------------------------------------------------------------------
//新一代 1T 8051系列 單片機中斷特殊功能寄存器
//有的中斷控制、中斷標志位散布在其它特殊功能寄存器中,這些位在位地址中定義
//其中有的位無位尋址能力,請參閱 新一代 1T 8051系列 單片機中文指南
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 7? ???6? ???5? ? 4? ???3? ? 2? ? 1? ? 0? ?Reset Value
sfr IE? ?? ?= 0xA8;??//中斷控制寄存器? ?? ???EA??ELVD??EADC? ?ES? ?ET1??EX1??ET0??EX0??0x00,0000
//-----------------------
sbit EA? ?? ? = IE^7;
sbit ELVD? ???= IE^6; //低壓監測中斷允許位
sbit EADC? ???= IE^5; //ADC 中斷允許位
sbit ES? ?? ? = IE^4;
sbit ET1? ?? ?= IE^3;
sbit EX1? ?? ?= IE^2;
sbit ET0? ?? ?= IE^1;
sbit EX0? ?? ?= IE^0;
//-----------------------
sfr IE2? ?? ? = 0xAF;??//Auxiliary Interrupt? ?-? ???-? ???-? ? -? ???-? ? -??ESPI??ES2??0000,0000B
//-----------------------
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?7? ???6? ???5? ? 4? ? 3? ? 2? ? 1? ? 0? ? Reset Value
sfr IP? ?? ?= 0xB8; //中斷優先級低位? ?? ?PPCA??PLVD??PADC??PS? ?PT1??PX1??PT0??PX0? ?0000,0000
//--------
sbit PPCA? ???= IP^7;??//PCA 模塊中斷優先級
sbit PLVD? ???= IP^6;??//低壓監測中斷優先級
sbit PADC? ???= IP^5;??//ADC 中斷優先級
sbit PS? ?? ? = IP^4;
sbit PT1? ?? ?= IP^3;
sbit PX1? ?? ?= IP^2;
sbit PT0? ?? ?= IP^1;
sbit PX0? ?? ?= IP^0;
//-----------------------
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???7? ?? ?6? ?? ?5? ???4? ???3? ???2? ???1? ???0? ? Reset Value
sfr IPH? ?= 0xB7; //中斷優先級高位? ?? ? PPCAH??PLVDH??PADCH??PSH??PT1H??PX1H??PT0H??PX0H? ?0000,0000
sfr IP2? ?= 0xB5; //? ?? ?? ?? ?? ?? ?? ???-? ?? ?-? ?? ?-? ???-? ???-? ???-? ?PSPI? ?PS2? ?xxxx,xx00
sfr IPH2??= 0xB6; //? ?? ?? ?? ?? ?? ?? ???-? ?? ?-? ?? ?-? ???-? ???-? ???-? ?PSPIH??PS2H??xxxx,xx00
//-----------------------
//新一代 1T 8051系列 單片機I/O 口特殊功能寄存器
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???7? ???6? ???5? ???4? ???3? ???2? ???1? ???0? ?? ?? ?Reset Value
sfr P0? ?= 0x80; //8 bitPort0? ?? ?? ? P0.7??P0.6??P0.5??P0.4??P0.3??P0.2??P0.1??P0.0? ?? ? 1111,1111
sfr P0M0 = 0x94; //? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr P0M1 = 0x93; //? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr P1? ?= 0x90; //8 bitPort1? ?? ?? ? P1.7??P1.6??P1.5??P1.4??P1.3??P1.2??P1.1??P1.0? ?? ? 1111,1111
sfr P1M0 = 0x92; //? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr P1M1 = 0x91; //? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr P1ASF = 0x9D; //P1 analog special function
sfr P2? ?= 0xA0; //8 bitPort2? ?? ?? ? P2.7??P2.6??P2.5??P2.4??P2.3??P2.2??P2.1??P2.0? ?? ? 1111,1111
sfr P2M0 = 0x96; //? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr P2M1 = 0x95; //? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr P3? ?= 0xB0; //8 bitPort3? ?? ?? ? P3.7??P3.6??P3.5??P3.4??P3.3??P3.2??P3.1??P3.0? ?? ? 1111,1111
sfr P3M0 = 0xB2; //? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr P3M1 = 0xB1; //? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr P4? ?= 0xC0; //8 bitPort4? ?? ?? ? P4.7??P4.6??P4.5??P4.4??P4.3??P4.2??P4.1??P4.0? ?? ? 1111,1111
sfr P4M0 = 0xB4; //? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr P4M1 = 0xB3; //? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???7? ?? ?6? ?? ?? ?5? ?? ?? ?4? ?? ?3? ???2? ???1? ???0? ???Reset Value
sfr P4SW = 0xBB; //Port-4 switch? ? -? ?LVD_P4.6??ALE_P4.5??NA_P4.4? ?-? ???-? ???-? ???-? ? x000,xxxx
sfr P5? ?= 0xC8; //8 bitPort5? ?? ?? ???-? ???-? ?? ? -? ?? ?-? ? P5.3??P5.2??P5.1??P5.0? ? xxxx,1111
sfr P5M0 = 0xCA; //? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr P5M1 = 0xC9; //? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
//--------------------------------------------------------------------------------
//新一代 1T 8051系列 單片機定時器特殊功能寄存器
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?7? ???6? ???5? ???4? ???3? ???2? ???1? ???0? ???Reset Value
sfr TCON = 0x88; //T0/T1 Control? ?? ?? ???TF1? ?TR1? ?TF0? ?TR0? ?IE1? ?IT1? ?IE0? ?IT0? ? 0000,0000
//-----------------------------------
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
//-----------------------------------
sfr TMOD = 0x89; //T0/T1 Modes? ?? ?? ?? ? GATE1 C/T1??M1_1??M1_0??GATE0 C/T0??M0_1??M0_0? ?0000,0000
sfr TL0??= 0x8A; //T0 Low Byte? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???0000,0000
sfr TH0??= 0x8C; //T0 High Byte? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr TL1??= 0x8B; //T1 Low Byte? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???0000,0000
sfr TH1??= 0x8D; //T1 High Byte? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
//--------------------------------------------------------------------------------
//新一代 1T 8051系列 單片機串行口特殊功能寄存器
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?7? ???6? ???5? ???4? ???3? ???2? ???1? ???0? ???Reset Value
sfr SCON = 0x98; //Serial Control? ?? ?? ?SM0/FE SM1? ?SM2? ?REN? ?TB8? ?RB8? ? TI? ? RI? ? 0000,0000
//-----------------------------------
sbit SM0 = SCON^7;??//SM0/FE
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI??= SCON^1;
sbit RI??= SCON^0;
//-----------------------------------
sfr SBUF = 0x99; //Serial Data Buffer? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???xxxx,xxxx
sfr SADEN = 0xB9; //Slave Address Mask? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
sfr SADDR = 0xA9; //Slave Address? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?0000,0000
//-----------------------------------
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???7? ?? ?6? ?? ?5? ?? ?4? ?? ?3? ?? ?2? ???1? ???0? ?? ???Reset Value
sfr S2CON = 0x9A; //S2 Control??S2SM0??S2SM1??S2SM2??S2REN??S2TB8??S2RB8??S2TI??S2RI? ?? ?00000000B
sfr S2BUF = 0x9B; //S2 Serial Buffer? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?xxxx,xxxx
sfr BRT = 0x9C; //S2 Baud-Rate Timer? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0000,0000
//--------------------------------------------------------------------------------
//新一代 1T 8051系列 單片機看門狗定時器特殊功能寄存器
sfr WDT_CONTR = 0xC1; //Watch-Dog-Timer Control register
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???7? ???6? ???5? ?? ?4? ?? ? 3? ?? ?2? ?1? ?0? ???Reset Value
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? WDT_FLAG??-??EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0? ? xx00,0000
//-----------------------
//--------------------------------------------------------------------------------
//新一代 1T 8051系列 單片機PCA/PWM 特殊功能寄存器
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???7? ???6? ???5? ???4? ???3? ???2? ???1? ???0? ???Reset Value
sfr CCON? ?= 0xD8;? ?//PCA 控制寄存器。? ? CF? ? CR? ? -? ???-? ???-? ???-? ? CCF1??CCF0? ?00xx,xx00
//-----------------------
sbit CF? ???= CCON^7; //PCA計數器溢出標志,由硬件或軟件置位,必須由軟件清0。
sbit CR? ???= CCON^6; //1:允許 PCA 計數器計數, 必須由軟件清0。
//-
//-
sbit CCF1? ?= CCON^1; //PCA 模塊1 中斷標志, 由硬件置位, 必須由軟件清0。
sbit CCF0? ?= CCON^0; //PCA 模塊0 中斷標志, 由硬件置位, 必須由軟件清0。
//-----------------------
sfr CMOD??= 0xD9; //PCA 工作模式寄存器。? ?CIDL? ?-? ???-? ???-? ?CPS2? ?CPS1??CPS0??ECF? ?0xxx,x000
/*
CIDL: idle 狀態時 PCA 計數器是否繼續計數, 0: 繼續計數, 1: 停止計數。
CPS2: PCA 計數器脈沖源選擇位 2。
CPS1: PCA 計數器脈沖源選擇位 1。
CPS0: PCA 計數器脈沖源選擇位 0。
CPS2? ?CPS1? ?CPS0
0? ?? ?0? ?? ?0? ? 系統時鐘頻率 fosc/12。
0? ?? ?0? ?? ?1? ? 系統時鐘頻率 fosc/2。
0? ?? ?1? ?? ?0? ? Timer0 溢出。
0? ?? ?1? ?? ?1? ? 由 ECI/P3.4 腳輸入的外部時鐘,最大 fosc/2。
1? ?? ?0? ?? ?0? ? 系統時鐘頻率,??Fosc/1
1? ?? ?0? ?? ?1? ? 系統時鐘頻率/4,Fosc/4
1? ?? ?1? ?? ?0? ? 系統時鐘頻率/6,Fosc/6
1? ?? ?1? ?? ?1? ? 系統時鐘頻率/8,Fosc/8
ECF: PCA計數器溢出中斷允許位, 1--允許 CF(CCON.7) 產生中斷。
*/
//-----------------------
sfr CL? ???= 0xE9; //PCA 計數器低位? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???0000,0000
sfr CH? ???= 0xF9; //PCA 計數器高位? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???0000,0000
//-----------------------
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???7? ???6? ?? ?5? ?? ?4? ???3? ???2? ???1? ???0? ???Reset Value
sfr CCAPM0 = 0xDA; //PCA 模塊0 PWM 寄存器??-? ?ECOM0??CAPP0??CAPN0??MAT0??TOG0??PWM0??ECCF0? ?x000,0000
sfr CCAPM1 = 0xDB; //PCA 模塊1 PWM 寄存器??-? ?ECOM1??CAPP1??CAPN1??MAT1??TOG1??PWM1??ECCF1? ?x000,0000
//ECOMn = 1:允許比較功能。
//CAPPn = 1:允許上升沿觸發捕捉功能。
//CAPNn = 1:允許下降沿觸發捕捉功能。
//MATn??= 1:當匹配情況發生時, 允許 CCON 中的 CCFn 置位。
//TOGn??= 1:當匹配情況發生時, CEXn 將翻轉。
//PWMn??= 1:將 CEXn 設置為 PWM 輸出。
//ECCFn = 1:允許 CCON 中的 CCFn 觸發中斷。
//ECOMn??CAPPn??CAPNn??MATn??TOGn??PWMn??ECCFn
//??0? ?? ?0? ?? ?0? ???0? ???0? ???0? ???0? ?0x00? ?未啟用任何功能。
//??x? ?? ?1? ?? ?0? ???0? ???0? ???0? ???x? ?0x21? ?16位CEXn上升沿觸發捕捉功能。
//??x? ?? ?0? ?? ?1? ???0? ???0? ???0? ???x? ?0x11? ?16位CEXn下降沿觸發捕捉功能。
//??x? ?? ?1? ?? ?1? ???0? ???0? ???0? ???x? ?0x31? ?16位CEXn邊沿(上、下沿)觸發捕捉功能。
//??1? ?? ?0? ?? ?0? ???1? ???0? ???0? ???x? ?0x49? ?16位軟件定時器。
//??1? ?? ?0? ?? ?0? ???1? ???1? ???0? ???x? ?0x4d? ?16位高速脈沖輸出。
//??1? ?? ?0? ?? ?0? ???0? ???0? ???1? ???0? ?0x42? ?8位 PWM。
//ECOMn??CAPPn??CAPNn??MATn??TOGn??PWMn??ECCFn
//??0? ?? ?0? ?? ?0? ???0? ???0? ???0? ???0? ?0x00? ?無此操作
//??1? ?? ?0? ?? ?0? ???0? ???0? ???1? ???0? ?0x42? ?普通8位PWM, 無中斷
//??1? ?? ?1? ?? ?0? ???0? ???0? ???1? ???1? ?0x63? ?PWM輸出由低變高可產生中斷
//??1? ?? ?0? ?? ?1? ???0? ???0? ???1? ???1? ?0x53? ?PWM輸出由高變低可產生中斷
//??1? ?? ?1? ?? ?1? ???0? ???0? ???1? ???1? ?0x73? ?PWM輸出由低變高或由高變低都可產生中斷
//-----------------------
sfr CCAP0L = 0xEA; //PCA 模塊 0 的捕捉/比較寄存器低 8 位。? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?0000,0000
sfr CCAP0H = 0xFA; //PCA 模塊 0 的捕捉/比較寄存器高 8 位。? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?0000,0000
sfr CCAP1L = 0xEB; //PCA 模塊 1 的捕捉/比較寄存器低 8 位。? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?0000,0000
sfr CCAP1H = 0xFB; //PCA 模塊 1 的捕捉/比較寄存器高 8 位。? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?0000,0000
//-----------------------
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 7? ?6? ?5? ?4? ?3? ?2? ? 1? ???0? ? Reset Value
sfr PCA_PWM0 = 0xF2; //PCA 模塊0 PWM 寄存器。? ?? ?? ?? ?-? ?-? ?-? ?-? ?-? ?-??EPC0H EPC0L? ?xxxx,xx00
sfr PCA_PWM1 = 0xF3; //PCA 模塊1 PWM 寄存器。? ?? ?? ?? ?-? ?-? ?-? ?-? ?-? ?-??EPC1H EPC1L? ?xxxx,xx00
//PCA_PWMn:? ? 7? ?? ?6? ?? ?5? ?? ?4? ?? ?3? ?? ?2? ?? ?1? ?? ?0
//? ?? ?? ?? ? -? ?? ?-? ?? ?-? ?? ?-? ?? ?-? ?? ?-? ? EPCnH??EPCnL
//B7-B2: 保留
//B1(EPCnH): 在 PWM 模式下,與 CCAPnH 組成 9 位數。
//B0(EPCnL): 在 PWM 模式下,與 CCAPnL 組成 9 位數。
//--------------------------------------------------------------------------------
//新一代 1T 8051系列 單片機 ADC 特殊功能寄存器
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???7? ?? ???6? ?? ?5? ?? ? 4? ?? ?? ?3? ?? ?2? ? 1? ? 0? ?Reset Value
sfr ADC_CONTR = 0xBC; //A/D 轉換控制寄存器 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000
sfr ADC_RES??= 0xBD;??//A/D 轉換結果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 0000,0000
sfr ADC_RESL = 0xBE;??//A/D 轉換結果低2位? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? ADCV.1 ADCV.0 0000,0000
//--------------------------------------------------------------------------------
//新一代 1T 8051系列 單片機 SPI 特殊功能寄存器
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???7? ???6? ???5? ???4? ???3? ???2? ???1? ???0? ? Reset Value
sfr SPCTL??= 0xCE; //SPI Control Register??SSIG??SPEN??DORD??MSTR??CPOL??CPHA??SPR1??SPR0??0000,0100
sfr SPSTAT = 0xCD; //SPI Status Register? ?SPIF??WCOL? ?-? ???-? ???-? ???-? ???-? ???-? ? 00xx,xxxx
sfr SPDAT??= 0xCF; //SPI Data Register? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???0000,0000
//--------------------------------------------------------------------------------
//新一代 1T 8051系列 單片機 IAP/ISP 特殊功能寄存器
sfr IAP_DATA? ? = 0xC2;
sfr IAP_ADDRH? ?= 0xC3;
sfr IAP_ADDRL? ?= 0xC4;
//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?7? ? 6? ? 5? ?? ?4? ? 3? ? 2? ? 1? ???0? ? Reset Value
sfr IAP_CMD? ???= 0xC5; //IAP Mode Table? ?? ?? ? 0? ? -? ? -? ?? ?-? ? -? ? -? ?MS1? ?MS0? ?0xxx,xx00
sfr IAP_TRIG? ? = 0xC6;
sfr IAP_CONTR? ?= 0xC7; //IAP Control Register??IAPEN SWBS SWRST CFAIL??-? ?WT2??WT1? ?WT0? ?0000,x000
//--------------------------------------------------------------------------------
總結
以上是生活随笔為你收集整理的51单片机auxr寄存器_STC12C5A60S2单片机AD采样程序及其寄存器讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx 上传文件漏洞_nginx解析
- 下一篇: oauth2 token为空拦截_fei