智能车制作
标题:
求mc9s12xs128单片机的AD模块的数据寄存器问题
[打印本页]
作者:
飞蓝
时间:
2011-8-30 15:30
标题:
求mc9s12xs128单片机的AD模块的数据寄存器问题
本人新手,想把AD模块转换过来得值通过串口发在电脑上显示,主函数除了初始化外如下:
for(;;)
{
while(!ATD0STAT2_CCF0); // 等待转换结束while(ATDOSTAT2_CCF0==1)
while(!SCI0SR1_TDRE);
SCI0DRL=ATD0DR0L;
}
但是在AD0通道不接任何模拟量的情况下,串口上显示的确实FC 而非00
接在其他通道同样如此,求解高手指点一二
完整源程序如下:
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define unint unsigned int
/*****延时***********/
void delay(unint n) {
while(n--);
}
void long_delay(unint i,unint j) {
while(i--) delay(j);
}
/******SCI初始化***************/
void SCI_init()
{
SCI0CR1=0X00;
SCI0CR2=0X0C; //发送器,接收器使能
SCI0BDH=0X00;
SCI0BDL=0X34; //总线时钟8MHZ,波特率为9600
}
//--------------初始化函数----------------//
//-----时钟初始化程序--------//
void PLL_Init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{ //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
REFDV=1; //总线时钟=48/2=24MHz
SYNR=2;
while(!(CRGFLG&0x08));
CLKSEL=0x80;
}
//-----ATD初始化程序--------//
void AD_Init(void)
{
ATD0CTL1=0x00; //选择AD通道为外部触发,8位精度,采样前不放电
ATD0CTL2=0x40; //标志位自动清零,禁止外部触发, 禁止中断
ATD0CTL3=0xa0; //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转
ATD0CTL4=0x01; //采样时间为4个AD时钟周期,PRS=1,ATDClock=6MHz
ATD0CTL5=0x20; //特殊通道禁止,连续转换 ,多通道转换,起始通道为0转换4个通道
ATD0DIEN=0x00; //禁止数字输入
}
//-----读取AD转换结果--------//
void AD_GetValue(word *AD_wValue)
{
*AD_wValue=ATD0DR0; //读取结果寄存器的值
}
//-----主函数--------//
void main(void)
{
PLL_Init();
AD_Init();
SCI_init();
DDRB=0xFF;
PORTB=0x00;
EnableInterrupts;
for(;;)
{
while(!ATD0STAT2_CCF0); // 等待转换结束while(ATDOSTAT2_CCF0==1)
while(!SCI0SR1_TDRE);
SCI0DRL=ATD0DR0L;
PORTB=ATD0DR0;
long_delay(5,60000);
}
}
作者:
a7774723
时间:
2011-9-24 14:40
我的情况和你一样
我是用B口外接LED显示的
作者:
Iiti
时间:
2012-3-6 17:38
作者:
小椰
时间:
2012-3-19 17:19
楼主,我用你的程序试了一下,也一样,现在你解决问题了吗?
作者:
_huyou
时间:
2012-3-19 18:14
:(
作者:
圣徒
时间:
2012-3-27 18:20
求解啊
作者:
736421469
时间:
2012-12-21 21:39
你是不是设置错了
ATD0CTL1=0x00; //选择AD通道为外部触发,8位精度,采样前不放电
ATD0CTL2=0x40; //标志位自动清零,禁止外部触发, 禁止中断
既然选择AD0通道外部触发却不开触发使能位
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2