AD转换很奇怪啊

[复制链接]
1703|8
 楼主| tian111 发表于 2013-6-11 10:16 | 显示全部楼层 |阅读模式
用的是SH79F083,在没有进POWER——DWON前AD很好,WDT复位后,同样初始化FSR,结果AD转换出来全是0
宋倩2010 发表于 2013-6-11 10:17 | 显示全部楼层
进入pd之前,AD关掉了没有?
 楼主| tian111 发表于 2013-6-11 10:18 | 显示全部楼层
AD在转换完成后就关闭,WDT唤醒后FSR初试化和上电一样。因为我现在出厂标定时用延时函数延时等待测量,之后用WDT唤醒延时。结果还是不行....................
宋倩2010 发表于 2013-6-11 10:21 | 显示全部楼层
程序?
 楼主| tian111 发表于 2013-6-11 10:22 | 显示全部楼层
我的程序很简单,上电初试化,POWER-DWON延时, 复位初始化同上电初始化,测AD,再休眠。中间有按键INT0中断扫描。
 楼主| tian111 发表于 2013-6-11 10:23 | 显示全部楼层
/******************************************************/
uchar ad(uchar com)
{
   ADCON = 0x00;
   if(com == bat_com)
            {ADCON = 0x00;}           //选通道
   if(com == co_com)
            {ADCON = 0x02;}
   ADCON |= 0x80;           //使能AD
   delay_ms(1);
   ADCON |= 0x01;    //开始转换
   while(ADCON&0x01)        //等待
                   {;}
   return(ADDH);
}
void main(void)
{
            initail();
            ad_initail(); //初始化
            if(first_power_on == 0xaa)
                            goto wdt_reset;                                //WDT reset
                 if(!key)
                         {
                         delay_ms(10);
                         if(!key)
                                 {
                                 clr_ee();
                                 }                        
                         }
            correct();
            alarm = 1;
            g_led = 1;
            delay_ms(20);
            alarm = 0;
            g_led = 0;
            read_data();
            work_status = monitor_status;
wdt_reset:
            first_power_on = 0xaa;
                 while(1)
                 {
                   switch(work_status)
                   {
                           case  monitor_status:
                                                               monitor();
                                                                   power_dwon();
                                                                   break;
             case  alarm_status:
                                                               alarming();
                                                                   power_dwon();
                                                                   break;
                         default:                        work_status = monitor_status;
                                                               break;
                   }
                 }
}
void initail(void)
{
//                 SP = 0x00;
//                 PSW = 0x00;           //程序状态寄存器
                 // C AC F0 RS1 RS0 OV F1 P                  

                CLKCON = 0x60;           //内部RC震荡 16M           12分频
                 //32k_spdup clks1 clks0 scmif rcon rs --
                 TCON = 0x01;         //外部中断INT0允许
                 //
                 TMOD = 0x00;                  //关闭定时器
                 //
                 TCON1 = 0x00;                  //
                 //
                 IEN0 = 0x81;                //
                 //
                 IEN1 = 0x00;                //
                 //
                 EXF0 = 0x00;                //
                 //
                 RSTSTAT = 0x00;        //
                 // WDOF - PORF LVRF CLRF WDT2 WDT1 WDT0        
                 PWMCON = 0x00;                 //PWM禁止
                 P1M0 = 0x03;                //0x03
                 P1M1 = 0xfc;                //AN0 AN1模拟输入 P1.0 P1.1           0xfc
                 P3M0 = 0x04;                //0x04
                 P3M1 = 0xfb;        //P3.2输入 Z中断使能                 0xfb
                 P4M0 = 0x00;                //0x00
                 P4M1 = 0xff;                //0xff        
                 P4M1 = 0x00;
                 P1 = 0x00;
                 P3 = 0x00;
                 P4 = 0x00;
}
chenho 发表于 2013-6-11 10:25 | 显示全部楼层
ADCH寄存器没有看到你设置,是不是这个不对啊
gongche 发表于 2013-6-11 10:26 | 显示全部楼层
超量程了吧
 楼主| tian111 发表于 2013-6-11 10:27 | 显示全部楼层
嗯,我看看,多谢啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

797

主题

8878

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部