|
回复 沙发 chunyang 的帖子
你好 版主大人,我用的是F149
#include
#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 编辑 ] |
|