找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3836|回復: 0
收起左側

ATMEGA128外部中斷整理

[復制鏈接]
ID:189819 發(fā)表于 2017-6-26 16:17 | 顯示全部樓層 |閱讀模式
外部中斷通過引腳INT7:0 觸發(fā)。只要使能了中斷,即使引腳INT7:0 配置為輸出,只要電平發(fā)生了合適的變化,中斷也會觸發(fā)。這個特點可以用來產生軟件中斷。外部中斷用到了以下幾個寄存器:EICRA、EICRB、EIMSK、EIFR。

1、外部中斷控制寄存器A -EICRA
Bits 7..0 – ISC31, ISC30 – ISC00, ISC00: 外部中斷3 - 0 敏感電平控制位
外部中斷3-0的中斷敏感電平控制

2、外部中斷控制寄存器B -EICRB
Bits 7..0 – ISC71, ISC70 - ISC41, ISC40: 外部中斷7 - 4 敏感電平控制位
外部中斷7-4的中斷敏感電平控制
3、外部中斷屏蔽寄存器- EIMSK
Bits 7..0 – INT7 – INT0: 外部中斷請求7 - 0 使能
當INT7 – INT0 為'1’,而且狀態(tài)寄存器SREG 的I 標志置位,相應的外部引腳中斷就使
能了。外部中斷控制寄存器– EICRA 和EICRB 的中斷敏感電平控制位決定中斷是由上升
沿、下降沿,還是電平觸發(fā)的。只要使能,即使引腳被配置為輸出,只要引腳電平發(fā)生了
相應的變化,中斷可將產生。據(jù)此可以實現(xiàn)軟件中斷。

4、外部中斷標志寄存器- EIFR
Bits 7..0 – INTF7 - INTF0: 外部中斷標志7 - 0
file:///C:%5CUsers%5CZTT%5CAppData%5CLocal%5CTemp%5Cksohtml%5Cwps672A.tmp.jpg

