STC单片机学习----ADC
来源:互联网 发布:四方软件论坛 编辑:程序博客网 时间:2024/05/20 09:48
今天上午学习了STC单片机的ADC,这里做个笔记,有两点:
1、ADC中断标志位,也就是ADC_CONTR的ADC_FLAG位。当ADC转换完成后,该位置1,若使能了ADC中断,则会进入ADC中断子函数。需要注意的是,ADC中断标志位需要软件清零,不像外总中断,定时器中断,会硬件清零。
2、ADC启动位,也就是ADC_CONTR的ADC_START位,在ADC转换完成后,该位会清零,也就是说,AD转换只进行一次。如果想要连续转换,则要在ADC中断子函数中再次启动ADC。
// 一些宏定义#define GPIO_Pin00x01#define GPIO_Pin10x02#define GPIO_Pin20x04#define GPIO_Pin30x08#define GPIO_Pin40x10#define GPIO_Pin50x20#define GPIO_Pin60x40#define GPIO_Pin70x80#define BIT00x01#define BIT10x02#define BIT20x04#define BIT30x08#define BIT40x10#define BIT50x20#define BIT60x40#define BIT70x80//ADC_CONTR寄存器的一些宏定义#define ADC_POWERBIT7#define ADC_SPEED_90Clock (BIT6|BIT5)#define ADC_SPEED_180Clock BIT6#define ADC_SPEED_360Clock BIT5#define ADC_SPEED_540Clock 0x00#define ADC_FLAGBIT4#define ADC_STARTBIT3
ADC配置函数/* Includes ------------------------------------------------------------------*/#include "STC_NEW_8051.h"#include "STCSystemInit.h"#include "mySTC.h"/* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*//* Private macro -------------------------------------------------------------*//* Private variables ---------------------------------------------------------*//* Globale variables ---------------------------------------------------------*//* Private function prototypes -----------------------------------------------*//* Private functions ---------------------------------------------------------*/// ADC转换结果,全局变量volatile u16 gADCValue = 0;// ADC的配置和初始化void ADC_Configure(void){// 将P1.0配置为高阻输入 P1M1:P1M0 = 1:0P1M1 |= GPIO_Pin0;P1M0 &= ~GPIO_Pin0;// 将P1.0作为模拟功能AD使用P1ASF |= GPIO_Pin0;// ADRJ=0, 10位转换结果高8位放在ADC_RES,低2位放在ADC_RESLAUXR1 &= ~BIT2;// 复位,再配置ADC_CONTR = 0;// 最后那个零,表示从P1.0输入,如果是P1.5,直接改成5即可ADC_CONTR = ADC_POWER | ADC_SPEED_360Clock | ADC_START | 0;// 使能ADC中断,中断标志位在ADC_CONTR配置时已清零了EADC = 1;EA = 1;}void ADC_IRQHandler(void) interrupt IT_ADC{ // 清零ADC中断标志位(该位必须软件清零) ADC_CONTR &= ~ADC_FLAG; // 获取ADC转换结果 gADCValue = (ADC_RES << 2) | ADC_RESL; // 转换结束后ADC_START变为0,若连续转换需要在这里再次启动ADC ADC_CONTR |= ADC_START;}void ADC_Test(void){u16 temp = gADCValue;USART_SendByte(temp>>8);USART_SendByte((u8)temp);USART_SendByte(ADC_CONTR);gADCValue = 0;}
0 0
- STC单片机学习----ADC
- STC 单片机深入学习
- STC单片机学习----RTX51 Tiny
- 单片机STC-ISP下载线学习板
- STC单片机学习------DS1302时钟芯片
- STM32单片机之ADC学习总结
- STM32单片机之ADC学习总结
- STC学习【1】STC单片机引脚起始位置(一个/两个/三个圆点)
- STC单片机的延时
- STC单片机波特率计算
- STC单片机遭遇
- STC单片机EEPROM读写
- STC单片机 DS1302
- STC单片机程序-按键
- STC单片机编程知识点
- STC单片机跑马灯
- STC单片机知识点
- STC单片机常用型号
- Hadoop学习常用的Linux命令
- 小明求素数积
- 黑马程序员_Dom
- MINIMUM COINS题解 codeEval
- 黑马程序员_WPF
- STC单片机学习----ADC
- 小明的难题
- 嵌入式QT的编译
- 读书笔记---《理解Unix进程》
- 虚表/虚指针
- 黑马程序员_网络编程
- 使用C内置的float类型来建模一个FIR滤波器
- 今天发现了一个系概念--随机数
- Cocos2d-x 水果忍者划痕效果