影音先锋男人资源在线观看,精品国产日韩亚洲一区91,中文字幕日韩国产,2018av男人天堂,青青伊人精品,久久久久久久综合日本亚洲,国产日韩欧美一区二区三区在线

《AVR單片機(jī)》PPT課件

上傳人:san****019 文檔編號(hào):21453631 上傳時(shí)間:2021-05-01 格式:PPT 頁數(shù):63 大?。?64KB
收藏 版權(quán)申訴 舉報(bào) 下載
《AVR單片機(jī)》PPT課件_第1頁
第1頁 / 共63頁
《AVR單片機(jī)》PPT課件_第2頁
第2頁 / 共63頁
《AVR單片機(jī)》PPT課件_第3頁
第3頁 / 共63頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《AVR單片機(jī)》PPT課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《《AVR單片機(jī)》PPT課件(63頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、AVR單 片 機(jī) 原 理 及 應(yīng) 用陳淵睿Tel: 13002086301E-mail: 華 南 理 工 大 學(xué) 電 力 學(xué) 院 第 五 章AVR單 片 機(jī) I/O端 口 、 中 斷 系 統(tǒng) ATmega16等 有 4 個(gè) 8 位 的 I/O 口 ( ATmega8無A口 , C口 無 PC7) 。 它 們 分 別 是 端 口 A、 端 口 B、端 口 C、 端 口 D。 這 32 個(gè) 引 腳 均 可 以 由 程 序 定 義為 輸 入 口 或 者 輸 出 口 。單片機(jī)在實(shí)際應(yīng)用時(shí)必須通過這些引腳來接收外界信息,經(jīng)處理后輸 出相應(yīng)信號(hào)。本 章 只 講 基 本 的 輸 入 、 輸 出 功 能 (通

2、 用I/O)。 這 32 個(gè) 引 腳 還 有 第 二 功 能5.1.2 I/O端 口 的 通 用 I/O功 能1 有 關(guān) I/O口 的 寄 存 器1) A 口 數(shù) 據(jù) 寄 存 器 PORTA $1B($3B)2) A 口 數(shù) 據(jù) 方 向 寄 存 器 DDRA $1A($3A)3) A 口 輸 入 腳 地 址 PINA $19($39)5.1 AVR單 片 機(jī) 的 I/O端 口 A口的輸入引腳地址PINA不是一個(gè)寄存器,該地址允許對(duì)A口的每一個(gè)引腳的物理值進(jìn)行訪問。當(dāng)讀PORTA時(shí),讀到的是PORTA的數(shù)據(jù)鎖存器(在單片機(jī)內(nèi)部);當(dāng)讀PINA時(shí),外部引腳上的邏輯值(0或1)被讀取 B口 、 C口

3、 、 D口 作 為 通 用 I/O時(shí) , 具 有 與 A口 同 樣 的功 能4) B 口 數(shù) 據(jù) 寄 存 器 PORTB $18($38)5) B 口 數(shù) 據(jù) 方 向 寄 存 器 DDRB $17($37)6) B 口 輸 入 腳 地 址 PINB $16($36)7) C 口 數(shù) 據(jù) 寄 存 器 PORTC $15($35)8) C 口 數(shù) 據(jù) 方 向 寄 存 器 DDRC $14($34)9) C 口 輸 入 腳 地 址 PINC $13($33)10) D 口 數(shù) 據(jù) 寄 存 器 PORTD $12($32)11) D 口 數(shù) 據(jù) 方 向 寄 存 器 DDRD $11($31)12) D

4、 口 輸 入 腳 地 址 PIND $10($30) 以 PC0 為例說明不考慮端口的第二功能時(shí),I/O 口內(nèi)部電路及工作原理2 I/O口 內(nèi) 部 電 路 及 工 作 原 理 當(dāng)C口數(shù)據(jù)方向寄存器DDRC的第0位置位 (DDC0=1) 時(shí), PC0口定義輸出. 由PC0口的內(nèi)部工作原理圖可見, DDC0的Q端為1, MOS管上拉截止; 同時(shí)PORTC0的三態(tài)門打開, PC0引腳的輸出電平取決于C口數(shù)據(jù)寄存器PORTC的第0位 (PORTC0) 的輸出Q端值, 即: DDC0=1 (PC0定義為輸出), PORTC0=1時(shí), PC0輸出高電平; PORTC0=0時(shí), PC0輸出低電平當(dāng)DDC0=

