专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
怎样用外部中断触发ADC?
2019-03-24 13:19
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
6462
3
1586
怎样用外部中断触发ADC?有做过的么?求指教!谢谢
[
本帖最后由 popofxk 于 2012-10-24 10:13 编辑
] 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
popofxk
2019-03-24 22:33
你好 版主大人,我用的是F149
#include <msp430x14x.h>
#include "Uart.h"
//typedef unsigned char uchar;
//typedef unsigned int uint;
uint sum;
void Trans_val(uint Hex_Val);
/************************主函数****************************/
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; //关闭看门狗
P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换
P4DIR |= 0x01;
P6SEL |= BIT0; // 将P6_0,p6_1作为外围功能使用,使能ADC通道
P3SEL |= 0xC0; // P3_4,5,p3_5选择为UART收发端口
P1IE |= BIT5; //端口P1.5中断
P1SEL |= BIT5; //设置P1.5为外围功能模块
ADC12CTL0 = ADC12ON+SHT0_8+MSC; // 打开ADC,设置采样时间,参考电压为默认值VCC
ADC12CTL1 = SHP; // 使用采样定时器
ADC12CTL0 |= ENC; // 使能转换
_EINT(); //全局中断
_BIS_SR(GIE); //开总中断
LPM0; //低功耗模式0,在此模式下,仅仅关闭MCLK主时钟,其他时钟正常
while(1);
}
/*******************************************
函数名称:Trans_val
功 能:将16进制ADC转换数据变换成三位10进制
真实的模拟电压数据
参 数:Hex_Val--16进制数据
n--变换时的分母等于2的n次方
返回值 :无
********************************************/
void Trans_val(uint Hex_Val)
{
unsigned long caltmp;
uint Curr_Volt;
uchar n = 5;
uchar str[5];
caltmp = Hex_Val;
Curr_Volt=(caltmp*3300)/4095; //计算十进制的电压值
str[0]=Curr_Volt/1000;
str[2]=Curr_Volt%1000/100;
str[3]=Curr_Volt%100/10;
str[4]=Curr_Volt%10;
str[1] = 0x2e; //对应符号"."
Uart1_Init();
Uart1_send(str,n);
Delays();
}
/*******************************************
函数名称:PORT1_ISR
功 能:检测输入到P1.5口有上升沿时
启动AD转换
参 数:
返回值 :
********************************************/
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR (void)
{
P1IE &= ~BIT5;
if((P1IFG&BIT5)==BIT5)
P4OUT = 0x00;
ADC12CTL0 |= ADC12SC;
sum = ADC12MEM0;
Trans_val(sum);
P1IFG &= ~BIT5;
P1IE |= BIT5;
}
现在的问题是P1.5口没信号时就进中断,而且进去后就跳不出中断,麻烦楼主帮忙~谢谢~~~
[
本帖最后由 popofxk 于 2012-10-24 16:18 编辑
]
加载中...
查看其它3个回答
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include <msp430x14x.h>
#include "Uart.h"
//typedef unsigned char uchar;
//typedef unsigned int uint;
uint sum;
void Trans_val(uint Hex_Val);
/************************主函数****************************/
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; //关闭看门狗
P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换
P4DIR |= 0x01;
P6SEL |= BIT0; // 将P6_0,p6_1作为外围功能使用,使能ADC通道
P3SEL |= 0xC0; // P3_4,5,p3_5选择为UART收发端口
P1IE |= BIT5; //端口P1.5中断
P1SEL |= BIT5; //设置P1.5为外围功能模块
ADC12CTL0 = ADC12ON+SHT0_8+MSC; // 打开ADC,设置采样时间,参考电压为默认值VCC
ADC12CTL1 = SHP; // 使用采样定时器
ADC12CTL0 |= ENC; // 使能转换
_EINT(); //全局中断
_BIS_SR(GIE); //开总中断
LPM0; //低功耗模式0,在此模式下,仅仅关闭MCLK主时钟,其他时钟正常
while(1);
}
/*******************************************
函数名称:Trans_val
功 能:将16进制ADC转换数据变换成三位10进制
真实的模拟电压数据
参 数:Hex_Val--16进制数据
n--变换时的分母等于2的n次方
返回值 :无
********************************************/
void Trans_val(uint Hex_Val)
{
unsigned long caltmp;
uint Curr_Volt;
uchar n = 5;
uchar str[5];
caltmp = Hex_Val;
Curr_Volt=(caltmp*3300)/4095; //计算十进制的电压值
str[0]=Curr_Volt/1000;
str[2]=Curr_Volt%1000/100;
str[3]=Curr_Volt%100/10;
str[4]=Curr_Volt%10;
str[1] = 0x2e; //对应符号"."
Uart1_Init();
Uart1_send(str,n);
Delays();
}
/*******************************************
函数名称:PORT1_ISR
功 能:检测输入到P1.5口有上升沿时
启动AD转换
参 数:
返回值 :
********************************************/
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR (void)
{
P1IE &= ~BIT5;
if((P1IFG&BIT5)==BIT5)
P4OUT = 0x00;
ADC12CTL0 |= ADC12SC;
sum = ADC12MEM0;
Trans_val(sum);
P1IFG &= ~BIT5;
P1IE |= BIT5;
}
现在的问题是P1.5口没信号时就进中断,而且进去后就跳不出中断,麻烦楼主帮忙~谢谢~~~
[ 本帖最后由 popofxk 于 2012-10-24 16:18 编辑 ]
一周热门 更多>