久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6273|回復: 1
收起左側

avr單片機外部中斷0,1,2初始化配置及說明

[復制鏈接]
ID:185578 發表于 2017-4-2 15:12 | 顯示全部樓層 |閱讀模式
  ATmega16提供3個外部中斷,分別由INT0、INT1和INT2引腳觸發。
  需要注意的是,如果將ATmega16設置為允許外部中斷,則即使把INT0、INT1和INT2引腳設置為輸出方式,外部中斷仍然會被觸發。外部中斷可選擇采用上升沿觸發、下降沿觸發和低電平觸發(INT2中斷只能采用沿觸發方式。
#include<iom16v.h>
#include<macros.h>
/*1.狀態寄存器SREG



bit7      bit6      bit5      bit4      bit3      bit2      bit1      bit0
  I        T        H        S        V        N        Z        C
I:全局中斷使能位。
    在I置位后,單獨的中斷使能由不同的中斷寄存器控制。若I為0,則禁止中斷。

MCU 控制寄存器- MCUCR        MCU 控制寄存器包含中斷觸發控制位與通用 MCU 功能
Bit        7      6    5    4    3    2    1    0
            SM2    SE    SM1  SM0  ISC11 ISC10 ISC01 ISC00
外部中斷 1 由引腳 INT1 激發,如果 SREG 寄存器的 I 標志位和相應的中斷屏蔽位置位的話。在檢測邊沿前 MCU 首先采樣 INT1 引腳上的電平。如果選擇了邊沿觸發方式或電平變化觸發方式,那么持續時間大于一個時鐘周期的脈沖將觸發中斷,過短的脈沖則不能保證觸發中斷。如果選擇低電平觸發方式,那么低電平必須保持到當前指令執行完成。
SE:MCU休眠使能位
SM1~SM0:MCU休眠模式選擇
    SM2            SM1              SM0                  休眠模式
      0              0                0                    空閑
      0              0                1              ADC 噪聲抑制模式
      0              1                0                  掉電模式
      0              1                1                  省電模式
      1              0                0                    保留
      1              0                1                    保留
      1              1                0              Standby(1) 模式
      1              1                1            擴展Standby(1) 模式

                          ISC11 ISC10 說明
                            0      0    INT1 為低電平時產生中斷請求
                            0      1    INT1 引腳上任意的邏輯電平變化都將引發中斷
                            1      0    INT1 的下降沿產生異步中斷請求
                            1      1    INT1 的上升沿產生異步中斷請求
外部中斷 0 由引腳 INT0 激發,如果 SREG 寄存器的 I 標志位和相應的中斷屏蔽位置位的話。在檢測邊沿前 MCU 首先采樣 INT0 引腳上的電平。如果 選擇了邊沿觸發方式或電平變化觸發方式,那么持續時間大于一個時鐘周期的脈沖將觸發中斷,過短的脈沖則不能保證觸發中斷。如果選擇低電平觸發方式,那么低電平必須保持到當前指令執行完成
                          ISC01  ISC00 說明
                            0        0    INT0 為低電平時產生中斷請求
                            0        1    INT0 引腳上任意的邏輯電平變化都將引發中斷
                            1        0    INT0 的下降沿產生異步中斷請求
                            1        1    INT0 的上升沿產生異步中斷請求
*/
/*MCU 控制與狀態寄存器-MCUCSR-
  Bit        7      6    5      4      3      2    1      0
              JTD    ISC2  –    JTRF WDRF  BORF  EXTRF PORF
                            * Bit 6 – ISC2: 中斷 2 觸發方式控制
                            異步外中斷 2 由外部引腳 INT2 激活,如果 SREG 寄存器的 I 標志和 GICR 寄存器相應的
                            中斷屏蔽位置位的話。若 ISC2 寫 0 , INT2 的下降沿激活中斷。若 ISC2 寫 1 , INT2 的上
                            升沿激活中斷。 INT2 的邊沿觸發方式是異步的。只要 INT2 引腳上產生寬度大于50ns
        (1s=1000ms,1 ms=1000μs,1μs=1000ns )
                            所示數據的脈沖就會引發中斷。若選擇了低電平中斷,低電平必須保持到當前指令完成,
                            然后才會產生中斷。而且只要將引腳拉低,就會引發中斷請求。改變 ISC2 時有可能發生
                            中斷。因此建議首先在寄存器 GICR 里清除相應的中斷使能位 INT2 ,然后再改變ISC2。
                            最后,不要忘記在重新使能中斷之前通過對 GIFR 寄存器的相應中斷標志位 INTF2 寫 '1’
                            使其清零。
*/
/*
通用中斷控制寄存器- GICR
                            Bit        7      6    5      4      3      2      1      0
                                        INT1  INT0 INT2    –    –      –    IVSEL    IVCE
                            * Bit 7 – INT1: 使能外部中斷請求 1
                            當 INT1 為 '1’ ,而且狀態寄存器SREG 的 I 標志置位,相應的外部引腳中斷就使能了。
                            MCU通用控制寄存器– MCUCR的中斷敏感電平控制1位 1/0 (ISC11與ISC10)決定中斷是
                            由上升沿、下降沿,還是 INT1 電平觸發的。只要使能,即使 INT1 引腳被配置為輸出,
                            只要引腳電平發生了相應的變化,中斷可將產生。
                            * Bit 6 – INT0: 使能外部中斷請求 0
                            當 INT0 為 '1’ ,而且狀態寄存器SREG 的 I 標志置位,相應的外部引腳中斷就使能了。
                            MCU通用控制寄存器– MCUCR的中斷敏感電平控制0位 1/0 (ISC01與ISC00)決定中斷是
                            由上升沿、下降沿,還是 INT0 電平觸發的。只要使能,即使 INT0 引腳被配置為輸出,
                            只要引腳電平發生了相應的變化,中斷可將產生。
                          * Bit 5 – INT2: 使能外部中斷請求 2
                            當 INT2 為 '1’ ,而且狀態寄存器SREG 的 I 標志置位,相應的外部引腳中斷就使能了。
                          MCU通用控制寄存器– MCUCR 的中斷敏感電平控制2位 1/0 (ISC2與ISC2)決定中斷是由
                          上升沿、下降沿,還是 INT2 電平觸發的。只要使能,即使 INT2 引腳被配置為輸出,只
                          要引腳電平發生了相應的變化,中斷可將產生

*/
/*
通用中斷標志寄存器- GIFR
                            Bit        7      6    5      4    3      2    1      0
                                      INTF1 INTF0 INTF2  –    –    –    –    –
                          * Bit 7 – INTF1: 外部中斷標志 1
                          INT1引腳電平發生跳變時觸發中斷請求,并置位相應的中斷標志INTF1。如果SREG 的位
                          I以及GICR寄存器相應的中斷使能位INT1為”1” ,MCU即跳轉到相應的中斷向量。進入中
                          斷服務程序之后該標志自動清零。此外,標志位也可以通過寫入 ”0” 來清零。
                          * Bit 6 – INTF0: 外部中斷標志 0
                          INT0引腳電平發生跳變時觸發中斷請求,并置位相應的中斷標志INTF0。如果SREG 的位
                          I以及GICR寄存器相應的中斷使能位INT0為”1” ,MCU即跳轉到相應的中斷向量。進入中
                          斷服務程序之后該標志自動清零。此外,標志位也可以通過寫入 ”0” 來清零。
                          * Bit 5 – INTF2: 外部中斷標志 2
                          INT2引腳電平發生跳變時觸發中斷請求,并置位相應的中斷標志INTF2。如果SREG 的位
                          I以及GICR寄存器相應的中斷使能位INT2為”1” ,MCU即跳轉到相應的中斷向量。進入中
                          斷服務程序之后該標志自動清零。此外,標志位也可以通過寫入 ”0” 來清零。注意,當
                          INT2中斷禁用進入某些休眠模式時,該引腳的輸入緩沖將禁用。這會導致INTF2標志設置
                          信號的邏輯變化

*/
//外部中斷0向量端口
#pragma interrupt_handler INTER_0:iv_INT0
//外部中斷1向量端口
#pragma interrupt_handler INTER_1:iv_INT1
//外部中斷2向量端口        
#pragma interrupt_handler INTER_2:iv_INT2
void INTER_init_0(unsigned char a)//a取值0-3
{
switch(a)
{
case 0:MCUCR&=~(1<<ISC01);MCUCR&=~(1<<ISC00);break;//INT0 為低電平時產生中斷請求
case 1:MCUCR&=~(1<<ISC01);MCUCR|=1<<ISC00;break;// INT0 引腳上任意的邏輯電平變化都將引發中斷
case 2:MCUCR|=1<<ISC01;MCUCR&=~(1<<ISC00);break;//INT0 的下降沿產生異步中斷請求
case 3:MCUCR|=1<<ISC01;MCUCR|=1<<ISC00;break;//INT0 的上升沿產生異步中斷請求
default : MCUCR|=1<<ISC01;MCUCR&=~(1<<ISC00);break;//設置錯誤時,下降沿產生異步中斷請求
}
GICR|=(1<<INT0);//使能外部中斷INT0
GIFR&=~(1<<INTF0);//清零中斷標志
SREG|=0x80;//使能全局中斷
}
void INTER_init_1(unsigned char a)//a取值0-3
{
switch(a)
{
case 0:MCUCR&=~(1<<ISC11);MCUCR&=~(1<<ISC10);break;//INT1 為低電平時產生中斷請求
case 1:MCUCR&=~(1<<ISC11);MCUCR|=1<<ISC10;break;// INT1 引腳上任意的邏輯電平變化都將引發中斷
case 2:MCUCR|=1<<ISC11;MCUCR&=~(1<<ISC10);break;//INT1 的下降沿產生異步中斷請求
case 3:MCUCR|=(1<<ISC11)|(1<<ISC10);break;//INT1 的上升沿產生異步中斷請求
default : MCUCR|=1<<ISC11;MCUCR&=~(1<<ISC10);break;//設置錯誤時,下降沿產生異步中斷請求
}
GICR|=(1<<INT1);//使能外部中斷INT1
GIFR&=~(1<<INTF1);//清零中斷標志
SREG|=0x80;//使能全局中斷
}
void INTER_init_2(unsigned char a)
{
if(a)
MCUCSR|=(1<<ISC2)//上升沿觸發;
else
MCUCSR&=~(1<<ISC2)//下降沿觸發;
GICR|=(1<<INT2);//使能INT2。
GIFR&=~(1<<INTF2);//清零中斷標志
SREG|=0x80;//使能全局中斷
}
void INTER_0(void)
{
//add your code here!
}
void INTER_1(void)
{
//add your code here!
}
void INTER_2(void)
{
//add your code here!
}


回復

使用道具 舉報

ID:259500 發表于 2017-12-10 15:48 | 顯示全部樓層
沒看太懂誒!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线观看视频一区 | 日韩精品久久久久久 | 精品视频www | 91亚洲精选 | 最新国产精品视频 | 亚洲永久| 成人在线视| caoporn国产 | 天天久 | 在线观看日韩av | 亚洲网站免费看 | 亚洲九九 | 日韩国产欧美 | 午夜国产一级片 | 性生生活大片免费看视频 | 免费看a | 日本天堂视频在线观看 | 日韩成人在线视频 | 最大av在线 | 夜夜骑天天干 | 欧美99 | 国产精品乱码一区二三区小蝌蚪 | 国产成人jvid在线播放 | 天天天天操 | 国产精品精品视频一区二区三区 | 亚洲一区二区三区免费观看 | 欧美综合一区二区 | 四虎影院欧美 | 成人午夜在线 | 中文字幕乱码视频32 | 久久久久亚洲 | 伊人狠狠 | 在线欧美视频 | 亚洲成人免费视频在线 | 色伊人久久 | 久久精品91久久久久久再现 | 欧美一级大片免费观看 | 亚洲精品白浆高清久久久久久 | 欧美日韩亚洲视频 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 特黄色一级毛片 |