专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
关于C8051F340中ADC的使用问题
2019-07-15 18:23
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
7327
3
1489
在下最近刚学习C8051F340
单片机
,对其中的ADC使用有点小疑问,望好心人指点迷津。
在下想问,C8051340中的ADC在启动之后即开始AD转换,但每次转换可有触发方式?例如有些单片机是可以靠定时器的每溢出一次就触发转换一次的,C8051F可以么?还是配置转换速率后,启动ADC之后就自己不停的转换了呢?
不知本人描述的是否清晰,若有觉得本人描述不清楚的,可留言,本人改正。多谢!~
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
技术牛人小渣子
2019-07-15 19:54
这个完全可以人为控制。如:AD0EN = 1;意思是ADC开始工作,同理AD0EN = 0;就是停止了。
当然这里还需要注意一下这些标志位,原理与中断等是类似的。
AD0BUSY = 1; // 开始转换
while(!AD0INT); // 等待转换完成
AD0INT = 0; // 清除中断标志
/************************************************************************************/
// 引用外部头文件
/************************************************************************************/
#include "ADC.h"
/************************************************************************************/
// 常量及全局变量定义
/************************************************************************************/
#define AIN1 0x04
#define AIN2 0x05
#define GND 0x1f
#define TEMP 0x1E
#define ADC_CLK 1600000
#define T_US 20
#define sysclk 48000000
/*************************************************************************************/
//
// ADC硬件驱动程序函数定义
//
/*************************************************************************************/
/***********************************************************************************
* Function: ADC_Init;
*
* Description: ADC初始化函数;
*
* Input: none;
*
* Output: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void ADC_Init (void)
{
//REF0CN = 0x07;//使用ref电压基准
AMX0P = TEMP;//选择TempSensor
AMX0N = GND;//选择GND
ADC0CF=(sysclk/ADC_CLK)<<3;//ADC转换时钟
ADC0CN = 0x00;
}
/***********************************************************************************
* Function: ADC_Enable;
*
* Description: ADC使能函数, ADC开始工作;
*
* Input: none;
*
* Output: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void ADC_Enable(void)
{
AD0EN = 1;
}
/***********************************************************************************
* Function: ADC_Disable;
*
* Description: ADC关闭函数, ADC停止工作;
*
* Input: none;
*
* Output: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void ADC_Disable(void)
{
AD0EN = 0;
}
/***********************************************************************************
* Function: ADC_Read;
*
* Description: 读取ADC转换数据函数;
*
* Input: none;
*
* Output: *p, 通道1采样值; *(p+1),通道1采样值; *(p+2),温度通道采样值;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void ADC_Read(int *p)
{
AD0INT = 0; // 清除中断标志
AMX0P = AIN1; //改变AD通道
Delay_us(T_US);
AD0BUSY = 1; //开始转换
while(!AD0INT); // 等待转换完成
AD0INT = 0; // 清除中断标志
*p++ = (unsigned int)ADC0H*256 + ADC0L; // 读取并计算AD值
AMX0P = AIN2; //改变AD通道
Delay_us(T_US);
AD0BUSY = 1; //开始转换
while(!AD0INT); // 等待转换完成
AD0INT = 0; // 清除中断标志
*p++ = (unsigned int)ADC0H*256 + ADC0L; // 读取并计算AD值
AMX0P = TEMP; //改变AD通道
Delay_us(T_US);
AD0BUSY = 1; //开始转换
while(!AD0INT); // 等待转换完成
AD0INT = 0; // 清除中断标志
*p = (unsigned int)ADC0H*256 + ADC0L; // 读取并计算AD值
}
/***********************************************************************************
* Function: ADC_ISR;
*
* Description: 中断服务响应,完成ADC采样数据存储及通道切换;
*
* Input: none;
*
* Output: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void ADC_ISR (void) interrupt 10 using 3 //执行时间: 8uS
{
}
/***********************************************************************************/
// 文件结束
/***********************************************************************************/
复制代码
加载中...
查看其它3个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
当然这里还需要注意一下这些标志位,原理与中断等是类似的。
- AD0BUSY = 1; // 开始转换
- while(!AD0INT); // 等待转换完成
- AD0INT = 0; // 清除中断标志
- /************************************************************************************/
- // 引用外部头文件
- /************************************************************************************/
- #include "ADC.h"
- /************************************************************************************/
- // 常量及全局变量定义
- /************************************************************************************/
- #define AIN1 0x04
- #define AIN2 0x05
- #define GND 0x1f
- #define TEMP 0x1E
- #define ADC_CLK 1600000
- #define T_US 20
- #define sysclk 48000000
- /*************************************************************************************/
- //
- // ADC硬件驱动程序函数定义
- //
- /*************************************************************************************/
- /***********************************************************************************
- * Function: ADC_Init;
- *
- * Description: ADC初始化函数;
- *
- * Input: none;
- *
- * Output: none;
- *
- * Return: none;
- *
- * Note: none;
- ************************************************************************************/
- void ADC_Init (void)
- {
- //REF0CN = 0x07;//使用ref电压基准
- AMX0P = TEMP;//选择TempSensor
- AMX0N = GND;//选择GND
- ADC0CF=(sysclk/ADC_CLK)<<3;//ADC转换时钟
- ADC0CN = 0x00;
- }
- /***********************************************************************************
- * Function: ADC_Enable;
- *
- * Description: ADC使能函数, ADC开始工作;
- *
- * Input: none;
- *
- * Output: none;
- *
- * Return: none;
- *
- * Note: none;
- ************************************************************************************/
- void ADC_Enable(void)
- {
- AD0EN = 1;
- }
- /***********************************************************************************
- * Function: ADC_Disable;
- *
- * Description: ADC关闭函数, ADC停止工作;
- *
- * Input: none;
- *
- * Output: none;
- *
- * Return: none;
- *
- * Note: none;
- ************************************************************************************/
- void ADC_Disable(void)
- {
- AD0EN = 0;
- }
- /***********************************************************************************
- * Function: ADC_Read;
- *
- * Description: 读取ADC转换数据函数;
- *
- * Input: none;
- *
- * Output: *p, 通道1采样值; *(p+1),通道1采样值; *(p+2),温度通道采样值;
- *
- * Return: none;
- *
- * Note: none;
- ************************************************************************************/
- void ADC_Read(int *p)
- {
- AD0INT = 0; // 清除中断标志
-
- AMX0P = AIN1; //改变AD通道
- Delay_us(T_US);
- AD0BUSY = 1; //开始转换
- while(!AD0INT); // 等待转换完成
- AD0INT = 0; // 清除中断标志
- *p++ = (unsigned int)ADC0H*256 + ADC0L; // 读取并计算AD值
-
- AMX0P = AIN2; //改变AD通道
- Delay_us(T_US);
- AD0BUSY = 1; //开始转换
- while(!AD0INT); // 等待转换完成
- AD0INT = 0; // 清除中断标志
- *p++ = (unsigned int)ADC0H*256 + ADC0L; // 读取并计算AD值
-
- AMX0P = TEMP; //改变AD通道
- Delay_us(T_US);
- AD0BUSY = 1; //开始转换
- while(!AD0INT); // 等待转换完成
- AD0INT = 0; // 清除中断标志
- *p = (unsigned int)ADC0H*256 + ADC0L; // 读取并计算AD值
- }
- /***********************************************************************************
- * Function: ADC_ISR;
- *
- * Description: 中断服务响应,完成ADC采样数据存储及通道切换;
- *
- * Input: none;
- *
- * Output: none;
- *
- * Return: none;
- *
- * Note: none;
- ************************************************************************************/
- void ADC_ISR (void) interrupt 10 using 3 //执行时间: 8uS
- {
- }
- /***********************************************************************************/
- // 文件结束
- /***********************************************************************************/
复制代码一周热门 更多>