5、0時(shí), PC0口定義輸入. PORTC0=0時(shí), 上拉MOS截止, PC0口作三態(tài)輸入; PORTC0=1時(shí) (上拉MOS激活), PC0口作帶上拉電阻的輸入. 后一種輸入方式可省去鍵盤、開關(guān)、繼電器等接口電路的上拉電阻 DDC0 是可讀的, 用指令 in r16,DDRC 再看 r16 的第 0 位; PORTC0 的輸出 Q 也是可讀的, 用指令 in r16,PORTC 再看 r16 的第 0 位, 讀的是鎖存器(PORTC); PINC0 是可讀的, 用指令 in r16,PINC 再看r16 的第 0 位, 讀的是引腳電平 DDC0, PORTC0 都是可寫的(可定義輸入或輸出和確定

6、輸出電平的高低等), 但 PINC 是不可寫的 (引腳電平的高低是外部客觀存在) 表 5-1 I/O 口 引 腳 配 置 表DDRXn PORTXn PUD in SFIOR I/O方 式 內(nèi) 部 上 拉 電 阻 引 腳 狀 態(tài) 說 明0 0 X 輸 入 無 效 三 態(tài) ( 高 阻 )0 1 0 輸 入 有 效 外 部 引 腳 拉 低 時(shí) 輸 出 電 流 (uA)0 1 1 輸 入 無 效 三 態(tài) ( 高 阻 )1 0 X 輸 出 無 效 推 挽 0輸 出 , 吸 收 電 流 (20mA)1 1 X 輸 出 無 效 推 挽 1輸 出 , 輸 出 電 流 (20mA) C口特性:C口是一個(gè)8位雙

7、向 I/O口.C口占了3個(gè)I/O寄存器地址, 分別是C口數(shù)據(jù)寄存器PORTC $15($35), C口數(shù)據(jù)方向寄存器DDRC $14($34) 和C口的輸入引腳 PINC $13($33). C口的輸入引腳地址為只讀, 而數(shù)據(jù)寄存器和數(shù)據(jù)方向寄存器為可讀寫 所有的C口引腳都有獨(dú)立可選的上拉電阻, C口的輸出緩沖器可以吸收20mA的電流以直接驅(qū)動(dòng)LED顯示.當(dāng)PC0PC7引腳被用作輸入(DDCn=0)且被外部拉低時(shí), 若內(nèi)部上拉電阻被觸發(fā)(PORTC n=1), 這些引腳將向外輸出電流A口、B口、D口作普通I/O口時(shí)同上 3 I/O口 的 特 點(diǎn)(1)作輸入或輸出可定義;(2)輸出時(shí),低電平灌電

8、流大于 20mA。若允許輸出口電平升至 1V 以上,灌電流可達(dá) 40mA(但每個(gè)口的總電流、芯片的總電流有限制) (3)輸入時(shí),可三態(tài)輸入(不帶上拉,大于 2.2V為邏輯1); 也可帶上拉,可省去外電路的上拉電阻 5.1.4 I/O端 口 的 應(yīng) 用1 I /O 端 口 使 用 注 意 事 項(xiàng) 1) 先定義 I/O 口方向,對(duì)數(shù)據(jù)方向寄存器的某位置 1 為輸出,清 0 為輸入 2) 作輸入口時(shí),若需上拉電阻,可對(duì)端口數(shù)據(jù)寄存器PORTX相應(yīng)位置 1(且PUD0),這樣省去外部電路的上拉電阻,可作為撥動(dòng)開關(guān)、繼電器接點(diǎn)、鍵盤和數(shù)字撥碼盤的輸入口 3) 作輸出口時(shí),上拉電阻已斷開,對(duì)口數(shù)據(jù)寄存器相

9、應(yīng)位置 1 推挽輸出高電平,對(duì)口數(shù)據(jù)寄存器相應(yīng)位清 0 推挽輸出低電平。從驅(qū)動(dòng)能力看, 低電平時(shí)的灌電流更強(qiáng)些, 若不介意電壓升到 1V, 灌電流可達(dá) 40mA,可直接驅(qū)動(dòng)繼電器和LED數(shù)碼管 2 I/O 口 應(yīng) 用 舉 例0 LED閃爍 ;ATmega16的 PA口 PA0 PA7分 別 接 LED(D1 D8)的 陰 極 , 各 串 300R限 流 電 阻 后 接 Vcc.include m16def.inc.org $000rjmp start.org $02Astart:ldi r16,low(RAMend) ;Set stackpointerout spl,r16ldi r16,hi

10、gh(RAMend)out sph,r16ldi r16,$ff ;set porta as outputout ddra,r16 ;(Continued)loop:ldi r16,$00 ;輸 出 低 led亮out porta,r16ldi r24,6 ;設(shè) 延 時(shí)rcall delayldi r16,$ff ;輸 出 高 led滅out porta,r16ldi r24,4rcall delayrjmp loop ;(Continued)delay:d1: ldi r25,200d2: ldi r26,200d3: dec r26brne d3dec r25brne d2dec r24b

