2010年12月1日水曜日

INTポートにスイッチを付けて割り込み-高優先割込-PIC18F2550


RB2/INT2に繋がっているスイッチを押すと割り込みが発生。
割り込みでRC1のLEDを点滅させる

  1. /* 
  2. 概要:外部割込みINT2を使ってみる 
  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 <portb.h>  
  17.   
  18. void high_isr (void);  
  19. void low_isr (void);  
  20.   
  21. // リセットベクタ    
  22. #pragma code reset_vector=0x1000  
  23. extern void _startup(void);  
  24. void remapped_reset(void) {   
  25.  _asm goto   
  26.   _startup   
  27.  _endasm  
  28. }  
  29.   
  30. #pragma code  
  31.   
  32. // 高優先割込み関連の記述 ====  
  33. #pragma code high_vector=0x1008  
  34. void high_interrupt (void) {  
  35.  _asm  
  36.   GOTO high_isr  
  37.  _endasm  
  38. }  
  39. #pragma code  
  40.   
  41. #pragma interrupt high_isr  
  42. void high_isr (void) {  
  43. /* ここに高優先割込み処理を記述する */  
  44.                                    
  45.         INTCON3bits.INT2IE = 0;   //外部割込みINT2の禁止  
  46.   INTCONbits.PEIE = 0;      //低位割込み禁止  
  47.   INTCONbits.GIE = 0;       //全割込み禁止  
  48.        
  49.         INTCON3bits.INT2IF = 0;   // INT2の割込みフラグをリセット         
  50.   
  51.   LATCbits.LATC1 = !LATCbits.LATC1;//RC1のLED点滅点<->灯点滅  
  52.    
  53.         INTCON3bits.INT2IE = 1;   //外部割込みINT2の許可  
  54.   INTCONbits.PEIE = 1;      //低位割込み許可  
  55.         INTCONbits.GIE = 1;       //全割込み許可  
  56. }  
  57.   
  58. // 低優先割込み関連の記述 ====  
  59. #pragma code low_vector=0x1018  
  60. void low_interrupt (void) {  
  61.  _asm  
  62.   GOTO low_isr  
  63.  _endasm  
  64. }  
  65. #pragma code  
  66.   
  67. #pragma interruptlow low_isr  
  68. void low_isr (void) {  
  69. /* ここに低優先割込み処理を記述する */  
  70.   
  71. }  
  72.   
  73. void main(void) {  
  74.         TRISB = 0b00000100;     // B portのRB2を入力モードに その他を出力モードに設定  
  75.         TRISC=0;                // ポートCをすべて出力ピンにする  
  76.   
  77.         OpenRB2INT(PORTB_CHANGE_INT_ON &    //ポートRB2の外部割込みON  
  78.                    FALLING_EDGE_INT &       //立下りエッジでON  
  79.                    PORTB_PULLUPS_OFF        //Bポートの抵抗プルアップOFF  
  80.                                 );  
  81.         RCONbits.IPEN = 1;      //割込み優先順位制御ON  (0:優先順位制御OFF)  
  82.         INTCON3bits.INT2IP = 1; //INT2の割り込みを高位割込みにセット(0:低位割込み)  
  83.         INTCON3bits.INT2IE= 1;  //INT2割込みの許可  
  84.   INTCONbits.PEIE = 1;    //低位割込み許可  
  85.         INTCONbits.GIE = 1;     //全割込み許可  
  86.   
  87.         LATCbits.LATC1 = 1;    //電源投入でRC1のLED消灯  
  88.   
  89.         while(1)  
  90.         {                       //通常の処理  
  91.            
  92.          PORTCbits.RC0=1; //RC0ポートのLED点滅          
  93.          Delay10KTCYx(0); //0=>256 48MHzで213.3 ms  
  94.          PORTCbits.RC0=0;  
  95.          Delay10KTCYx(0);  
  96.         }  
  97. }  

0 件のコメント:

コメントを投稿