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

論壇索引


Board index » All Posts (ventrox)




Re: PIC18F4580 如何使用 3 個 interrupt
#1
初級會員
初級會員


問題解決了
謝謝!

發表於: 2009/1/16 16:32
頂部


Re: PIC18F4580 如何使用 3 個 interrupt
#2
初級會員
初級會員


謝謝回應

所以,請問一下
意思就是只有一個 low interrupt 的 subroutine
只是在這個 subroutine 加上一個判斷是哪一種中斷的意思嗎?

再次謝謝

發表於: 2009/1/16 15:09
頂部


PIC18F4580 如何使用 3 個 interrupt
#3
初級會員
初級會員


各位好

我用的是 PIC18F4580 的晶片。目前遇到一個問題就是希望可以同時使用 3 個 interrupt,其中兩個是從 timer1 和 timer2 來的 interrupt, 另一個是 USART 的 interrupt

我目前需要用到兩個 timer (timer 1 和 timer 2) 且每隔一段時間個別會有 interrupt 發生

之前寫法就是設定其中一個為 high priority (timer2) 另一個設定成 low priority (timer1)

main 裡面的設定為

IPR1bits.TMR1IP = 0; //設定為低優先中斷
IPR1bits.TMR2IP = 1; //設定為高優先中斷

RCONbits.IPEN=1; // 開啟中斷優先功能
INTCONbits.GIEL = 1; // 開啟低優先中斷功能
INTCONbits.GIEH = 1; // 開啟高優先中斷功能


其中 timer 1 的 interrupt 設定如:


#pragma code low_vector=0x18
void low_interrupt (void)
{
_asm GOTO timer1_isr _endasm
}
#pragma code

#pragma interruptlow timer1_isr



timer2 的 interrupt 設定如下:


#pragma code high_vector=0x08
void high_interrupt (void)
{
_asm GOTO timer2_isr _endasm
}
#pragma code

#pragma interrupt timer2_isr


timer1_isr 為timer 1 發生中斷時的 Subroutine, timer2_isr 為 timer2 發生中斷時的 subroutine

問題來了
現在我需要加上 USART 的功能
以前參考範例程式的部份,USART 也會利用 interrupt 來驅動 USART 的讀寫

我問題是

我要如何設定讓這三個 interrupt 同時存在且可以個別指定到所要的 subroutine?

我目前的作法是在 main 增加一行


IPR1bits.TMR1IP = 0; //設定為低優先中斷
IPR1bits.TMR2IP = 1; //設定為高優先中斷

IPR1bits.RCIP = 0; //設定為低優先中斷


RCONbits.IPEN=1; // 開啟中斷優先功能
INTCONbits.GIEL = 1; // 開啟低優先中斷功能
INTCONbits.GIEH = 1; // 開啟高優先中斷功能


且另外定義/設定了 USART 的中斷 priority

#pragma code low_vector=0x18
void low_interrupt_usart (void)
{
_asm GOTO Rx_isr _endasm
}
#pragma code

#pragma interruptlow Rx_isr


Rx_isr 為我USART收到東西後的Subroutine

目前遇到的問題是
要是這樣寫的話,他只會一直在 Rx_isr subroutine 裡面跑,並不會跳到 timer1_isr timer2_isr 兩個 subroutine

請問各位,我要怎麼解決這樣的問題
或是我要怎麼能夠用 3 個 interrupt 同時存在?

謝謝各位看完這篇文章

發表於: 2009/1/16 12:15
頂部


如何使用 Program Memory 當作 Data Memory?
#4
初級會員
初級會員


大家好
想請教一下
我這邊用的是 PIC18F4580

現在遇到一個問題
就是我在一開始宣告我的變數
都是存在我的 Data Memory
可是 Data Memory 比 Program Memory 小很多
所以我現在的 Data Memory 已經滿了
如果多一個變數,在 build 的時候會有error
就是 memory 已經滿的 error 出現

我印象中之前去上課有聽過可以拿 program memory 來代替我的 data memory ,讓我在宣告變數的時候可以有更大的空間可使用

印象中好像在宣告變數的前面加一個 static

e.g.

原本是
int temp;
double temp2;

改寫成
static int temp;
static double temp2;

就會存到我的 program memory
可是我怎麼試就是沒有辦法
所以應該是我記錯怎麼做

能不能麻煩知道的人告訴我一下?
我用的是 C18 Compiler