11、rne d1ret若要實(shí)現(xiàn)流水燈效果,如何更改程序? 1 數(shù)字撥碼盤輸入兩位 BCD 碼, 數(shù)碼管靜態(tài)顯示出來 B 口定義為帶內(nèi)部上拉的輸入口, 外接兩個(gè) BCD碼數(shù)字撥盤。撥盤被撥到某一個(gè)位置時(shí), 輸入控制線A分別與 4 位數(shù)據(jù)線中的某幾位接通, A 端接地. 例把撥盤撥為3, 則數(shù)據(jù)線 2、1 與 A 相通,讀入低電平,8、4 與 A 不通,讀入高電平,即讀入為1100,取反即為0011(3)。C口、D口定義為輸出,經(jīng) 300電阻接兩共陰數(shù)碼管各段,數(shù)碼管公共端(陰極)接地 .include 8535def.inc rjmp reset tab:.db $3f,$06,$5b,$4f,$6

12、6,$6d,$7d,$07,$7f,$6f ;七 段 碼 表(0 9, 共 陰 ) reset:ldi r16,$02 ;棧 指 針 置 初 值 out sph,r16 ldi r16,$5f out spl,r16 ldi r16,0 ;定 義 B 口 輸 入 帶 上 拉 out ddrb,r16ldi r16,$ff out portb,r16 out ddrc,r16 ;定 義 C 口 D 口 為 輸 出 out ddrd,r16 loop: in r16,pinb ;讀 B 口 引 腳 , 開 關(guān) 閉 合 為 0 com r16 ;取 反 , 開 關(guān) 閉 合 對(duì) 應(yīng) 為 1 mov r

13、17,r16 andi r16,$0f ;取 個(gè) 位 BCD 碼 swap r17 ;半 字 節(jié) 交 換 andi r17,$0f ;取 十 位 BCD 碼 ldi ZH,high(tab*2) ;查 個(gè) 位 七 段 碼 ldi ZL,low(tab*2) add ZL,r16 lpm out portc,r0 ;送 C 口 靜 態(tài) 輸 出 ldi ZH,high(tab*2) ;查 十 位 七 段 碼 ldi ZL,low(tab*2) add ZL,r17 lpm out portd,r0 ;送 D 口 靜 態(tài) 輸 出 h: rjmp h ; 2 動(dòng)態(tài)掃描五位數(shù)碼管顯示靜態(tài)顯示 1 位數(shù)碼

14、需占 8 位口(包括小數(shù)點(diǎn)),要顯示 5 位數(shù)碼需 40 位輸出口,這顯然是不實(shí)用的。為了節(jié)省輸出口,可采用動(dòng)態(tài)掃描方式,顯示五位數(shù)碼只需 13 位輸出口電路如下圖,B 口作字線, D 口低 5 位作位線,動(dòng)態(tài)掃描顯示五位數(shù)碼,利用人眼的視覺暫留效應(yīng),可看到穩(wěn)定的數(shù)字程序:16位二進(jìn)制數(shù)(r17:r16)轉(zhuǎn)換為5位BCD碼(個(gè)萬位分別存于r18r22),并用數(shù)碼管顯示 2 動(dòng)態(tài)掃描五位數(shù)碼管顯示 2 動(dòng)態(tài)掃描五位數(shù)碼管顯示.include 8535def.inc .org $0000 rjmp reset tab:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,

15、$6f reset: ldi r16,low(ramend) ;棧 指 針 置 初 值 out spl,r16 ldi r16,high(ramend) out sph,r16 ldi r16,$ff ;定 義 PB PD 為 輸 出 口 out ddrb,r16 out ddrd,r16 2 動(dòng)態(tài)掃描五位數(shù)碼管顯示 ldi r16,$ff ;設(shè) 待 顯 示 數(shù) 為 $ffff(即 65535) ldi r17,$ff rcall b16td5 ;調(diào) 二 轉(zhuǎn) 十 子 程 見 4.3.1 mov r22,r20 ;將 BCD 碼 送 r18r22 mov r21,r19 mov r20,r18

16、mov r19,r17 mov r18,r16 aa: rcall smiao ;調(diào) 動(dòng) 態(tài) 掃 描 子 程 rjmp aa 2 動(dòng)態(tài)掃描五位數(shù)碼管顯示smiao: ldi r16,$fe ;送 個(gè) 位 位 線 out portd, r16 mov r23,r18 ;將 個(gè) 位 的 BCD 碼 送 R23 rcall cqb ;查 七 段 碼 送 B 口 輸 出 rcall t1ms ;延 時(shí) 1ms ldi r16,$fd ;送 十 位 位 線 out portd, r16 mov r23,r19 ;將 十 位 的 BCD 碼 送 R23 rcall cqb ;查 七 段 碼 送 B 口 輸