附:
單片機ATmega128中的中斷標志位
  1. /* External Interrupt Request 0 */
  2. #define INT0_vect                        _VECTOR(1)
  3. #define SIG_INTERRUPT0                        _VECTOR(1)
  4. /* External Interrupt Request 1 */
  5. #define INT1_vect                        _VECTOR(2)
  6. #define SIG_INTERRUPT1                        _VECTOR(2)
  7. /* External Interrupt Request 2 */
  8. #define INT2_vect                        _VECTOR(3)
  9. #define SIG_INTERRUPT2                        _VECTOR(3)
  10. /* External Interrupt Request 3 */
  11. #define INT3_vect                        _VECTOR(4)
  12. #define SIG_INTERRUPT3                        _VECTOR(4)
  13. /* External Interrupt Request 4 */
  14. #define INT4_vect                        _VECTOR(5)
  15. #define SIG_INTERRUPT4                        _VECTOR(5)
  16. /* External Interrupt Request 5 */
  17. #define INT5_vect                        _VECTOR(6)
  18. #define SIG_INTERRUPT5                        _VECTOR(6)
  19. /* External Interrupt Request 6 */
  20. #define INT6_vect                        _VECTOR(7)
  21. #define SIG_INTERRUPT6                        _VECTOR(7)
  22. /* External Interrupt Request 7 */
  23. #define INT7_vect                        _VECTOR(8)
  24. #define SIG_INTERRUPT7                        _VECTOR(8)
  25. /* Timer/Counter2 Compare Match */
  26. #define TIMER2_COMP_vect                _VECTOR(9)
  27. #define SIG_OUTPUT_COMPARE2                _VECTOR(9)
  28. /* Timer/Counter2 Overflow */
  29. #define TIMER2_OVF_vect                        _VECTOR(10)
  30. #define SIG_OVERFLOW2                        _VECTOR(10)
  31. /* Timer/Counter1 Capture Event */
  32. #define TIMER1_CAPT_vect                _VECTOR(11)
  33. #define SIG_INPUT_CAPTURE1                _VECTOR(11)
  34. /* Timer/Counter1 Compare Match A */
  35. #define TIMER1_COMPA_vect                _VECTOR(12)
  36. #define SIG_OUTPUT_COMPARE1A                _VECTOR(12)
  37. /* Timer/Counter Compare Match B */
  38. #define TIMER1_COMPB_vect                _VECTOR(13)
  39. #define SIG_OUTPUT_COMPARE1B                _VECTOR(13)
  40. /* Timer/Counter1 Overflow */
  41. #define TIMER1_OVF_vect                        _VECTOR(14)
  42. #define SIG_OVERFLOW1                        _VECTOR(14)
  43. /* Timer/Counter0 Compare Match */
  44. #define TIMER0_COMP_vect                _VECTOR(15)
  45. #define SIG_OUTPUT_COMPARE0                _VECTOR(15)
  46. /* Timer/Counter0 Overflow */
  47. #define TIMER0_OVF_vect                        _VECTOR(16)
  48. #define SIG_OVERFLOW0                        _VECTOR(16)
  49. /* SPI Serial Transfer Complete */
  50. #define SPI_STC_vect                        _VECTOR(17)
  51. #define SIG_SPI                                _VECTOR(17)
  52. /* USART0, Rx Complete */
  53. #define USART0_RX_vect                        _VECTOR(18)
  54. #define SIG_USART0_RECV                        _VECTOR(18)
  55. #define SIG_UART0_RECV                        _VECTOR(18)
  56. /* USART0 Data Register Empty */
  57. #define USART0_UDRE_vect                _VECTOR(19)
  58. #define SIG_USART0_DATA                        _VECTOR(19)
  59. #define SIG_UART0_DATA                        _VECTOR(19)
  60. /* USART0, Tx Complete */
  61. #define USART0_TX_vect                        _VECTOR(20)
  62. #define SIG_USART0_TRANS                _VECTOR(20)
  63. #define SIG_UART0_TRANS                        _VECTOR(20)
  64. /* ADC Conversion Complete */
  65. #define ADC_vect                        _VECTOR(21)
  66. #define SIG_ADC                                _VECTOR(21)
  67. /* EEPROM Ready */
  68. #define EE_READY_vect                        _VECTOR(22)
  69. #define SIG_EEPROM_READY                _VECTOR(22)
  70. /* Analog Comparator */
  71. #define ANALOG_COMP_vect                _VECTOR(23)
  72. #define SIG_COMPARATOR                        _VECTOR(23)
  73. /* Timer/Counter1 Compare Match C */
  74. #define TIMER1_COMPC_vect                _VECTOR(24)
  75. #define SIG_OUTPUT_COMPARE1C                _VECTOR(24)
  76. /* Timer/Counter3 Capture Event */
  77. #define TIMER3_CAPT_vect                _VECTOR(25)
  78. #define SIG_INPUT_CAPTURE3                _VECTOR(25)
  79. /* Timer/Counter3 Compare Match A */
  80. #define TIMER3_COMPA_vect                _VECTOR(26)
  81. #define SIG_OUTPUT_COMPARE3A                _VECTOR(26)
  82. /* Timer/Counter3 Compare Match B */
  83. #define TIMER3_COMPB_vect                _VECTOR(27)
  84. #define SIG_OUTPUT_COMPARE3B                _VECTOR(27)
  85. /* Timer/Counter3 Compare Match C */
  86. #define TIMER3_COMPC_vect                _VECTOR(28)
  87. #define SIG_OUTPUT_COMPARE3C                _VECTOR(28)
  88. /* Timer/Counter3 Overflow */
  89. #define TIMER3_OVF_vect                        _VECTOR(29)
  90. #define SIG_OVERFLOW3                        _VECTOR(29)
  91. /* USART1, Rx Complete */
  92. #define USART1_RX_vect                        _VECTOR(30)
  93. #define SIG_USART1_RECV                        _VECTOR(30)
  94. #define SIG_UART1_RECV                        _VECTOR(30)
  95. /* USART1, Data Register Empty */
  96. #define USART1_UDRE_vect                _VECTOR(31)
  97. #define SIG_USART1_DATA                        _VECTOR(31)
  98. #define SIG_UART1_DATA                        _VECTOR(31)
  99. /* USART1, Tx Complete */
  100. #define USART1_TX_vect                        _VECTOR(32)
  101. #define SIG_USART1_TRANS                _VECTOR(32)
  102. #define SIG_UART1_TRANS                        _VECTOR(32)
  103. /* 2-wire Serial Interface */
  104. #define TWI_vect                        _VECTOR(33)
  105. #define SIG_2WIRE_SERIAL                _VECTOR(33)
  106. /* Store Program Memory Read */
  107. #define SPM_READY_vect                        _VECTOR(34)
  108. #define SIG_SPM_READY                        _VECTOR(34)
  109. 外部中斷7-0標志位為INT7_vect至INT0_vect。
  110. 例:
  111. 1、端口初始化
  112. void port_init(void)
  113. {
  114.             PORTE = 0xef;
  115.         DDRE  = 0xb2;                    //令DDRE=0B10110010,使第六位為0,這是外部中斷
  116. //打開時,初始化端口需要注意的。
  117. }
  118. 2、寄存器初始化
  119. void interrupt_init()
  120. {
  121.         EIMSK |= 0x40;                                  //使能外部中斷6      
  122. EICRB = 0x30;                                   //上升沿觸發(fā)方式
  123.         MCUCSR = 0x00;                                  //控制和狀態(tài)寄存器初始化
  124. }
  125. 3、外部中斷程序服務子程序
  126. ISR(INT6_vect)                  
  127. {
  128.         count_2++;
  129.         if (count_2 == 10)
  130.         {
  131.                 count++;
  132.                 //Send_SingleChar(count>>8);
  133.                 //Send_SingleChar(count);
  134.                 count_2 = 0;
  135.         }
  136.         else
  137.         {
  138.                 count = count;
  139.         }
  140. }
復制代碼


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表