楼主: Freescalel

请教如何编写飞思卡尔HCS08DZ16 A/D转换程序(PE)

[复制链接]

该用户从未签到

8

主题

24

帖子

0

新手上路

Rank: 1

积分
0
最后登录
1970-1-1
发表于 2011-7-17 16:10:20 | 显示全部楼层 |阅读模式
 
各位高手:
         我是个codewarrior(DZ16)的初学者,这几天在学习A/D转换(利用PE),但是一头雾水,从采样参考电压到PE中的函数都不懂,希望有人能给我一段注释详细的参考程序,我没有积分,只能以努力学习来表示感谢,谢谢!
         
回复

使用道具 举报

该用户从未签到

27

主题

418

帖子

0

新手上路

Rank: 1

积分
228
最后登录
1970-1-1
发表于 2011-7-17 17:41:56 | 显示全部楼层

RE:请教如何编写飞思卡尔HCS08DZ16 A/D转换程序(PE)

坛子里就有,搜一下吧,freescale官网上也有

该用户从未签到

8

主题

24

帖子

0

新手上路

Rank: 1

积分
0
最后登录
1970-1-1
 楼主| 发表于 2011-7-17 20:28:46 | 显示全部楼层

回复:请教如何编写飞思卡尔HCS08DZ16 A/D转换程序(PE)

回复第 2 楼 Garfield于2011-07-17 09:41:56发表:
坛子里就有,搜一下吧,freescale官网上也有 

谢谢,我才注册的,还不太不熟悉这里,您能说的详细一点吗?
#include "Cpu.h"
#include "Events.h"
#define Vrefh 3
#define Vrefl 0
extern bool ValuesAvailable;
extern word Values[1];
char Value_H;
char Value_L;
long int Value;
float Voltage1;
void AD1_OnEnd(void)
{
  /* Write your code here ... */
   #define Vrefh 3
 #define Vrefl 0
  extern word Values[1];
 char Value_H;
 char  Value_L;
  int Value;
 AD1_GetValue16(Values); // Get AD conversion results
 Value_H=ADCRH;
 Value_L=ADCRL;
 Value=(int)Value_H*256;
 Value=(int)Value_L+Value;
 Voltage1=((Value*(Vrefh-Vrefl))/255);
}
这是我编的程序,可是采集不到电压,总是0v。能不能给我指点一下谢谢!

该用户从未签到

65

主题

204

帖子

0

中级会员

Rank: 3Rank: 3

积分
270
最后登录
1970-1-1
发表于 2011-7-17 23:04:44 | 显示全部楼层

回复:请教如何编写飞思卡尔HCS08DZ16 A/D转换程序(PE)

回复第 3 楼 Freescalel于2011-07-17 12:28:46发表:
回复第 2 楼 Garfield于2011-07-17 09:41:56发表:
坛子里就有,搜一下吧,freescale官网上也有 