17、 出 rcall t1ms ;延 時(shí) 1ms 2 動(dòng)態(tài)掃描五位數(shù)碼管顯示ldi r16,$fb ;送 百 位 位 線 out portd,r16 mov r23,r20 ;將 百 位 的 BCD 碼 送 R23 rcall cqb ;查 七 段 碼 送 B 口 輸 出 rcall t1ms ;延 時(shí) 1ms ldi r16,$f7 ;送 千 位 位 線 out portd,r16 mov r23,r21 ;將 千 位 的 BCD 碼 送 R23 rcall cqb ;查 七 段 碼 送 B 口 輸 出 rcall t1ms ;延 時(shí) 1ms ldi r16,$ef ;送 萬 位 位 線 out

18、 portd,r16 mov r23,r22 ;將 萬 位 的 BCD 碼 送 R23 rcall cqb ;查 七 段 碼 送 B 口 輸 出 rcall t1ms ;延 時(shí) 1ms ret 2 動(dòng)態(tài)掃描五位數(shù)碼管顯示cqb: ldi zh,high(tab*2) ;七 段 碼 的 首 地 址 給 Z ldi zl,low(tab*2) add zl,r23 ;首 地 址 +偏 移 量 lpm ;查 表 送 B 口 輸 出 out portb,r0 ret t1ms: ldi r24,101 ;延 時(shí) 1 毫 秒 子 程 push r24 del2: push r24 del3: dec r

19、24 brne del3 pop r24 dec r24 brne del2 pop r24 ret 打 印 機(jī) 接 口 設(shè) 計(jì)Centronic接口打印機(jī)一般采用8位數(shù)據(jù)線和3根基本的應(yīng)答控制線/STB, BUSY, /ACK以 PP40 彩色繪圖打印機(jī)為例,接口時(shí)序如圖 8535 與 PP40 的 接 口 電 路 如 圖 若打印如下兩行字符 t: 32C P: 102kPa 則要把以下 ASCII 碼送給打印機(jī): $74(t), $3A(:), $20(空格), $33(3), $32(2), $6F(), $43(C),$0A(換行), $50(P), $3A(:), $20(空格),

20、$31(1), $30(0), $32(2), $6B(k), $50(P), $61(a), $0A(換行) 設(shè)事先已將這些 ASCII 碼放在 SRAM 中$100 開始的單元中 1 采用查詢的方法。單片機(jī)每送一個(gè)數(shù)據(jù),發(fā)選通脈沖后,打印機(jī)忙線變高,同時(shí)接收處理該數(shù)據(jù),完成后忙線變低,單片機(jī)查到忙線變低后再送下一個(gè)數(shù)據(jù)。 .include “8535def.inc” RESET: ldi r16,low(ramend) ;棧指針置初值 out spl,r16 ldi r16,high(ramend) out sph,r16 ldi r16,$ff ;定義 C 口為輸出 out ddrc,r

21、16 ldi r16,$01 ;定義PD0為輸出, PD2為輸入 out ddrd,r16 sbi portd,0 ;先使PD0輸出為高 ldi xh,$01 ;X指向打印緩沖區(qū)首址 ldi xl,$00 ldi r25,18 ;要打印的字符數(shù) loop: ld r24,x+ ;向打印機(jī)數(shù)據(jù)口送一個(gè)字符 out portc,r24 cbi portd,0 ;發(fā)選通脈沖 rcall t1us sbi portd,0 rcall t1us ;延時(shí) 3us rcall t1us rcall t1us loop1: sbic pind,2 ;等待忙線變低(耗時(shí)長) rjmp loop1 dec r25

22、 ;字節(jié)數(shù)是否發(fā)完 brne loop ;沒發(fā)完再發(fā)下一個(gè) here: rjmp here 打印機(jī)中的微電機(jī)和機(jī)械的動(dòng)作是一個(gè)慢過程,需要幾ms才能傳送一個(gè)字節(jié)數(shù)據(jù)。用查詢的方法送一組數(shù)據(jù)給打印機(jī)有時(shí)需要數(shù)秒鐘,單片機(jī)在這段時(shí)間內(nèi)就不能干別的事情,這樣常常是不允許的2 采用中斷的方法。主程序送第一個(gè)數(shù)據(jù)給打印機(jī)數(shù)據(jù)口,接著發(fā)選通脈沖,打印機(jī)接收處理該數(shù)據(jù)時(shí),忙線變高,直到處理好此數(shù)據(jù)后忙線變低,BUSY的下降沿產(chǎn)生一個(gè)INT0中斷,在中斷服務(wù)子程序中再送下一個(gè)數(shù)據(jù),發(fā)送選通脈沖后立即返回主程序。這樣,送字符和發(fā)選通信號(hào)是在外部中斷0服務(wù)子程序中完成,單片機(jī)主程序照常執(zhí)行。每送一個(gè)字符,只打斷幾

