描述

ad采样的步骤:首先将外部的信号,通过电路或者已有的AD芯片转换成 主CPU能接受的电压 信号。但是此电压信号必须转换成8、10 、12位或更高位数的数字才能进一步做计算。另外转换成位数多少表明了ad转换的精度。所以需要采样,为了将电压信号转换为8、10 、12位或更高位数的数字。

单片机AD采样工作原理

一般来说,AD有积分型的和逐次逼近型的,后都更多的被使用,所以我们一般也都是使用的这一种。说的简单点,它就像我们用天平来称东西一样;AD收到一个电压信号,先将AD内部的一个寄存器里的最高位置1,然后再把这个数据转换成电压信号与输入的比较,如果大了,那么把最高位清0,次高位置位,就这样比较;如果小了,次高位再置位,再次比较。和称东西的一样吧,你一边放上东西,另一边先放最大的砝码,如果大了再换小的,如果不够,再加次大的,这样比较进行的。

STC12C5A60S2单片机AD采样程序

/*********************************************************************************************************************************************************

*程序说明:本程序使用STC12C5A60S2 ADC转换功能,ADC采样使用查询方式

*芯片供电:5V

*采样通道: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

//--------------------------------------------------------------------------------

打开APP精彩内容

点击阅读全文

c语言ad采样程序思路,单片机AD采样程序及其寄存器讲解相关推荐

  1. c语言单片机定时器的应用程序,51单片机定时器中断程序(C语言)

    51c程序 51单片机定时器中断程序(C语言) 用C语言实现的,先要定义好定时器的初值 不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期 机器周期=12/n(n指晶 ...

  2. 51单片机c语言延时计算软件,51单片机精确延时程序大集合+初值计算工具

    在论坛上看到不少不错的延时程序,整理如下共同分享: 精确延时计算公式: 延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+5 ;延时5秒左右 DELAY5S:PUSH   04H;2个 ...

  3. AVR单片机计算器C语言源程序,一个基于AVR单片机的计算器程序.doc

    一个基于AVR单片机的计算器程序 #include #include//延时函数的头文件 #include // 中断函数的头文件 #define uint unsigned int #define ...

  4. c语言adc采集取平均值,单片机ADC采样算法----递推平均值采样法

    在上一篇文章单片机ADC采样算法---平均值采样法中分析了平均值采样法的使用,上篇文章中的平均值采样法是连续采样100个数据,然后求平均值,这种方法存在一个问题,就是采集100个值之后,下一次又重新采 ...

  5. 带中文字库的240128的c语言程序,51单片机-240128液晶程序与调试

    原标题:51单片机-240128液晶程序与调试 今天终于把金鹏OCMJ8X15D-2液晶(240128点阵带字库无触屏液晶)调好了. 这块液晶能显示8行15个汉字,还有放大字形,从16*16点放大到3 ...

  6. 单片机 中断秒表 c语言程序,51单片机秒表C程序

    本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52:电路找到相应部分即可.这是一整个单片机开发板的电路图其他的忽略. 本程序的keil工程下载: http://www.51hei.c ...

  7. 单片机定时报警C语言程序,51单片机 定时器 中断程序 (C语言)

    EA     是 中断总开关, 不管是定时器,串口还是外部中断,都需要打开 EA 才能触发中断; ET0   是 定时器0 的专用中断开关, 也就是说: 打开了EA.而不打开ET0,定时器0是无法触发 ...

  8. 发出警报声的c语言程序,PIC单片机警报声C程序

    //************************************************** //实验目的: //熟悉使用单片机驱动蜂鸣器产生警报声 //***************** ...

  9. msp430流水灯c语言程序,MSP430单片机流水灯程序

    unsigned int i = 0; unsigned int flag = 0 ,speed = 0; /****************主函数****************/ void mai ...

最新文章

  1. (0059)iOS开发之添加自定义字体库并设置文本字体
  2. Spring Boot 2.5.0 重新设计的spring.sql.init 配置有啥用?
  3. CISCO IP nat 常用命令及原理详解
  4. xp系统如何开启索引服务器,Windows XP系统关闭磁盘索引的两个方法图文教程
  5. shell变量,管道符,作业控制,shell变量,以及变量配置文件
  6. 真相了!算法工程师的一天
  7. (Z)复杂繁琐的芯片设计流程
  8. Quartz任务调度
  9. 苹果cms安装 php映射,苹果cmsV10安装过程中的常见问题处理办法
  10. 什么值得买发布年货消费报告 预制菜GMV同比增长39.41%
  11. Java8 中通过 Stream 对列表进行去重的几种方法
  12. MacOS的14个Spotlight搜索技巧
  13. 28.Linux/Unix 系统编程手册(上) -- 详述进程创建和程序执行
  14. java. base关键字_C#基础知识之base关键字介绍
  15. Qt 防止程序二次运行 实现应用单例
  16. 在线凯撒密码自动分析工具
  17. ubuntu 18.04安装微信
  18. 数据结构和算法(32)之背包问题
  19. 如何在一张ppt中插入多张图片并能依次播放
  20. (原创)CRC计算流程分析(RefIn,Init,RefOut,XorOut)

热门文章

  1. Dynamic Web TWAIN扫描识别工具改变缓冲区图像大小
  2. HP Network Team #1: PROBLEM
  3. SQL 注入式攻击的本质
  4. go gin路由分组route group
  5. Docker管理面板Portainer中文汉化教程
  6. 【收藏】Hadoop解决Could not locate executable null\bin\winutils.exe in the Hadoop binaries.问题
  7. 基于阿里云镜像源使用kubeadm安装k8s单master节点集群(v1.17.3)
  8. Scala可变集合:Queue增加和移除元素
  9. Linux 命令:pwd、touch、ll、wget
  10. python多线程下载ts_基于Python的ERA-5多线程下载(1)