找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

单片机AD控制问题

[复制链接]
eqgyzgs 发表于 2014-4-3 17:18:01 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
想用ICL7135采集电压,单独控制AD的时候程序没有问题,但是程序联调的时候就不正确了,在>2V输入时,单片机的计数器无法计数到20000,目前最惨的时候只有5000左右,联调的时候,低电压的计数倒是没有问题,这是怎么回事?编译用的是KEIL。

一下是AD部分代码,AD的时钟由T0定时器提供,频率为1MHz,控制用的是查询模式,用中断模式会莫名的丢失T1计数器的计数值,这点我也一直没想明白。
void sys_init()
{
        /*系统时钟设置*/
        CLK_DIV = 0x02;                        //4分频 = 2MHz
        /*外设驱动时钟设置*/
        TMOD |= 0x02;
        TL0 = 0xff;
        TH0 = 0xff;                                //2分频
        AUXR |= 0xc0;                        //T0,T1工作在1T模式下
        WAKE_CLKO |= 0x01;                                 //允许T0输出时钟
        TR0 = 1;
        /*PCA软件定时器设置*/
        CCON = 0;
        CMOD = 0x09;                        //系统时钟,2MHz,CF中断使能
        CCAPM0 = 0x49;                        //PCA软件定时模式,使能中断
        /*启用P4口*/
        P4SW = 0xff;       
        /*开启总中断*/
        EA = 1;
}
/*
* ADC控制函数
*/
void ADC_init()
{
        TMOD |= 0x50;                        //16位计数器
        TL1 = 0;
        TH1 = 0;
}
void ADC_sample(uint sample_addr[],uchar sample_pol_addr[],uchar times)
{
        uchar i;
        sample_start:
        for(i=0;i<times;i++)
        {
                TL1 = 0;
                TH1 = 0;
                while(!ADC_BUSY) _nop_();
                TR1 = 1;
                while(ADC_BUSY)  _nop_();
                TR1 = 0;
                ADC_POL = 1;
                sample_pol_addr = ~ADC_POL;
                sample_addr = TH1 * 256 + TL1;
                if(sample_addr < 10001)        sample_addr = 0;
                else   sample_addr = sample_addr - 10001;                //正向积分10000个时钟,关闭定时器1个时钟
        }
}
单独调试上面这段程序和LCD显示,完全没问题!_(:з」∠)_

再付一个全程序,里面有硬件接口示意图: LCR.zip (4.73 KB, 下载次数: 1)
求大家帮我看看,这是怎么回事
 楼主| eqgyzgs 发表于 2014-4-3 17:19:41 | 显示全部楼层
忘说了,单片机是STC12C5A60S2
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-23 11:54 , Processed in 0.057563 second(s), 13 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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