23、微秒。 .include 8535def.inc .org $000 rjmp RESET rjmp EXT_INT0 RESET: ldi r16,low(ramend) ;棧指針置初值 out spl,r16 ldi r16,high(ramend) out sph,r16 ldi r16,$ff ;定義 C 口為輸出 out ddrc,r16 ldi r16,$01 ;定義 PD0 為輸出 PD2 為輸入 out ddrd,r16 sbi portd,0 ;先使 PD0 輸出為高 ldi r16,$02 ;定義 INT0 下降沿申請(qǐng)中斷 out MCUCR,r16 SER r16 ;清中

24、斷標(biāo)志寄存器 out GIFR,r16 ldi xh,$01 ;X 指向打印緩沖區(qū)首址 ldi xl,$00 ldi r25,17 ;要打印的字符數(shù)ld r24,x+ ;向打印機(jī)數(shù)據(jù)口送第一個(gè)字符 out portc,r24 cbi portd,0 ;發(fā)選通脈沖 rcall t1us sbi portd,0 ldi r24,$40 ;使能 INT0 中斷 out GIMSK,r24 sei ;開中斷 here: rjmp here EXT_INT0:in r1,sreg ;保護(hù)標(biāo)志寄存器 ld r24,x+ ;向打印機(jī)數(shù)據(jù)口送字符 out portc,r24 cbi portd,0 ;發(fā)選通脈

25、沖 rcall t1us sbi portd,0 dec r25 ;是否發(fā)完 brne ext_int01 ldi r24,$00 ;發(fā)完則關(guān) INT0 中斷 out GIMSK,r24 ext_int01: out sreg,r1 ;恢復(fù)標(biāo)志寄存器 reti 主 程 序 中斷服務(wù)程序KK+1 中 斷 響 應(yīng)中 斷 返 回中 斷 請(qǐng) 求 中 斷 過 程 示 意 圖5.2 AVR單 片 機(jī) 的 中 斷 系 統(tǒng)中斷的概念中斷服務(wù)程序與子程序的區(qū)別中斷是隨機(jī)發(fā)生的,服務(wù)程序無需通過指令調(diào)用,返回用RETI子程序需通過rcall、ICALL、CALL指令調(diào)用,返回用RET ATmega8有19個(gè)中斷源

26、(含RESET,ATmega16有21個(gè))。每個(gè)中斷源在程序空間都有一個(gè)獨(dú)立的中斷向量。所有的中斷事件都有自己的使能位。當(dāng)使能位置位且 SREG中的 I 也置位的情況下,中斷可以發(fā)生 程序空間的最低位置定義為復(fù)位及中斷向量。完整的中斷表見復(fù)位與中斷矢量表。 在中斷向量表中處于低地址的中斷具有高的優(yōu)先級(jí), 所以 RESET 具有最高的優(yōu)先級(jí)5.2.1 中 斷 源 和 中 斷 標(biāo) 志 設(shè)置中斷向量地址最典型的方法如下: 地址 矢量號(hào) 代碼 注釋 $000 1 RJMP RESET ;復(fù)位(上電、外部、 BOD、看門狗) $001 2 RJMP EXT_INT0 ;IRQ0 $002 3 RJMP

27、EXT_INT1 ;IRQ1 $003 4 RJMP TIM2_COMP ;T2比較匹配 $004 5 RJMP TIM2_OVF ;T2 溢出 $005 6 RJMP TIM1_CAPT ;T1 輸入捕捉 $006 7 RJMP TIM1_COMPA ;T1比較匹配A $007 8 RJMP TIM1_COMPB ;T1比較匹配B $008 9 RJMP TIM1_OVF ;T1 溢出 $009 10 RJMP TIM0_OVF ;T0 溢出 $00a 11 RJMP SPI_STC ;SPI傳輸結(jié)束 $00b 12 RJMP UART_RXC ;UART接收結(jié)束 $00c 13 RJMP

28、UART_DRE ;UART數(shù)據(jù)空 設(shè)置中斷向量地址最典型的方法如下(續(xù)): 地址 矢量號(hào) 代碼 注釋 $00d 14 RJMP UART_TXC ;UART發(fā)送結(jié)束 $00e 15 RJMP ADC ;AD轉(zhuǎn)換結(jié)束 $00f 16 RJMP EE_RDY ;EEP準(zhǔn)備好 $010 17 RJMP ANA_COMP ;模擬比較器 $011 18 RJMP TWI_INT ;TWI狀態(tài)中斷 $012 19 RJMP SPM_RDY ;寫Flash準(zhǔn)備好 ;下面主程序開始 $013 RESET: LDI R16,HIGH(RAMEND) $014 OUT SPH, R16 $015 LDI R16

