查看: 2516|回复: 1

[其他] 求测试有用的的DZ60的ADC例程

[复制链接]

该用户从未签到

4

主题

15

帖子

0

新手上路

Rank: 1

积分
14
最后登录
1970-1-1
发表于 2012-6-23 22:14:20 | 显示全部楼层 |阅读模式
#include  /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include "LCD.h"  
byte ad_h;//ADC转换结果的高2位
byte ad_l;//ADC转换结果的低8位
byte ch_s;//通道选择
  void MCG_Init(void){/*从FEI 转换到PEE 模式:外部晶体 = 8 MHz、总线频率 = 16 MHz*/
    SOPT1 = 0x00;     /* COP禁止, 停止模式禁止 */                                                      /*FEI模式转换成FBE模式*/
    MCGC2_BDIV = 0;   /* 总线时钟为参考时钟 */        
    MCGC2_RANGE = 1;        /* 选择为高频震荡源 */
    MCGC2_HGO = 1;          /* 外部震荡器高增益运行 */
    MCGC2_EREFS = 1;        /* 外部参考源为震荡器 */
    MCGC2_ERCLKEN = 1;      /* 外部参考时钟使能 */
    while(!MCGSC_OSCINIT);  /* 等待OSC初始化完成 */
    MCGC1_CLKS = 0x02;      /* 选择外部时钟参考源 */                                             
    MCGC1_RDIV = 0x07;      /* 参考时钟除以128 */      
    MCGC1_IREFS = 0;        /* 选择外部参考时钟 */
    while(MCGSC_IREFST);    /* 等待直到参考时钟源变成外部时钟源 */   
    while((MCGSC_CLKST)^(0x02));  /* 等待,直到选择为外部参考时钟 */               /*FBE模式转换成BLPE模式*/
    MCGC2_LP = 1;           /* 旁路模式中禁止FLL或PLL */  
    MCGC1_RDIV = 2;   /* 参考时钟除以4 */
    MCGC3_PLLS = 1;         /* 选择PLL模式   */
    MCGC3_VDIV = 4;   /* PLL的值乘以16 */
    while(!MCGSC_PLLST);    /* 等待,直到PLLS时钟源是PLL时钟 */                       /*BLPE模式转换成PBE模式*/
    MCGC2_LP = 0;   /* 旁路模式中激活FLL或PLL */         
    while(!MCGSC_LOCK);    /* 等待,直到PLL锁定 */     
    MCGC1_CLKS = 0x00;      /* PLL时钟选系统时钟 */                                               /*PBE模式转换成PEE模式*/
    while((MCGSC_CLKST)^(0x03));  /* 等待,直到确定为PLL输出 */                                                                    
    /*MCGOUT=[(晶振时钟/RDIV)*VDIV]/BDIV*/
}      
void Init_ADC(void)
{  
        ADCCFG=0x98;//低功耗模式,10位精度,ADCK=总线频率
        ADCSC2=0x00;//0x00:软件触发,比较功能禁止
        APCTL3=0x03;//通道引脚使能:ADPC16,ADPC17作为模拟信号输入
        ch_s=0;//选择0通道
        ADCSC1=0x50;//0x42:中断使能,单次转换,选择AD16,并启动了转换.
}

void main(void) {
   char b[5];
   char i=0,j;
    DisableInterrupts;

    MCG_Init();
     //SPI();
//LCD_Init();
   EnableInterrupts;
  for(;;) {
         //j=SPI_R();
         
         /* LCD_P6x8Str_zimu(0,0,"ch_s:");
    LCD_P6x8Str(48,0,ch_s/1000);
   LCD_P6x8Str(56,0,(ch_s%1000)/100);
  LCD_P6x8Str(64,0,(ch_s%100)/10);
LCD_P6x8Str(72,0,ch_s%10);*/
  
  
  
    __RESET_WATCHDOG(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}
    interrupt VectorNumber_Vadc void ADC_ISR(void)
{

        switch(ch_s)
        {
                case 0:
                        ad_h=ADCRH;
            ad_l=ADCRL;
            ADCSC1=0x60;//软件启动下一次转换,下一次转换将转换AD17通道的电压值
            break;
           case 1:
                   ad_h=ADCRH;
                   ad_l=ADCRL;
                   ADCSC1=0x50;//软件启动下一次转换,下一次转换将转换AD16通道的电压值
                   break;
           default:
                   break;
        }
        asm(nop);//在此设置一个断点,观测ad_h和ad_l的变化
       
        if(ch_s==0)
                {
                        ch_s=1;
                }
        else
                {
                        ch_s=0;
                }
       
}
  这个就是调试不出来
我知道答案 目前已有0人回答
回复

使用道具 举报

该用户从未签到

4

主题

15

帖子

0

新手上路

Rank: 1

积分
14
最后登录
1970-1-1
 楼主| 发表于 2012-6-24 09:07:05 | 显示全部楼层

回复:求测试有用的的DZ60的ADC例程

咋没人理我呀……
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-28 16:58 , Processed in 0.085826 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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