• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users






Re: AD中斷?
#10
高級會員
高級會員


查看用戶資訊
謝謝版主,上次PO的文章太亂了,那你的意思是像這樣嗎?
中斷程式:
void High_INT_SER ( void );

#pragma code High_Interrupt_Vector=0x08
void High_INT_VEC (void)
{
_asm
goto High_INT_SER
_endasm
}
#pragma code

#pragma interrupt High_INT_SER
void High_INT_SER (void)
{
if (PIR1bits.ADIF=1)
{
PIR1bits.ADIF=0;
T_ADresult= ReadADC() ;

if(T_ADresult>=200)
sw_num=sw4;
else if(T_ADresult>=110)
sw_num=sw3;
else if(T_ADresult>=85)
sw_num=sw2;
else if(T_ADresult>=70)
sw_num=sw1;
else
sw_num=nothing;
}
}



主程式:
void main (void)
{
int sw_num=nothing,T_ADresult;
initial();
AD_Initial ();
while(1)
{ ConvertADC();
while(BusyADC())//等待AD轉換完畢,觸發中斷
{
:
:
:
}
}



發表於: 2005/3/4 18:22
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: AD中斷?
#9
版主
版主


查看用戶資訊
你的 AD 轉換程序的邏輯很亂而且程序也不對。

依你的功能需求,只要在AD中斷發生後將ADIF清零,並將AD Result的值讀到一個Buffer裡,剩下的判斷部分在交給主程式裡的另外的一個函數判斷,main函數只用來啟動AD的轉換。

當然你的動作不用中斷方式處理是會比較簡單的。

發表於: 2005/3/4 15:25
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: AD中斷?
#8
高級會員
高級會員


查看用戶資訊
想麻煩各位幫我DEBUG一下,AD中斷一直觸發不了,以下是我AD中斷的程式:依照AD轉換的電壓值做燈號的變換,SW1,SW2,SW3,SW4是燈號顯示

中斷程式:
#pragma code High_Interrupt_Vector=0x08
void High_INT_VEC (void)
{
_asm
goto High_INT_SER
_endasm
}
#pragma code

#pragma interrupt High_INT_SER
void High_INT_SER (void)
{
int sw_num=nothing,T_ADresult;
if (PIR1bits.ADIF=1)
{
PIR1bits.ADIF=0;
ConvertADC ();
while ( ! BusyADC() );
T_ADresult= ReadADC() ;


if(T_ADresult>=200)
sw_num=sw4;
else if(T_ADresult>=110)
sw_num=sw3;
else if(T_ADresult>=85)
sw_num=sw2;
else if(T_ADresult>=70)
sw_num=sw1;
else
sw_num=nothing;
while(1)
{
switch ( sw_num )
{
case sw1:
PORTD=1;
SetDCPWM1(1000);
break;

case sw2:
PORTD=2;
SetDCPWM1(800);
break;

case sw3:
PORTD=4;
SetDCPWM1(500);
break;

case sw4:
PORTD=8;
SetDCPWM1(200);
break;

case nothing:
PORTD=255;
SetDCPWM1(0);
break;

default:
break;
}

}

}
}



主程式:
void main (void)
{
TRISD = 0;
OpenADC ( ADC_FOSC_2 &ADC_3ANA_0REF, ADC_CH3 & ADC_INT_ON );
PIR1bits.ADIF=0;
PIE1bits.ADIE=1;
INTCONbits.PEIE = 1;
INTCONbits.GIEH = 1;

while(1)//等待中斷
{
PIR1bits.ADIF=1;
}

}

發表於: 2005/3/2 21:26
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: AD中斷?
#7
高級會員
高級會員


查看用戶資訊
謝謝版主的回答

發表於: 2005/3/2 19:21
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: AD中斷?
#6
版主
版主


查看用戶資訊
不一定,這還要看你有沒有enable AD 的中斷位元 ADIE, 還有 GIEH 或 GIEL是否也是打開的。

ADIF位元主要是反映AD轉換完成的動作,如果有中斷致能那他就是AD中斷的旗號了。

發表於: 2005/3/2 16:55
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: AD中斷?
#5
高級會員
高級會員


查看用戶資訊
若是使用PICC可以參考右邊的 Hi-TECH C 的 Workshop 範例
若是C18也是可以參考右邊 W401 或是 APP002 的範例

發表於: 2005/3/2 9:32
人生最長久的擁有是珍惜 但是大都在失去後才發現
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: AD中斷?
#4
高級會員
高級會員


查看用戶資訊
謝謝各位的回覆,想再請問一下:在主程式裡ConvertADC(),AD轉換完成後,會使得PIR1bits.ADIF=1,以產生AD中斷
不知道這樣對不對,還是各位有沒有關於AD中斷的程式不吝惜讓我參考一下....苦惱中

發表於: 2005/3/1 22:31
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: AD中斷?
#3
管理員
管理員


查看用戶資訊
因為 AD 可以藉由 TAD 的設定來達到不同的轉換率. 以迎合各種應用下的需求. 一般而言 , 在 PIC16 & PIC18 的 ADC , 最小的 TAD = 1.6 us. 以轉換速度為 (n+2) * TAD 的公式來計算, 10 bit ADC 的最快的轉換時間為 12*1.6 = 19.2 us !

若 PIC16F877A 的頻率為 20 Mhz , 19.2 us 可以執行約 100 個指令. 若再回圈中乾等 , 則浪費 CPU 資源 . 若是下次再回來檢查 , 則效率不彰. 所以要比較有效率就要使用中斷啦 !

用中斷的代價就是比較多的旗標檢測與資源的衝突解決. 若可以不用就避免. 但要效率的話就 K 一下中斷吧 !

發表於: 2005/3/1 18:59
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: AD中斷?
#2
高級會員
高級會員


查看用戶資訊
中斷的使用是為了讓程式更有效率
因為事件一產生就會打斷目前的動作而進行所謂的中斷

就這樣

發表於: 2005/3/1 18:58
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


AD中斷?怎麼觸發中斷
#1
高級會員
高級會員


查看用戶資訊
想請問各位一個觀念:使用AD中斷和不使用中斷差別在哪裡,AD中斷有它的必要性嗎?

發表於: 2005/3/1 18:13
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------