|
想用ICL7135采集電壓,單獨控制AD的時(shí)候程序沒(méi)有問(wèn)題,但是程序聯(lián)調的時(shí)候就不正確了,在>2V輸入時(shí),單片機的計數器無(wú)法計數到20000,目前最慘的時(shí)候只有5000左右,聯(lián)調的時(shí)候,低電壓的計數倒是沒(méi)有問(wèn)題,這是怎么回事?編譯用的是KEIL。
以下是AD部分代碼,AD的時(shí)鐘由T0定時(shí)器提供,控制用的是查詢(xún)模式,用中斷模式會(huì )莫名的丟失T1計數器的計數值,這點(diǎn)我也一直沒(méi)想明白。MCU用的是STC12C5A60S2,輸入晶振為8MHz,AD時(shí)鐘為1MHz,下面的程序系統時(shí)鐘是2MHz,但去掉時(shí)鐘分頻,讓單片機跑到8MHz,AD跑1MHz時(shí),計數器的計數值始終是0...
void sys_init()
{
/*系統時(shí)鐘設置*/
CLK_DIV = 0x02; //4分頻 = 2MHz
/*外設驅動(dòng)時(shí)鐘設置*/
TMOD |= 0x02;
TL0 = 0xff;
TH0 = 0xff; //2分頻
AUXR |= 0xc0; //T0,T1工作在1T模式下
WAKE_CLKO |= 0x01; //允許T0輸出時(shí)鐘
TR0 = 1;
/*PCA軟件定時(shí)器設置*/
CCON = 0;
CMOD = 0x09; //系統時(shí)鐘,2MHz,CF中斷使能
CCAPM0 = 0x49; //PCA軟件定時(shí)模式,使能中斷
/*啟用P4口*/
P4SW = 0xff;
/*開(kāi)啟總中斷*/
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個(gè)時(shí)鐘,關(guān)閉定時(shí)器1個(gè)時(shí)鐘
}
}
單獨調試上面這段程序和LCD顯示,完全沒(méi)問(wèn)題!_(:з」∠)_
再付一個(gè)全程序,里面有硬件接口示意圖:
LCR.zip
(4.73 KB)
2014-4-4 14:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 積分 -1
|
|