?? main.s
字號:
.module main.c
.area text(rom, con, rel)
.dbfile E:\ICCAVR\project\AVRMEG~2\icc\007-T1-LED\main.c
.dbfunc e T1_Init _T1_Init fV
.even
_T1_Init::
.dbline -1
.dbline 17
; /*
; 實驗七:
; 定時器T1中斷實驗。
; 1、定時器中斷實驗。定時器產生10mS周期中斷,通過計數讓PB1電平產生周期變化。
; 2、內部1 M晶振。
; 3、進行此實驗請插上JP1的所有8個短路塊,JP7(LED_EN)短路塊。
;
; AVR mega16學習板
; www.iccavr.com
; 2006-04-03
; */
;
; #include "iom16v.h"
; #include <macros.h>
;
; /*初始化定時器,產生10mS周期中斷*/
; void T1_Init(void) {
.dbline 19
;
; OCR1A = 1250; /*計數周期為10mS,F=1M*/
ldi R24,1250
ldi R25,4
out 0x2b,R25
out 0x2a,R24
.dbline 20
; TIMSK |= (1 << OCIE1A); /*比較中斷A允許*/
in R24,0x39
ori R24,16
out 0x39,R24
.dbline 21
; SREG = 0x80;
ldi R24,128
out 0x3f,R24
.dbline 22
; TCCR1A = 0x00;
clr R2
out 0x2f,R2
.dbline 23
; TCCR1B = 0x08; /*定時器工作在CTC計數器模式*/
ldi R24,8
out 0x2e,R24
.dbline 24
; TCCR1B |= 0x02; /*設置定時器的分頻值為8分頻*/
in R24,0x2e
ori R24,2
out 0x2e,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 27
; }
;
; void main(void) {
.dbline 29
;
; DDRA = 0x00; /*方向輸入*/
clr R2
out 0x1a,R2
.dbline 30
; PORTA = 0xFF; /*打開上拉*/
ldi R24,255
out 0x1b,R24
.dbline 31
; DDRB = 0xFF; /*方向輸出*/
out 0x17,R24
.dbline 32
; PORTB = 0xFF; /*電平設置*/
out 0x18,R24
.dbline 33
; DDRC = 0x00;
out 0x14,R2
.dbline 34
; PORTC = 0xFF;
out 0x15,R24
.dbline 35
; DDRD = 0x00;
out 0x11,R2
.dbline 36
; PORTD = 0xFF;
out 0x12,R24
.dbline 38
;
; T1_Init();
xcall _T1_Init
.dbline 39
; SEI(); /*中斷使能*/
sei
L3:
.dbline 41
L4:
.dbline 41
xjmp L3
X0:
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 24
jmp _Int_TCCR1A
.area text(rom, con, rel)
.dbfile E:\ICCAVR\project\AVRMEG~2\icc\007-T1-LED\main.c
.area bss(ram, con, rel)
.dbfile E:\ICCAVR\project\AVRMEG~2\icc\007-T1-LED\main.c
L7:
.blkb 1
.area text(rom, con, rel)
.dbfile E:\ICCAVR\project\AVRMEG~2\icc\007-T1-LED\main.c
.dbfunc e Int_TCCR1A _Int_TCCR1A fV
.dbsym s i L7 c
.even
_Int_TCCR1A::
st -y,R2
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 46
;
; while (1);
; }
;
; /*定時器T1 TCCR1A組比較匹配中斷*/
; #pragma interrupt_handler Int_TCCR1A: 7
; void Int_TCCR1A(void) {
.dbline 50
;
; static unsigned char i;
;
; if (i > 20) {
ldi R24,20
lds R2,L7
cp R24,R2
brsh L8
.dbline 50
.dbline 51
; PORTB ^= (1 << PB1);
ldi R24,2
in R2,0x18
eor R2,R24
out 0x18,R2
.dbline 52
; i = 0;
clr R2
sts L7,R2
.dbline 53
; }
xjmp L9
L8:
.dbline 54
.dbline 55
lds R24,L7
subi R24,255 ; addi 1
sts L7,R24
.dbline 56
L9:
.dbline -2
L6:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -