智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3430|回复: 5
打印 上一主题 下一主题

[单片机] AD结果寄存器中到底是什么啊

[复制链接]

26

主题

76

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1557

优秀会员奖章

威望
424
贡献
913
兑换币
60
注册时间
2008-10-21
在线时间
110 小时
跳转到指定楼层
1#
发表于 2010-4-11 14:56:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
用如下程序测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);     
   }
}

最佳答案

查看完整内容

楼主,你的错误在byte ad=0; ad= ATD0DR0;中,因为ATD0DDRn为16位,而你的ad为8位,当然要出问题,由于你是设置右对齐,那么ad=ATD0DR0L就行了

5

主题

26

帖子

0

精华

高级会员

Rank: 4

积分
784
威望
221
贡献
519
兑换币
6
注册时间
2010-3-5
在线时间
22 小时
2#
发表于 2010-4-11 14:56:36 | 只看该作者
楼主,你的错误在byte ad=0; ad= ATD0DR0;中,因为ATD0DDRn为16位,而你的ad为8位,当然要出问题,由于你是设置右对齐,那么ad=ATD0DR0L就行了
回复

使用道具 举报

26

主题

76

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1557

优秀会员奖章

威望
424
贡献
913
兑换币
60
注册时间
2008-10-21
在线时间
110 小时
3#
 楼主| 发表于 2010-4-12 09:11:14 | 只看该作者
回复 2# 数学特好


   谢谢,改了之后,为什么接入一个信号,B口全都亮了,悬空时PB7—PB8是灭的?
回复

使用道具 举报

19

主题

160

帖子

0

精华

高级会员

Rank: 4

积分
919
QQ
威望
487
贡献
284
兑换币
0
注册时间
2009-11-4
在线时间
74 小时
4#
发表于 2010-7-9 16:13:10 | 只看该作者
为什么控制寄存器3  ATD0CTL3有控制无符号输出这项啊,我看PDF怎么都没有说啊。但是我们采集到的确实有符号的。
回复

使用道具 举报

3

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
威望
261
贡献
67
兑换币
27
注册时间
2012-2-28
在线时间
25 小时
毕业学校
康平一中
5#
发表于 2012-3-10 10:26:37 | 只看该作者
回复

使用道具 举报

1

主题

5

帖子

0

精华

注册会员

Rank: 2

积分
138
威望
112
贡献
22
兑换币
0
注册时间
2012-3-28
在线时间
2 小时
6#
发表于 2012-3-28 20:17:34 | 只看该作者
哥,你的程序很多有问题,比如ATDCTL1是保留寄存器,出场时设定的,怎么玩?
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-20 06:37 , Processed in 0.063407 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表