29、,LOW(RAMEND) $016 OUT SPL, R16 $017 XXX 中斷標(biāo)志:指示中斷是否存在的標(biāo)記,由內(nèi)部專用觸發(fā)器充任,觸發(fā)器置1表示有中斷,清零表示無中斷。各中斷標(biāo)志分布于相應(yīng)I/O寄存器中。如GIFR、TIFR等 5.2.3 中 斷 處 理當(dāng)程序計(jì)數(shù)器PC指向?qū)嶋H中斷向量開始執(zhí)行相應(yīng)的中斷例程時(shí),硬件清除對(duì)應(yīng)的中斷標(biāo)志。一些中斷標(biāo)志位也可以通過軟件寫1來清除 當(dāng)一個(gè)符合條件的中斷發(fā)生后,如果相應(yīng)的中斷使能位為0,則中斷標(biāo)志位掛起,并一直保持到中斷執(zhí)行,或者被軟件清除 如果全局中斷標(biāo)志I被清零,則所有的中斷都不會(huì)被執(zhí)行,直到I置位,然后被掛起的各個(gè)中斷按中斷優(yōu)先級(jí)依次中斷 注

30、意:外部電平中斷沒有中斷標(biāo)志位,無法記憶,因此當(dāng)電平變?yōu)榉侵袛嚯娖胶螅袛鄺l件即終止注意:進(jìn)入中斷例程時(shí)狀態(tài)寄存器SREG不會(huì)被自動(dòng)保存,從中斷例程返回(RETI)時(shí)也不會(huì)被自動(dòng)恢復(fù)。用戶編寫中斷例程時(shí)必須注意保護(hù)SREG。如:EXT_INT0: in r1,sreg ;保護(hù)狀態(tài)寄存器SREG out sreg,r1 ;恢復(fù)狀態(tài)寄存器SREG reti 能否直接用PUSH、POP? 5.3 有 關(guān) 的 I/O寄 存 器1、通用中斷控制寄存器GICR*器件不同時(shí),I/O寄存器的名稱或每位的含義可能會(huì)不同(詳見相應(yīng)器件的數(shù)據(jù)手冊(cè))以下只討論與ATmega8相關(guān)的 位7:INT1 外部中斷請(qǐng)求1使能

31、 當(dāng)INT1位和SREG中的I位都為1時(shí),外部引腳(INT1)中斷使能。MCU 通用控制寄存器MCUCR中的中斷檢測(cè)控制位1/0(ISC11和ISC10) 定義中斷1是上升沿中斷還是下降沿中斷,或者是低電平中斷。即使管腳被定義為輸出,中斷仍可產(chǎn)生。相應(yīng)的中斷從程序存儲(chǔ)器的(字)地址$002起執(zhí)行 位6:INT0 外部中斷請(qǐng)求0使能 當(dāng)INT0位和SREG中的I位都為1時(shí),外部引腳(INT0)中斷使能。MCU 通用控制寄存器MCUCR中的中斷檢測(cè)控制位1/0(ISC01和ISC00) 定義中斷1是上升沿中斷還是下降沿中斷,或者是低電平中斷。即使管腳被定義為輸出,中斷仍可產(chǎn)生。相應(yīng)的中斷從程序存儲(chǔ)

32、器的(字)地址$001起執(zhí)行 2、通用中斷標(biāo)志寄存器GIFR位7:INTF1 外部中斷標(biāo)志1 當(dāng)INT1引腳信號(hào)邊沿或邏輯變化觸發(fā)中斷請(qǐng)求時(shí),INTF1置位1。如果SREG中的I位及GICR中的INT1位都為1,則MCU將跳轉(zhuǎn)到中斷地址$002。中斷例程執(zhí)行時(shí),此標(biāo)志被清除,也可以通過向其寫1來清除。當(dāng)配置為低電平中斷時(shí),該標(biāo)志恒為0,因低電平中斷可由讀PIN寄存器決定 位6:INTF0 外部中斷標(biāo)志0 當(dāng)INT0引腳信號(hào)邊沿或邏輯變化觸發(fā)中斷請(qǐng)求時(shí),INTF0置位1。如果SREG中的I位及GICR中的INT0位都為1,則MCU將跳轉(zhuǎn)到中斷地址$001。中斷例程執(zhí)行時(shí),此標(biāo)志被清除,也可以通過

