|
我現(xiàn)在做的是使用兩個(gè)傳感器 一個(gè)超聲波 一個(gè)PH 程序里用到了定時(shí)器0 和定時(shí)器1 兩個(gè)傳感器給的參考例程用的都是定時(shí)器0和外部中斷0,然后我就把超聲波的定時(shí)器改成了 定時(shí)器1 外部中斷1
兩個(gè)用的都是TMOD=0X01;
我改成了 TMOD=0X11;
這是PH參考程序利用到的外部中斷
void timer0( ) interrupt 1 //定時(shí)器0工作方式1
{
TH0=(65536-2)/256; //重裝計(jì)數(shù)初值
TL0=(65536-2)%256; //重裝計(jì)數(shù)初值
CLK=!CLK; //取反
}
/*************************************************************************
主函數(shù)
**************************************************************************/
void main()
{
TMOD=0X01; //定時(shí)器中斷0
CLK=0; //脈沖信號(hào)初始值為0
TH0=(65536-2)/256; //定時(shí)時(shí)間高八位初值
TL0=(65536-2)%256; //定時(shí)時(shí)間低八位初值
EA=1; //開CPU中斷
ET0=1; //開T/C0中斷
TR0=1;
while(1) //無限循環(huán)
{
ST=0; //使采集信號(hào)為低
ST=1; //開始數(shù)據(jù)轉(zhuǎn)換
ST=0; //停止數(shù)據(jù)轉(zhuǎn)換
while(!EOC); //等待數(shù)據(jù)轉(zhuǎn)換完畢
OE=1; //允許數(shù)據(jù)輸出信號(hào)
AD0809=P1; //讀取數(shù)據(jù)
OE=0; //關(guān)閉數(shù)據(jù)輸出允許信號(hào)
if(AD0809>=251) //電壓顯示不能超過5V
AD0809=250;
date=AD0809*20; //數(shù)碼管顯示的數(shù)據(jù)值,其中20為采集數(shù)據(jù)的毫安值
xianshi(); //數(shù)碼管顯示函數(shù)
}
}
這是超聲波里用到的
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=time*1.87/100;
void main(void)
{
TMOD=0x01; //設(shè)T0為方式1,GATE=1
TH0=0;
TL0=0;
TR0=1;
Lcd_init(); //設(shè)置液晶顯示器
Clr_Scr(); //清屏
Disp_img(logo); //顯示歡迎使用本產(chǎn)品LOGO
Delaynms(12000);
Lcd_init(); //從圖形顯示狀態(tài)下返回
Lcd_Mark2();
while(1)
{
StartModule();
//計(jì)算
while(!RX); //當(dāng)RX為零時(shí)等待
TR0=1; //開啟計(jì)數(shù)
while(RX); //當(dāng)RX為1計(jì)數(shù)并等待
TR0=0; //關(guān)閉計(jì)數(shù)
Conut();
delayms(1200); //80MS
這是我把他兩個(gè)揉起來的
void main(void)
{
TMOD=0x11; //設(shè)T0為方式1,GATE=1
TH1=0;
TL1=0;
TR1=1;
CLK=0; //脈沖信號(hào)初始值為0
TH0=(65536-2)/256; //定時(shí)時(shí)間高八位初值
TL0=(65536-2)%256; //定時(shí)時(shí)間低八位初值
EA=1; //開CPU中斷
ET0=1; //開T/C0中斷
TR0=1;
Lcd_init();
Lcd_Mark2();
Lcd_Mark3();
while(1)
{
StartModule();
//計(jì)算
while(!RX); //當(dāng)RX為零時(shí)等待
TR1=1; //開啟計(jì)數(shù)
while(RX); //當(dāng)RX為1計(jì)數(shù)并等待
TR1=0; //關(guān)閉計(jì)數(shù)
Conut();
delayms(80); //80MS
ST=0; //使采集信號(hào)為低
ST=1; //開始數(shù)據(jù)轉(zhuǎn)換
ST=0; //停止數(shù)據(jù)轉(zhuǎn)換
while(!EOC); //等待數(shù)據(jù)轉(zhuǎn)換完畢
OE=1; //允許數(shù)據(jù)輸出信號(hào)
AD0809=P1; //讀取數(shù)據(jù)
OE=0; //關(guān)閉數(shù)據(jù)輸出允許信號(hào)
if(AD0809>=251) //電壓顯示不能超過5V
AD0809=250;
date=AD0809*20; //顯示的數(shù)據(jù)值,其中20為采集數(shù)據(jù)的毫安值
xianshi(); //顯示函數(shù)
}
}
/*************************************************************************
CLK振蕩信號(hào)
**************************************************************************/
void timer0( ) interrupt 1 //定時(shí)器0工作方式1
{
TH0=(65536-2)/256; //重裝計(jì)數(shù)初值
TL0=(65536-2)%256; //重裝計(jì)數(shù)初值
CLK=!CLK; //取反
}
還請(qǐng)大佬看看哪里出了問題 我現(xiàn)在如果只用超聲波的話 程序可以 如果把PH的東西都插上 數(shù)據(jù)就不能實(shí)時(shí)顯示 只能通電的一瞬間顯示然后數(shù)據(jù)就定住了
|
評(píng)分
-
查看全部評(píng)分
|