<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x
    查看: 10591|回復: 1
    打印 上一主題 下一主題

    [提問] ICL7135采樣問題

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2014-4-4 14:57:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    關鍵詞: STC , ICL7135 , AD采樣
    想用ICL7135采集電壓,單獨控制AD的時候程序沒有問題,但是程序聯調的時候就不正確了,在>2V輸入時,單片機的計數器無法計數到20000,目前最慘的時候只有5000左右,聯調的時候,低電壓的計數倒是沒有問題,這是怎么回事?編譯用的是KEIL。

    以下是AD部分代碼,AD的時鐘由T0定時器提供,控制用的是查詢模式,用中斷模式會莫名的丟失T1計數器的計數值,這點我也一直沒想明白。MCU用的是STC12C5A60S2,輸入晶振為8MHz,AD時鐘為1MHz,下面的程序系統時鐘是2MHz,但去掉時鐘分頻,讓單片機跑到8MHz,AD跑1MHz時,計數器的計數值始終是0...
    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          {
                     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)

    沙發
    發表于 2015-1-31 18:52:19 | 只看該作者
    過來學習一下
    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