?? main.lis
字號:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRMEG~2\icc\007-T1-LED\main.c
0000 .dbfunc e T1_Init _T1_Init fV
.even
0000 _T1_Init::
0000 .dbline -1
0000 .dbline 17
0000 ; /*
0000 ; 實驗七:
0000 ; 定時器T1中斷實驗。
0000 ; 1、定時器中斷實驗。定時器產生10mS周期中斷,通過計數讓PB1電平產生周期變化。
0000 ; 2、內部1 M晶振。
0000 ; 3、進行此實驗請插上JP1的所有8個短路塊,JP7(LED_EN)短路塊。
0000 ;
0000 ; AVR mega16學習板
0000 ; www.iccavr.com
0000 ; 2006-04-03
0000 ; */
0000 ;
0000 ; #include "iom16v.h"
0000 ; #include <macros.h>
0000 ;
0000 ; /*初始化定時器,產生10mS周期中斷*/
0000 ; void T1_Init(void) {
0000 .dbline 19
0000 ;
0000 ; OCR1A = 1250; /*計數周期為10mS,F=1M*/
0000 82EE ldi R24,1250
0002 94E0 ldi R25,4
0004 9BBD out 0x2b,R25
0006 8ABD out 0x2a,R24
0008 .dbline 20
0008 ; TIMSK |= (1 << OCIE1A); /*比較中斷A允許*/
0008 89B7 in R24,0x39
000A 8061 ori R24,16
000C 89BF out 0x39,R24
000E .dbline 21
000E ; SREG = 0x80;
000E 80E8 ldi R24,128
0010 8FBF out 0x3f,R24
0012 .dbline 22
0012 ; TCCR1A = 0x00;
0012 2224 clr R2
0014 2FBC out 0x2f,R2
0016 .dbline 23
0016 ; TCCR1B = 0x08; /*定時器工作在CTC計數器模式*/
0016 88E0 ldi R24,8
0018 8EBD out 0x2e,R24
001A .dbline 24
001A ; TCCR1B |= 0x02; /*設置定時器的分頻值為8分頻*/
001A 8EB5 in R24,0x2e
001C 8260 ori R24,2
001E 8EBD out 0x2e,R24
0020 .dbline -2
0020 L1:
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbend
0022 .dbfunc e main _main fV
.even
0022 _main::
0022 .dbline -1
0022 .dbline 27
0022 ; }
0022 ;
0022 ; void main(void) {
0022 .dbline 29
0022 ;
0022 ; DDRA = 0x00; /*方向輸入*/
0022 2224 clr R2
0024 2ABA out 0x1a,R2
0026 .dbline 30
0026 ; PORTA = 0xFF; /*打開上拉*/
0026 8FEF ldi R24,255
0028 8BBB out 0x1b,R24
002A .dbline 31
002A ; DDRB = 0xFF; /*方向輸出*/
002A 87BB out 0x17,R24
002C .dbline 32
002C ; PORTB = 0xFF; /*電平設置*/
002C 88BB out 0x18,R24
002E .dbline 33
002E ; DDRC = 0x00;
002E 24BA out 0x14,R2
0030 .dbline 34
0030 ; PORTC = 0xFF;
0030 85BB out 0x15,R24
0032 .dbline 35
0032 ; DDRD = 0x00;
0032 21BA out 0x11,R2
0034 .dbline 36
0034 ; PORTD = 0xFF;
0034 82BB out 0x12,R24
0036 .dbline 38
0036 ;
0036 ; T1_Init();
0036 E4DF xcall _T1_Init
0038 .dbline 39
0038 ; SEI(); /*中斷使能*/
0038 7894 sei
003A L3:
003A .dbline 41
003A L4:
003A .dbline 41
003A FFCF xjmp L3
003C X0:
003C .dbline -2
003C L2:
003C .dbline 0 ; func end
003C 0895 ret
003E .dbend
.area vector(rom, abs)
.org 24
0018 0C941F00 jmp _Int_TCCR1A
.area text(rom, con, rel)
003E .dbfile E:\ICCAVR\project\AVRMEG~2\icc\007-T1-LED\main.c
.area bss(ram, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRMEG~2\icc\007-T1-LED\main.c
0000 L7:
0000 .blkb 1
.area text(rom, con, rel)
003E .dbfile E:\ICCAVR\project\AVRMEG~2\icc\007-T1-LED\main.c
003E .dbfunc e Int_TCCR1A _Int_TCCR1A fV
003E .dbsym s i L7 c
.even
003E _Int_TCCR1A::
003E 2A92 st -y,R2
0040 8A93 st -y,R24
0042 9A93 st -y,R25
0044 2FB6 in R2,0x3f
0046 2A92 st -y,R2
0048 .dbline -1
0048 .dbline 46
0048 ;
0048 ; while (1);
0048 ; }
0048 ;
0048 ; /*定時器T1 TCCR1A組比較匹配中斷*/
0048 ; #pragma interrupt_handler Int_TCCR1A: 7
0048 ; void Int_TCCR1A(void) {
0048 .dbline 50
0048 ;
0048 ; static unsigned char i;
0048 ;
0048 ; if (i > 20) {
0048 84E1 ldi R24,20
004A 20900000 lds R2,L7
004E 8215 cp R24,R2
0050 40F4 brsh L8
0052 .dbline 50
0052 .dbline 51
0052 ; PORTB ^= (1 << PB1);
0052 82E0 ldi R24,2
0054 28B2 in R2,0x18
0056 2826 eor R2,R24
0058 28BA out 0x18,R2
005A .dbline 52
005A ; i = 0;
005A 2224 clr R2
005C 20920000 sts L7,R2
0060 .dbline 53
0060 ; }
0060 05C0 xjmp L9
0062 L8:
0062 .dbline 54
0062 .dbline 55
0062 80910000 lds R24,L7
0066 8F5F subi R24,255 ; addi 1
0068 80930000 sts L7,R24
006C .dbline 56
006C L9:
006C .dbline -2
006C L6:
006C 2990 ld R2,y+
006E 2FBE out 0x3f,R2
0070 9991 ld R25,y+
0072 8991 ld R24,y+
0074 2990 ld R2,y+
0076 .dbline 0 ; func end
0076 1895 reti
0078 .dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -