找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3879|回复: 0
打印 上一主题 下一主题
收起左侧

ATMEGA128外部中断整理

[复制链接]
跳转到指定楼层
楼主
ID:189819 发表于 2017-6-26 16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
外部中断通过引脚INT7:0 触发。只要使能了中断,即使引脚INT7:0 配置为输出,只要电平发生了合适的变化,中断也会触发。这个特点可以用来产生软件中断。外部中断用到了以下几个寄存器: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’,而且状态寄存器SREG 的I 标志置位,相应的外部引脚中断就使
能了。外部中断控制寄存器– EICRA 和EICRB 的中断敏感电平控制位决定中断是由上升
沿、下降沿,还是电平触发的。只要使能,即使引脚被配置为输出,只要引脚电平发生了
相应的变化,中断可将产生。据此可以实现软件中断。

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;                                   //上升沿触发方式
  123.         MCUCSR = 0x00;                                  //控制和状态寄存器初始化
  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. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表