谢谢,我才注册的,还不太不熟悉这里,您能说的详细一点吗?
#include "Cpu.h"
#include "Events.h"
#define Vrefh 3
#define Vrefl 0
extern bool ValuesAvailable;
extern word Values[1];
char Value_H;
char Value_L;
long int Value;
float Voltage1;
void AD1_OnEnd(void)
{
  /* Write your code here ... */
   #define Vrefh 3
 #define Vrefl 0
  extern word Values[1];
 char Value_H;
 char  Value_L;
  int Value;
 AD1_GetValue16(Values); // Get AD conversion results
 Value_H=ADCRH;
 Value_L=ADCRL;
 Value=(int)Value_H*256;
 Value=(int)Value_L+Value;
 Voltage1=((Value*(Vrefh-Vrefl))/255);
}
这是我编的程序,可是采集不到电压,总是0v。能不能给我指点一下谢谢!
 

 
#include "EnDisInt.h"       /*    中断及通用头文件    */
/*********************************************************************************************************
函数:      ADCinit
说明:      A/D转换初始化,设置A/D转换时钟频率为1MHz
局部变量:  无
全局变量:  无
调用:      无    
被调用:    主函数
其他:      无
**********************************************************************************************************/
void ADCinit(void)     //0011 0100      选择总线时钟,右对齐模式
{
    ADCLK = 0b00110100;    
 
}
/*********************************************************************************************************
函数:      ADCave
说明:      1路A/D转换函数(均值滤波)
功能:      通道channel进行n次中值滤波,求和再作均值,得出均值滤波结果并返回该通道均值滤波后的A/D转换结果 
局部变量:  i,j
全局变量:  无
参数:      channel = 通道号,n = 中值滤波次数                                
调用:      ADCmid 
被调用:    主函数
其他:    
**********************************************************************************************************/
INT16U ADCave(INT8U channel,INT8U n)
{
    INT8U  i=0;
    INT16U j=0;
    for (i=0; i j)
    {
        tmp = i;
        i   = j;
        j   = tmp;
    }
    if (k > i)
    {
        if (k > j)
        {
            tmp = j;
        }
        else
        {
            tmp = k;
        }
    }
    else
    {
        tmp = i;
    }
    return tmp;
}
/*********************************************************************************************************
函数:      ADCvalue
说明:      1路A/D转换函数
功能:      获取通道channel的A/D转换结果,并返回该通道的A/D转换结果  
局部变量:  tmp,tmp1
全局变量:  无
参数:      channel = 通道号                            
调用:       
被调用:    ADCmid
其他:    
**********************************************************************************************************/

