查看: 3213|回复: 2

[S12] MC9S12Xhz512 ATD问题

[复制链接]

该用户从未签到

7

主题

55

帖子

0

新手上路

Rank: 1

积分
82
最后登录
1970-1-1
发表于 2011-7-5 18:27:11 | 显示全部楼层 |阅读模式
其中ATD转换函数采用王宜怀、刘晓升老师编著的《嵌入式系统---使用HCS12微控制器的设计与应用》一书中的程序,我个人所用的芯片为MC9S12XHZ512单片机,所用外部晶振为14.7456Mhz,总线时钟为14.7456*2,只不过将通道0改为了通道8转换,AD初始化模块改为了如下:
void ADCInit(void)
{
    ATDCTL0=0x00;
   
    ATDCTL1=0x8F;
    //ATDCTL2.ADPU = 1为打开转换电源开关
    //ATDCTL2.AFFC = 1为A/D转换CCF自动清0位
    ATDCTL2 = 0xC0;
    //ATDCTL3.S1C = 1表示序列长度为1
    //ATDCTL3.FIFO = 0为非FIFO模式
    //ATDCTL3.FRZ0~FRZ1 = 11表示冻结模式进入BDM
    ATDCTL3 = 0x0B;
    //ATDCTL4.PRS4~PRS0 = 01110表示总线频率30分频14.7456*2/30=0.98304MHz
    ATDCTL4 = 0x0E;
    //ATDCTL4.SRES8 = 0表示10位转换精度
    ATDCTL4 &= 0x7F;
}
 
//ADCvalue:1路10位A/D转换函数----------------------------------------------*
//功  能:获取通道channel的10位A/D转换结果                                  *
//参  数:channel=通道号(0~15)                                              *
//返  回:该通道的A/D转换结果(0~1023)                                       *
//-------------------------------------------------------------------------*
INT16U ADCvalue(INT8U channel)
{
    INT16U temp;  //暂存A/D转换的结果
 //ATDCTL5.DJM = 0,结果寄存器数据采用左调整
 //ATDCTL5.SCAN = 1,连续转换序列
 //ATDCTL5.CC~CA = channel,启动通道转换
 ATDCTL5 = (0x20 | channel);
 //取A/D转换结果
 while (1)
 //判断ATDSTAT0的第7位是否为1
 if ((ATDSTAT0&(1>6); //对数据调整,使低十位有效
     break;
 }
 return  temp;
}
//ADCmid:1路A/D转换函数(中值滤波)------------------------------------------*
//功  能:获取通道channel中值滤波后的A/D转换结果                            *
//参  数:channel=通道号(0~15)                                              *
//返  回:该通道中值滤波后的A/D转换结果(0~1023)                             *
//内部调用函数:ADCvalue                                                    *
//-------------------------------------------------------------------------*
INT16U ADCmid(INT8U channel)
{
    INT16U i=0,j=0,k=0,tmp;
    //1.取三次A/D转换结果
    i = ADCvalue(channel);
    j = ADCvalue(channel);
    k = ADCvalue(channel);
    //2.从三次A/D转换结果中取中值
    if (i > j)
    {
        tmp = i; i = j; j = tmp;
    }
    if (k >= j)
    {
        tmp = j;
    }
    else
    {
        if (k >= i)
            tmp = k;
        else
            tmp = i;
    }
    return tmp;
}
 
//ATDave:1路A/D转换函数(均值滤波)------------------------------------------*
//功  能:对通道channel的A/D转换结果求n次平均值                             *
//参  数:n=均值滤波次数(0~255),channel=通道号(0~15)                        *
//返  回:该通道均值滤波后的A/D转换结果                                     *
//内部调用函数:ADCmid                                                      *
//-------------------------------------------------------------------------*
INT16U ADCave(INT8U n,INT8U channel)
{
    //求n次A/D转换的平均值
    INT8U i;
    INT16U j;
    if(0 == n)    n = 1;
    j = 0;
    for (i=0; i>8)+0x30);    //先发送高8位
            
         SCI_write(0xCC);
         SCI_write(0x33);
         SCI_write(0xC3);
         SCI_write(0x3C);
   
         SCI_write(0xAA);
         SCI_write(0x6F);
         SCI_write(0x00);
         SCI_write(0x20);
         SCI_write(0x00);
         SCI_write(0x80);
        
         SCI_write((INT8U)adv+0x30);         //再发送低8位
            
         SCI_write(0xCC);
         SCI_write(0x33);
         SCI_write(0xC3);
         SCI_write(0x3C);
        
       
    

                  //延迟
       // for(j=0; j
我知道答案 目前已有1人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-7-6 09:47:57 | 显示全部楼层

    RE:MC9S12Xhz512 ATD问题

    temp = ATDDR0;      //从A/D数据寄存器0中读10位数据
    这里应该是ATDDR7
    该会员没有填写今日想说内容.

    该用户从未签到

    7

    主题

    55

    帖子

    0

    新手上路

    Rank: 1

    积分
    82
    最后登录
    1970-1-1
     楼主| 发表于 2011-7-13 21:16:09 | 显示全部楼层

    回复:MC9S12Xhz512 ATD问题

    回复第 2 楼 安于2011-07-06 01:47:57发表:
    temp = ATDDR0; //从A/D数据寄存器0中读10位数据
    这里应该是ATDDR7 

    问题已解决,谢谢斑竹。
    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-26 19:10 , Processed in 0.083441 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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