Re: C18底下開BIT 討論一下
|
||||
---|---|---|---|---|
資深會員
|
尚未預設要多久中斷一次,只是討論C和組語在中斷使用上的差異,如果像你說的時間這麼短的情況之下就另當別論,
只是不太清楚你用組語跟C在中斷時有差很多嗎? 當然背景儲存都一定是會跑的! 另外您的應用有需要這麼緊湊嗎?扣掉儲存的及其它還有取回儲存的數據,應該也都很趕吧!
發表於: 2010/1/15 12:58
|
|||
不怕苦...苦半輩子;怕苦...苦一輩子
|
||||
|
Re: C18底下開BIT 討論一下
|
||||
---|---|---|---|---|
資深會員
|
參照:
這個方式會更慘 因為變成TIMER1每8us就進一次中斷 8us/0.25us=32個指令 你打算中斷做爆他,還是主程式一直被中斷,主程式打死不能關中斷喔
發表於: 2010/1/15 12:02
|
|||
My name is jan,Jan是棒的
|
||||
|
Re: C18底下開BIT 討論一下
|
||||
---|---|---|---|---|
資深會員
|
做一個假設,提出討論,如有跟您的方式不同,
請別介意 void interrupt TIMER1_ISR(void) { cnt++; if(cnt==16) FLAG.TMR1_16=1; TMR1IF=0; } int main(void) { . . . while(1) { if(FLAG.TMR1_16) { do your wrok...; FLAG.TMR1=0; } } } 應該沒有幾個指令ㄚ
發表於: 2010/1/15 11:24
|
|||
不怕苦...苦半輩子;怕苦...苦一輩子
|
||||
|
Re: C18底下開BIT 討論一下
|
||||
---|---|---|---|---|
資深會員
|
阿 說明一下 我是在MPLAB底下用MCC18在組譯
就那個MICROCHIP C18 順帶一提 HI-TECH 的C及組語開發環境會比較好用嗎? 說個題外話 我目前的案子需要用到外部中斷 外部的CLOCK約125K HZ 但是需要計數 16次之後才會進中斷 也就是中斷時間,大約 1/125K HZ*16約等於128us 我目前OSC使用16M HZ 也就是一個指令時間為0.25us 用組語跑中斷 沒有發生過來不及的情形 但是用C跑卻跑的2266一直沒辦法正確處理 所以只好放棄C的開發方式
發表於: 2010/1/15 10:29
|
|||
My name is jan,Jan是棒的
|
||||
|
Re: C18底下開BIT 討論一下
|
||||
---|---|---|---|---|
資深會員
|
union {
unsigned char var; struct{ unsigned int bit0 : 1; unsigned int : 6; //padding unsigned int bit7 : 1; } bits; } uvar; 現在你可以看到: uvar.var 8 bits 的變數 uvar.bits.bit7 僅僅bit 7 的位元 從Hi-Tech_PICC_Workshop摘錄的..... 看來foxjan的宣告方式不大對喔! 看看這樣行不行... union { unsigned char FLAG; struct { unsigned 0_BIT:1; unsigned 1_BIT:1; unsigned 2_BIT:1; unsigned 3_BIT:1; unsigned 4_BIT:1; unsigned 5_BIT:1; }FLAG_BIT; }uFLAG;
發表於: 2010/1/15 10:22
|
|||
不怕苦...苦半輩子;怕苦...苦一輩子
|
||||
|
Re: C18底下開BIT 討論一下
|
||||
---|---|---|---|---|
版主
|
位元結構是標準 C 的用法,這是一定要知道的。建議你參考一下W401 C18 教材裡的第四章後面的說明,那裏有 指標、陣列,struct & union 的說明與用法。
http://www.microchip.com.tw/modules/w ... glefile.php?cid=4&lid=236 FLAG 與 FLAG_BIT 當然不一樣,至少英文字數就不一樣了。FLAG_BIT 是屬於結構變數他無法單獨使用必須與期結構位元一起使用的。 例 : FLAG_BIT.0_BIT = 1 ;
發表於: 2010/1/15 10:14
|
|||
|
C18底下開BIT 討論一下
|
||||
---|---|---|---|---|
資深會員
|
又是sturt 又是union的 被搞死了
最後參考IO.H檔 開出的方式如下 unsigned char FLAG; union { struct { unsigned 0_BIT:1; unsigned 1_BIT:1; unsigned 2_BIT:1; unsigned 3_BIT:1; unsigned 4_BIT:1; unsigned 5_BIT:1; }; }FLAG_BIT; .....組譯過了 但是程式怪怪的 最後再FILE REGISTERS一看 FLAG跟FLAG_BIT不是同一個位置 ,那我是設爽的嗎 有什麼標準格式嗎? 因為目前跑C的話,中斷來不及反應,所以改用組語寫了 但是還是想跟大家討論看看解決方式
發表於: 2010/1/15 9:50
|
|||
My name is jan,Jan是棒的
|
||||
|