33、向其寫1來清除。當(dāng)配置為低電平中斷時(shí),該標(biāo)志恒為0,因低電平中斷可由讀PIN寄存器決定 3、定時(shí)器/計(jì)數(shù)器中斷屏蔽寄存器TIMSK位7:OCIE2 T/C2輸出比較匹配中斷使能 當(dāng)OCIE2位和SREG中的I都為1時(shí),T/C2比較匹配中斷使能。當(dāng)T/C2的比較匹配發(fā)生(即定時(shí)器/計(jì)數(shù)器中斷標(biāo)志寄存器TIFR中的OCF2置位)時(shí),中斷例程(中斷矢量地址$003)將執(zhí)行 位6:TOIE2 T/C2溢出中斷使能 當(dāng)TOIE2 和I 都為1 時(shí),T/C2 溢出中斷使能。當(dāng)T/C2 溢出(即TIFR 中的TOV2 位置位)時(shí),中斷例程($004)得到執(zhí)行 位5:TICIE1 T/C1輸入捕捉中斷使能 當(dāng)

34、TICIE1和I 都為1時(shí),輸入捕捉事件中斷使能。當(dāng)PD6(ICP)的捕捉觸發(fā)事件發(fā)生(即TIFR 中的ICF1置位)時(shí),中斷例程($005)將執(zhí)行 位4:OCIE1A T/C1輸出比較A 匹配中斷使能 當(dāng)OCIE1A和I都為1時(shí),輸出比較A匹配中斷使能。當(dāng)T/C1的比較A 匹配發(fā)生(即TIFR中的OCF1A置位)時(shí),中斷例程($006)將執(zhí)行 位3:OCIE1B T/C1 輸出比較B 匹配中斷使能 當(dāng)OCIE1B和I都為1時(shí),輸出比較B匹配中斷使能。當(dāng)T/C1 的比較B 匹配發(fā)生(即TIFR 中的OCF1B置位)時(shí),中斷例程($007)將執(zhí)行 位2:TOIE1 T/C1 溢出中斷使能 當(dāng)TO

35、IE1和I 都為1時(shí),T/C1溢出中斷使能。當(dāng)T/C1溢出(即TIFR 中的TOV1 位置位)時(shí),中斷例程($008)得到執(zhí)行 位1:Res 保留位,讀出為0位0:TOIE0 T/C0 溢出中斷使能 當(dāng)TOIE0和I 都為1時(shí),T/C0溢出中斷使能。當(dāng)T/C0溢出(即TIFR 中的TOV0 位置位)時(shí),中斷例程($009)得到執(zhí)行 4、定時(shí)器/計(jì)數(shù)器中斷標(biāo)志寄存器TIFR位7:OCF2 T/C2輸出比較標(biāo)志 當(dāng)T/C2 與OCR2 的值匹配時(shí),OCF2 置位。 此位在執(zhí)行中斷例程時(shí)硬件清零,或者通過對(duì)其寫 1 來清零。當(dāng)SREG中的位I、OCIE2和OCF2 一同置位時(shí),中斷例程得到執(zhí)行位6:

36、TOV2 T/C2溢出中斷使能 當(dāng)T/C2 溢出時(shí),TOV2置位。執(zhí)行相應(yīng)的中斷例程時(shí)此位硬件清零,也可通過向其寫 1來清零。 當(dāng)SREG 中的位I、TOIE2和TOV2一同置位時(shí),中斷例程得到執(zhí)行。在PWM模式中,當(dāng)T/C2在$00 改變計(jì)數(shù)方向時(shí),TOV2置位 位5:ICF1 輸入捕獲標(biāo)志1 當(dāng)輸入捕獲事件發(fā)生時(shí),ICF1置位,表明T/C1 的值已經(jīng)送到輸入捕獲寄存器ICR1。清零方式同前。當(dāng)SREG中的位I、TICIE1和ICF1一同置位時(shí)中斷例程得到執(zhí)行位4:OCF1A 輸出比較標(biāo)志1A當(dāng)T/C1與輸出比較寄存器OCR1A的值匹配時(shí),OCF1A置位。清零方式同前。當(dāng)SREG 中的位I、

37、OCIE1A和OCF1A 一同置位時(shí) 中斷例程得到執(zhí)行位3:OCF1B 輸出比較標(biāo)志1B當(dāng)T/C1與輸出比較寄存器OCR1B的值匹配時(shí),OCF1B置位。清零及中斷與上面類似 位2:TOV1 T/C1溢出標(biāo)志 當(dāng)T/C1溢出時(shí),TOV1置位。當(dāng)SREG 中的位I、TOIE1和TOV1一同置位時(shí),中斷例程得到執(zhí)行。在PWM 模式中,當(dāng)T/C1 在$0000 改變計(jì)數(shù)方向時(shí),TOV1 置位位1:保留位。讀出為0位0:TOV0 T/C0溢出標(biāo)志當(dāng)T/C0溢出時(shí),TOV0置位。當(dāng)SREG 中的位I、TOIE0和TOV0一同置位時(shí),中斷例程得到執(zhí)行 5.4 外 部 中 斷外部中斷由INT0 (PD2)和I

