4107|4

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

那位大虾能帮忙分析一下原因?谢了! [复制链接]

愁死了。ADC12和Time_A的中断程序运行很正常,将单独调试好的串口程序加进去,却怎么也不能接收到完整数据。有时甚至采样和输出都不正常,不论屏蔽ADC还是UART其余部分都能正常工作,联起来就是不行。那位大虾能帮忙分析一下原因?谢了!

最新回复

问题应该在初始化,没有仔细看。各端口功能定义是否冲突?如P2口方向寄存器全为0xff,USART0怎么用?(F4XX使用P2.4、P2.5)  详情 回复 发表于 2005-4-25 16:57
 
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你的问题我刚碰到,我已经解决了.把你的程序发出来,我给你看看.是程序初始化有问题
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
可能是中断发生冲突,多个中断执行中断程序的时间是否太长?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 

谢谢关注!

因程序较长,现只将主程序和初始化程序贴出来,请指教。(注:晶振8M)
void main(void)
{
unsigned int i,xh,Tref,TRoom;
int NmV;


WDTCTL=WDTPW+WDTHOLD;
BCSCTL2 =0x08+DIVS_3;

P1DIR=15; //控制24c02和输出信号到PWM
P1SEL=8;
P5DIR=3; //控制发光二极管
P2DIR=0xff; //选择4051的x3,ABC对应P2.0、P2.1 、P2.2
P3DIR=0x17; //选择4051的通道,ABC对应P3.2、P3.1 、P3.0
P3SEL=0x30;

swt=0;P3OUT=0xF8;P2OUT=0xF8;
InitII2C();

Time1s=90;ADT01=ADT02=ADT1=ADT2=0;pretemp=0;
for(i=0;i<20;i++)AD[i]=956;
InitUART();
InitADC12();
InitTimeA();
_EINT();
ADCM=AD[0];//AD[0];

while(1)
{

ADCM=0;
ADMax=0;
ADMin=4095;
for(i=0;i<20;i++)
{
ADCM=ADCM+AD[i];
if(AD[i]>ADMax) ADMax=AD[i];
if(AD[i]<ADMin) ADMin=AD[i];
}
ADCM=(ADCM-ADMax-ADMin)/18;
if(fabs(ADCM-pretemp)<2) ADCM=pretemp;
pretemp=ADCM;

xh=TRoom/10+5;

NmV=(int)((float)(ADCM-ADCL)/(float)(ADCH-ADCL)*20000);

NmV=NmV+S[xh]+(S[xh+1]-S[xh])/10*(TRoom-(xh-5)*10);
Result=((float)Bisearch(171,NmV))/1600*(PWMH-PWML)+PWML;
};
}

void InitADC12(void)
{
unsigned int i;

/************ADC12 Settings;**********/
P6SEL=0x04; //所有P6口线2为ADC模块使用
P6OUT=0x00;
ADC12CTL0 &=~0x02; //首先复位ADC的转换
// ADC12CTL0=SHT0_8+MSC+ADC12ON; //外部振荡器,置位MSC位,因此转换能自动进行,
ADC12CTL0=SHT0_8+MSC+ADC12ON+REFON+REF2_5V; //内部振荡器,置位MSC位,因此转换能自动进行,
//打开内部参考电压发生器
for (i=0;i<20000;i++){};
ADC12CTL1=0x2F8; //ADC12SC位触发采样和保持
//采样时钟脉冲由采样定时器产生
//时钟源:内部振荡器
//时钟分频:1
//转换模式:单通道多次转换
//选择参考电压和输入管脚
//Reref=2.5V
// ADC12MCTL0=0x0a; //REF=××ss,××cc;Input=A10
//source=Temperature diode
ADC12MCTL0=0x12; //REF=Vref+,××ss;Input=P62
ADC12IE=0x01; //使能通道10转换完成后中断
ADC12CTL0|=0x02; //使能ADC转换
ADC12CTL0 |=0x01; //开始转换
}

void InitTimeA(void)
{
CCR0=5000-1;
CCTL1=OUTMOD_7;
CCR1=1847;
CCTL2=OUTMOD_7;
CCR2=5000-CCR1;
CCTL0=CCIE;
TACTL = TASSEL_2 + MC_1; // SMCLK, contmode
}

void InitUART(void)
{
UCTL0 |= SWRST+CHAR;
UBR00=0x6D;
UBR10=0x00;
UMCTL0=0x11; //调整寄存器
UCTL0 &= ~SWRST; // Ena××e USART
UTCTL0=0x30;
ME1 |=UTXE0+URXE0; //使能USART0 TXD/RXD
IE1 |=URXIE0; //使能USART0 RX中断
}
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
问题应该在初始化,没有仔细看。各端口功能定义是否冲突?如P2口方向寄存器全为0xff,USART0怎么用?(F4XX使用P2.4、P2.5)
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表