2010年12月2日木曜日

TIMER0による割り込み-PIC18F2550


RC0ポートに繋がっているLEDは通常の処理で点滅、
RC1ポートに繋がっているLEDは割り込みが発生する度に点滅

  1. /* 
  2. 概要:タイマ0を使った割り込みを使ってみる 
  3.  
  4. HID - Bootloaderを使った書き込み 
  5.  
  6. マイコン:PIC18F2550 
  7.  
  8. ファイル名:nain.c 
  9.  
  10. 開発環境:MPLAB C18 
  11.  
  12. */  
  13.   
  14. #include <p18f2550.h>  
  15. #include <delays.h>  
  16. #include <timers.h>  
  17. void high_isr (void);  
  18. void low_isr (void);  
  19.   
  20. // リセットベクタ    
  21. #pragma code reset_vector=0x1000  
  22. extern void _startup(void);  
  23. void remapped_reset(void) {   
  24.  _asm goto   
  25.   _startup   
  26.  _endasm  
  27. }  
  28.   
  29. #pragma code  
  30.   
  31. // 高優先割込み関連の記述 ====  
  32. #pragma code high_vector=0x1008  
  33. void high_interrupt (void) {  
  34.  _asm  
  35.   GOTO high_isr  
  36.  _endasm  
  37. }  
  38. #pragma code  
  39.   
  40. #pragma interrupt high_isr  
  41. void high_isr (void) {  
  42. /* ここに高優先割込み処理を記述する */  
  43.  INTCONbits.TMR0IF = 0;  // タイマ0割り込みフラグを0にする  
  44.     WriteTimer0(18660);   
  45.     LATCbits.LATC1 = !LATCbits.LATC1;//RC1のLED点滅点<->灯点滅                                   
  46.   
  47. }  
  48.   
  49. // 低優先割込み関連の記述 ====  
  50. #pragma code low_vector=0x1018  
  51. void low_interrupt (void) {  
  52.  _asm  
  53.   GOTO low_isr  
  54.  _endasm  
  55. }  
  56. #pragma code  
  57.   
  58. #pragma interruptlow low_isr  
  59. void low_isr (void) {  
  60. /* ここに低優先割込み処理を記述する */  
  61.   
  62.       
  63. }  
  64.   
  65. void main(void) {  
  66.         TRISC=0;            // ポートCをすべて出力ピンにする  
  67.   
  68.         OpenTimer0(  
  69.    TIMER_INT_ON &  //割込み:ON  
  70.    T0_16BIT &      //16 bit モードに設定  vs  8bit モード( T0_8BIT )  
  71.    T0_SOURCE_INT & //内部クロック使用  
  72.    T0_PS_1_128     //128ビットプリスケーラ  1/8 vs 1/1 1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256   
  73.         );  
  74.           
  75.   WriteTimer0(18660);//48MHzで0.5s  
  76.     
  77.   RCONbits.IPEN = 0;      //割込み優先順位制御:OFF (RCON レジスタのIPENビット = 0)  
  78.   INTCONbits.TMR0IE = 1;  //タイマ0割込み許可  
  79.   INTCONbits.PEIE = 1;    //周辺割込み許可   
  80.                           //INTCONレジスタの b6ビット : 低位割込み許可/禁止(割り込み優先順位制御     有りの場合)    
  81.   INTCONbits.GIE = 1;     //全割込み許可  
  82.                           //INTCONレジスタの b7ビット : 高位割込み許可/禁止(割り込み優先順位制御  有りの場合)  
  83.         while(1)  
  84.         {                       //通常の処理  
  85.            
  86.          PORTCbits.RC0=1;  //RC0ポートのLED点滅          
  87.          Delay10KTCYx(0);  //0=>256 48MHzで213.3 ms  
  88.          PORTCbits.RC0=0;  
  89.          Delay10KTCYx(0);  
  90.         }  
  91. }  

0 件のコメント:

コメントを投稿