38、NT1 (PD3)引腳觸發(fā)。應(yīng)當(dāng)注意:如果中斷使能,則即使INT0/INT1配置為輸出,也可觸發(fā)中斷。此特性提供了一個(gè)產(chǎn)生軟件中斷的方法。觸發(fā)方式可為上升沿、下降沿、邏輯變化或低電平,由MCU控制寄存器MCUCR設(shè)定。當(dāng)設(shè)置為低電平觸發(fā)并使能中斷時(shí),只要電平為低,中斷就一直觸發(fā) 5.5 中 斷 響 應(yīng) 時(shí) 間 AVR中斷響應(yīng)時(shí)間最少為4個(gè)時(shí)鐘周期。在這4個(gè)時(shí)鐘期間,PC(2個(gè)字節(jié))自動(dòng)入棧,而SP減2。在通常情況下,中斷向量處為一個(gè)相對(duì)跳轉(zhuǎn)指令,此跳轉(zhuǎn)要花2個(gè)時(shí)鐘周期。如果中斷在一個(gè)多周期指令執(zhí)行期間發(fā)生,則在此多周期指令執(zhí)行完后,MCU才會(huì)執(zhí)行中斷程序從中斷例程返回亦需4個(gè)時(shí)鐘周期。在此期間

39、,PC將被彈出棧,SP增2,SREG 的位I 被置位 AVR退出中斷程序時(shí),總是返回到主程序并執(zhí)行一條指令之后才能再響應(yīng)被掛起的中斷 5.6 MCU控 制 寄 存 器 MCUCR位7:SE 休眠使能 執(zhí)行SLEEP指令時(shí),SE位必須置位才能使MCU進(jìn)入休眠模式。為了防止無意間使MCU進(jìn)入休眠,建議與SLEEP指令相連使用(即:真要MCU進(jìn)入休眠時(shí),先置位SE,緊接著執(zhí)行SLEEP指令) 位6,5,4:SM2,SM1,SM0 休眠模式選擇位 這三位用于選擇休眠模式。見下表 位3,2:ISC11, ISC10 中斷檢測(cè)控制1,位1和位0 選擇INT1中斷的邊沿或電平注意:改變ISC11/ISC10

40、時(shí),首先要禁止INT1(清除GICR 的INT1位),否則可能引發(fā)不必要的中斷(對(duì)于INT0也類似)ISC11 ISC10描述0 0 INT1低電平中斷0 1上升沿和下降沿都觸發(fā)中斷1 0 INT1下降沿中斷1 1 INT1上升沿中斷 位1,0:ISC01, ISC00 中斷檢測(cè)控制0,位1和位0 選擇INT0中斷的邊沿或電平 INTn 引腳的電平在檢測(cè)邊沿之前采樣。如果選擇邊沿中斷,則寬于一個(gè)CPU 時(shí)鐘的脈沖將觸發(fā)中斷。太窄的脈沖不能保證中斷。如果選擇了低電平觸發(fā),則低電平必須保持到當(dāng)前執(zhí)行的指令結(jié)束才會(huì)引發(fā)中斷ISC01 ISC00描述0 0 INT0低電平中斷0 1上升沿和下降沿都觸發(fā)

41、中斷1 0 INT0下降沿中斷1 1 INT0上升沿中斷 補(bǔ)充例:中斷計(jì)數(shù)int0(PD2),int1(PD3)分別通過按鍵接地,r27:r26存計(jì)數(shù)值(初值為0),按int0一次計(jì)數(shù)增10,按int1一次計(jì)數(shù)增1,計(jì)數(shù)值在5位共陰數(shù)碼管中顯示,PA口驅(qū)動(dòng)字線,PC0PC4分別選擇個(gè)位萬位 部分程序代碼:.include 8535def.inc.org $000rjmp main.org $001rjmp ext_int0.org $002rjmp ext_int1.org $011tab:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6fmain:ldi

42、r16,low(ramend)out spl,r16ldi r16,high(ramend)out sph,r16 ldi r16,0b00001011 ;int1下降沿中斷,int0上升沿中斷out mcucr,r16clr r16out ddrd,r16 ;PD口設(shè)為輸入ser r16out portd,r16 ;使能上拉out ddra,r16 ;PA、PC口設(shè)為輸出out ddrc,r16out gifr,r16 ;清中斷標(biāo)志寄存器ldi r16,$C0out gimsk,r16 ;允許int0 int1中斷l(xiāng)di r26,0 ;r27:r26初值為0ldi r27,0sei aa: mov r16,r26mov r17,r27rcall b16td5 ;調(diào)二轉(zhuǎn)十子程 mov r22,r20 ;將 BCD 碼送 r18r22 mov r21,r19 mov r20,r18 mov r19,r17 mov r18,r16 rcall smiao ;調(diào)動(dòng)態(tài)掃描子程 rjmp aa ext_int0:adiw r26,10retiext_int1:adiw r26,1reti

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!