智能车制作
标题:
AD结果寄存器中到底是什么啊
[打印本页]
作者:
k410533234
时间:
2010-4-11 14:56
标题:
AD结果寄存器中到底是什么啊
用如下程序测AN口一路信号,用B口读出,
为什么B口的数值时变化的呢
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
void setbusclock(void)
{
CLKSEL=0X00; //disengage PLL to system
PLLCTL_PLLON=1; //turn on PLL
SYNR=0xC5;
REFDV=0x81; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
_asm(nop); //BUS CLOCK=16M ?
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;
}
void vADInit(void)
{
ATD0CTL1=0b00000000;//8位精度
ATD0CTL2=0b01000000;//禁止外部触发,标志位快速清零,中断禁止
ATD0CTL3=0b10001000;//右对齐无符号.转换序列长度为1,No FIFO模式,Freeze模式下继续转换?
ATD0CTL4=0b00000111;//4AD采样周期,ATDClock=[BusClock*0.5]/[PRS+1] ; PRS=15, divider=32 ?
ATD0CTL5=0b00100000;//特殊通道禁止,单通道采样,扫描模式连续采样,ch AN0
ATD0DIEN=0b00000000;//禁止数字输入
}
unsigned char ReadATD()
{
byte ad=0;
while(!ATD0STAT0_SCF);
ad= ATD0DR0;
return ad;
}
void Dly_ms(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<2670;jj++); //busclk:16MHz--1ms
}
void main(void) {
setbusclock();
DDRB=0xff;
PORTB=0xf0;
vADInit();
EnableInterrupts;
for(;;)
{
PORTB=ReadATD(); //在B口显示转换值
Dly_ms(1000);
}
}
作者:
数学特好
时间:
2010-4-11 14:56
楼主,你的错误在byte ad=0; ad= ATD0DR0;中,因为ATD0DDRn为16位,而你的ad为8位,当然要出问题,由于你是设置右对齐,那么ad=ATD0DR0L就行了
作者:
k410533234
时间:
2010-4-12 09:11
回复
2#
数学特好
谢谢,改了之后,为什么接入一个信号,B口全都亮了,悬空时PB7—PB8是灭的?
作者:
justing88
时间:
2010-7-9 16:13
为什么控制寄存器3 ATD0CTL3有控制无符号输出这项啊,我看PDF怎么都没有说啊。但是我们采集到的确实有符号的。
作者:
Iiti
时间:
2012-3-10 10:26
作者:
木花@任
时间:
2012-3-28 20:17
哥,你的程序很多有问题,比如ATDCTL1是保留寄存器,出场时设定的,怎么玩?
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2