謝謝各位

發表於: 2008/12/8 23:55
頂部


Re: 想請教一下關於 CAN BUS 的一些問題
#5
初級會員
初級會員


你好
A 拿掉的話 B 會傳送
我已經確認過了
不知道有沒有什麼 priority 的問題

還是要設定什麼東西?

會不會就是 A 一直在搶 B 發送的

請問你說的 TXERR Count 和 Bus Off 是什麼東西?

謝謝

發表於: 2008/12/8 23:46
頂部


想請教一下關於 CAN BUS 的一些問題
#6
初級會員
初級會員


各位大家好

我這邊用的是 PIC18F4580 的微處理器
我的 CAN BUS 溝通模組是 ok

我現在所需要的是
我在這個 bus 上面有很多個 PIC (大於8個)

我所需要的是,希望不同的 pic 可以丟資料
我現在遇到的問題就是
我設定其中一個(假設 pic A)丟某個消息
另一個 pic (pic B) 在丟另一筆資料

可是我在觀察的時候
感覺好像只有其中一個 pic (pic A)
有在傳送
pic B 並沒有任何的訊息送出去

我知道 CAN BUS 的 BUS 上面只能同時一個在丟
其他都要等待
不過怎麼感覺好像只有 pic A 在丟
pic B 並沒有等到可以丟東西的時候?

謝謝回答

發表於: 2008/12/8 14:00
頂部


Re: 如何同時使用兩組 ADC ?
#7
初級會員
初級會員


請問一下
所以這樣的意思是

如果我給他的電壓 VDD/VSS 是 +5V/0V

我沒有辦法讓我的 Vref- 是負的嗎?

謝謝回答

發表於: 2008/11/24 14:21
頂部


Re: 如何同時使用兩組 ADC ?
#8
初級會員
初級會員


了解
謝謝你

另外,如果我想要設定我的 Vref+ (AN3) 和 Vref- (AN2)

可以問一下 Vref+/Vref- 的最大電壓可以給多少?

發表於: 2008/11/18 17:35
頂部


如何同時使用兩組 ADC ?
#9
初級會員
初級會員


各位好
我這邊需要同時用到兩個 AD
例如: AN0, AN1

我的程式簡單來說是如以下:

void main (void)
{

PORTD = 0x00;
TRISD = 0;

ADCON0=0x01; // 選擇AN0通道轉換,開啟ADC模組
ADCON1=0x0E; // 使用VDD,VSS為參考電壓,設定AN0為類比輸入
ADCON2=0x3A; // 結果向左靠齊並設定轉換時間為Fosc/32,採樣時間為20TAD




while(1)
{
Delay10TCYx(5); //時間延遲以完成採樣
ConvertADC() ; //進行訊號轉換
while(BusyADC()); //等待轉換完成


adcvalue = ReadADC()>>6;
delay_ms(1000);
}
}

我以上程式是設定可以讓 AN0 當作我的 analog input
然後武可以直接去讀他的值是多少

如果我現在希望可以把
AN0 和 AN1 兩支腳 的值都讀進來
要如何去寫?

可以直接改我的 ADCON1 讓 AN0 和 AN1 的腳都是 analog
可是這樣
我用 ReadADC 它會讀到的資料是什麼

那我 ADCON0 該如何設定?

謝謝回答!

edit: 我希望可以在同一個時間讀/存這兩支腳的value

發表於: 2008/11/18 14:53

Edited by ventrox on 2008年11月18日 15:24:58
頂部


請問如何設定CAN BUS 的 BaudRate?
#10
初級會員
初級會員


請問一下
我這邊用的是 PIC18F4580 晶片
我需要讓兩個PIC互相溝通
其中一個的 Fosc = 10Mhz
另一個 Fosc = 40Mhz

我用的是 AN738 的設定
裡面有一項是在設定 baud rate

void CANInitialize( BYTE SJW,
BYTE BRP,
BYTE PHSEG1,
BYTE PHSEG2,
BYTE PROPSEG,
enum CAN_CONFIG_FLAGS config);

我對於這幾個參數 SJW, BRP, PHSEG1, PHSEG2, PROPSEG 實在不知道要怎麼計算或如何去設定這些參數讓 baud rate 是一樣的

有沒有人可以告訴我的?
謝謝

發表於: 2008/9/29 17:39
頂部



(1) 2 3 4 »



:::

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... ]

教育訓練中心

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