INT16U ADCvalue(INT8U channel)
{
   INT16U tmp=0;
   INT16U tmp1=0;
   channel &= 0b00011111;        //取通道号变量的低五位(实际通道号)
   ADSCR=0x20;                   //取高三位为001
   tmp = ADSCR & 0b11100000;     //取ADSCR的高三位(取上电复位默认值000)
   ADSCR = tmp | channel;        //合并上述8位
   while ((ADSCR & (1
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-7-18 08:49:52 | 显示全部楼层

    RE:请教如何编写飞思卡尔HCS08DZ16 A/D转换程序(PE)

    AD使用流程:
    1、初始化AD引脚,要注意选择正确的AD引脚
    2、循环采集或者中断采集AD引脚电压
    初始化流程:
    1、关闭AD
    2、选择AD引脚、采集方式
    3、选择AD时钟
    4、开启AD采集,选择是中断还是非中断
    该会员没有填写今日想说内容.
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

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

    RE:请教如何编写飞思卡尔HCS08DZ16 A/D转换程序(PE)

    AD使用流程:
    1、初始化AD引脚,要注意选择正确的AD引脚
    2、循环采集或者中断采集AD引脚电压
    初始化流程:
    1、关闭AD
    2、选择AD引脚、采集方式
    3、选择AD时钟
    4、开启AD采集,选择是中断还是非中断
    该会员没有填写今日想说内容.

    该用户从未签到

    8

    主题

    24

    帖子

    0

    新手上路

    Rank: 1

    积分
    0
    最后登录
    1970-1-1
     楼主| 发表于 2011-7-18 08:57:42 | 显示全部楼层

    回复:请教如何编写飞思卡尔HCS08DZ16 A/D转换程序(PE)

    <div style="border-bottom: #ccc 1px dashed; border-left: #ccc 1px dashed; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px dashed; border-right: #ccc 1px dashed; padding-top: 5px">回复第 4 楼 低叹生活于2011-07-17 15:04:44发表:
    回复第 3 楼 Freescalel于2011-07-17 12:28:46发表:
    回复第 2 楼 Garfield于2011-07-17 09:41:56发表:
    坛子里就有,搜一下吧,freescale官网上也有 

    谢谢,我才注册的,还不太不熟悉这里,您能说的详细一点吗?
    #include "Cpu.h"
    #include "Events.h"
    #define Vrefh 3
    #define Vrefl 0
    extern bool ValuesAvailable;
    extern word Values[1];
    char Value_H;
    char Value_L;
    long int Value;
    float Voltage1;
    void AD1_OnEnd(void)
    {
      /* Write your code here ... */
       #define Vrefh 3
     #define Vrefl 0
      extern word Values[1];
     char Value_H;
     char  Value_L;
      int Value;
     AD1_GetValue16(Values); // Get AD conversion results
     Value_H=ADCRH;
     Value_L=ADCRL;
     Value=(int)Value_H*256;
     Value=(int)Value_L+Value;
     Voltage1=((Value*(Vrefh-Vrefl))/255);
    }
    这是我编的程序,可是采集不到电压,总是0v。能不能给我指点一下谢谢!
     

     
    #include "EnDisInt.h"       /*    中断及通用头文件    */
    /*********************************************************************************************************
    函数:      ADCinit
    说明:      A/D转换初始化,设置A/D转换时钟频率为1MHz
    局部变量:  无
    全局变量:  无
    调用:      无    
    被调用:    主函数
    其他:      无
    **********************************************************************************************************/
    void ADCinit(void)     //0011 0100      选择总线时钟,右对齐模式
    {
        ADCLK = 0b00110100;    
     
    }
    /*********************************************************************************************************
    函数:      ADCave
    说明:      1路A/D转换函数(均值滤波)
    功能:      通道channel进行n次中值滤波,求和再作均值,得出均值滤波结果并返回该通道均值滤波后的A/D转换结果 
    局部变量:  i,j
    全局变量:  无
    参数:      channel = 通道号,n = 中值滤波次数                                
    调用:      ADCmid 
    被调用:    主函数
    其他:    
    **********************************************************************************************************/
    INT16U ADCave(INT8U channel,INT8U n)
    {
        INT8U  i=0;
        INT16U j=0;
        for (i=0; i j)
        {
            tmp = i;
            i   = j;
            j   = tmp;
        }
        if (k > i)
        {
            if (k > j)
            {
                tmp = j;
            }
            else
            {
                tmp = k;
            }
        }
        else
        {
            tmp = i;
        }
        return tmp;
    }
    /*********************************************************************************************************
    函数:      ADCvalue
    说明:      1路A/D转换函数
    功能:      获取通道channel的A/D转换结果,并返回该通道的A/D转换结果  
    局部变量:  tmp,tmp1
    全局变量:  无
    参数:      channel = 通道号                            
    调用:       
    被调用:    ADCmid
    其他:    
    **********************************************************************************************************/

    INT16U ADCvalue(INT8U channel)
    {
       INT16U tmp=0;
       INT16U tmp1=0;
       channel &= 0b00011111;        //取通道号变量的低五位(实际通道号)
       ADSCR=0x20;                   //取高三位为001
       tmp = ADSCR & 0b11100000;     //取ADSCR的高三位(取上电复位默认值000)
       ADSCR = tmp | channel;        //合并上述8位
       while ((ADSCR & (1

    该用户从未签到

    8

    主题

    24

    帖子

    0

    新手上路

    Rank: 1

    积分
    0
    最后登录
    1970-1-1
     楼主| 发表于 2011-7-18 09:10:19 | 显示全部楼层

    回复:请教如何编写飞思卡尔HCS08DZ16 A/D转换程序(PE)

    回复第 6 楼 安于2011-07-18 00:57:33发表:
    AD使用流程:
    1、初始化AD引脚,要注意选择正确的AD引脚
    2、循环采集或者中断采集AD引脚电压
    初始化流程:
    1、关闭AD
    2、选择AD引脚、采集方式
    3、选择AD时钟
    4、开启AD采集,选择是中断还是非中断
     

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

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

    RE:请教如何编写飞思卡尔HCS08DZ16 A/D转换程序(PE)

    需要慢慢熟悉,最好能够找一本书,你可以参考DZ60的书。
    该会员没有填写今日想说内容.

    该用户从未签到

    1

    主题

    14

    帖子

    0

    注册会员

    Rank: 2

    积分
    50
    最后登录
    1970-1-1
    发表于 2014-8-25 17:32:47 | 显示全部楼层

    回复:请教如何编写飞思卡尔HCS08DZ16 A/D转换程序(PE)

    <div style="padding:5px;border:1px dashed #ccc;">回复第 7 楼 于2011-07-18 08:57:42发表:
    <div style="border-bottom: #ccc 1px dashed; border-left: #ccc 1px dashed; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top: #ccc 1px dashed; border-right: #ccc 1px dashed; padding-top: 5px">回复第 4 楼 低叹生活于2011-07-17 15:04:44发表:
    回复第 3 楼 Freescalel于2011-07-17 12:28:46发表:
    回复第 2 楼 Garfield于2011-07-17 09:41:56发表:
    坛子里就有,搜一下吧,freescale官网上也有 

    谢谢,我才注册的,还不太不熟悉这里,您能说的详细一点吗?
    #include "Cpu.h"
    #include "Events.h"
    #define Vrefh 3
    #define Vrefl 0
    extern bool ValuesAvailable;
    extern word Values[1];
    char Value_H;
    char Value_L;
    long int Value;
    float Voltage1;
    void AD1_OnEnd(void)
    {
      /* Write your code here ... */
       #define Vrefh 3
     #define Vrefl 0
      extern word Values[1];
     char Value_H;
     char  Value_L;
      int Value;
     AD1_GetValue16(Values); // Get AD conversion results
     Value_H=ADCRH;
     Value_L=ADCRL;
     Value=(int)Value_H*256;
     Value=(int)Value_L+Value;
     Voltage1=((Value*(Vrefh-Vrefl))/255);
    }
    这是我编的程序,可是采集不到电压,总是0v。能不能给我指点一下谢谢!
     

     
    #include "EnDisInt.h"       /*    中断及通用头文件    */
    /*********************************************************************************************************
    函数:      ADCinit
    说明:      A/D转换初始化,设置A/D转换时钟频率为1MHz
    局部变量:  无
    全局变量:  无
    调用:      无    
    被调用:    主函数
    其他:      无
    **********************************************************************************************************/
    void ADCinit(void)     //0011 0100      选择总线时钟,右对齐模式
    {
        ADCLK = 0b00110100;    
     
    }
    /*********************************************************************************************************
    函数:      ADCave
    说明:      1路A/D转换函数(均值滤波)
    功能:      通道channel进行n次中值滤波,求和再作均值,得出均值滤波结果并返回该通道均值滤波后的A/D转换结果 
    局部变量:  i,j
    全局变量:  无
    参数:      channel = 通道号,n = 中值滤波次数                                
    调用:      ADCmid 
    被调用:    主函数
    其他:    
    **********************************************************************************************************/
    INT16U ADCave(INT8U channel,INT8U n)
    {
        INT8U  i=0;
        INT16U j=0;
        for (i=0; i j)
        {
            tmp = i;
            i   = j;
            j   = tmp;
        }
        if (k > i)
        {
            if (k > j)
            {
                tmp = j;
            }
            else
            {
                tmp = k;
            }
        }
        else
        {
            tmp = i;
        }
        return tmp;
    }
    /*********************************************************************************************************
    函数:      ADCvalue
    说明:      1路A/D转换函数
    功能:      获取通道channel的A/D转换结果,并返回该通道的A/D转换结果  
    局部变量:  tmp,tmp1
    全局变量:  无
    参数:      channel = 通道号                            
    调用:       
    被调用:    ADCmid
    其他:    
    **********************************************************************************************************/

    INT16U ADCvalue(INT8U channel)
    {
       INT16U tmp=0;
       INT16U tmp1=0;
       channel &= 0b00011111;        //取通道号变量的低五位(实际通道号)
       ADSCR=0x20;                   //取高三位为001
       tmp = ADSCR & 0b11100000;     //取ADSCR的高三位(取上电复位默认值000)
       ADSCR = tmp | channel;        //合并上述8位
       while ((ADSCR & (1
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-3 01:10 , Processed in 0.098691 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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