?? 007.lst
字號:
__start:
__text_start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E1 CPI R30,0x61
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E005C CALL _main
_exit:
004A CFFF RJMP _exit
FILE: E:\ICCAVR\project\AVRMEG~2\icc\007-T1-LED\main.c
(0001) /*
(0002) 實驗七:
(0003) 定時器T1中斷實驗。
(0004) 1、定時器中斷實驗。定時器產(chǎn)生10mS周期中斷,通過計數(shù)讓PB1電平產(chǎn)生周期變化。
(0005) 2、內(nèi)部1 M晶振。
(0006) 3、進(jìn)行此實驗請插上JP1的所有8個短路塊,JP7(LED_EN)短路塊。
(0007)
(0008) AVR mega16學(xué)習(xí)板
(0009) www.iccavr.com
(0010) 2006-04-03
(0011) */
(0012)
(0013) #include "iom16v.h"
(0014) #include <macros.h>
(0015)
(0016) /*初始化定時器,產(chǎn)生10mS周期中斷*/
(0017) void T1_Init(void) {
(0018)
(0019) OCR1A = 1250; /*計數(shù)周期為10mS,F(xiàn)=1M*/
_T1_Init:
004B EE82 LDI R24,0xE2
004C E094 LDI R25,4
004D BD9B OUT 0x2B,R25
004E BD8A OUT 0x2A,R24
(0020) TIMSK |= (1 << OCIE1A); /*比較中斷A允許*/
004F B789 IN R24,0x39
0050 6180 ORI R24,0x10
0051 BF89 OUT 0x39,R24
(0021) SREG = 0x80;
0052 E880 LDI R24,0x80
0053 BF8F OUT 0x3F,R24
(0022) TCCR1A = 0x00;
0054 2422 CLR R2
0055 BC2F OUT 0x2F,R2
(0023) TCCR1B = 0x08; /*定時器工作在CTC計數(shù)器模式*/
0056 E088 LDI R24,0x8
0057 BD8E OUT 0x2E,R24
(0024) TCCR1B |= 0x02; /*設(shè)置定時器的分頻值為8分頻*/
0058 B58E IN R24,0x2E
0059 6082 ORI R24,2
005A BD8E OUT 0x2E,R24
005B 9508 RET
(0025) }
(0026)
(0027) void main(void) {
(0028)
(0029) DDRA = 0x00; /*方向輸入*/
_main:
005C 2422 CLR R2
005D BA2A OUT 0x1A,R2
(0030) PORTA = 0xFF; /*打開上拉*/
005E EF8F LDI R24,0xFF
005F BB8B OUT 0x1B,R24
(0031) DDRB = 0xFF; /*方向輸出*/
0060 BB87 OUT 0x17,R24
(0032) PORTB = 0xFF; /*電平設(shè)置*/
0061 BB88 OUT 0x18,R24
(0033) DDRC = 0x00;
0062 BA24 OUT 0x14,R2
(0034) PORTC = 0xFF;
0063 BB85 OUT 0x15,R24
(0035) DDRD = 0x00;
0064 BA21 OUT 0x11,R2
(0036) PORTD = 0xFF;
0065 BB82 OUT 0x12,R24
(0037)
(0038) T1_Init();
0066 DFE4 RCALL _T1_Init
(0039) SEI(); /*中斷使能*/
0067 9478 BSET 7
(0040)
(0041) while (1);
0068 CFFF RJMP 0x0068
0069 9508 RET
_Int_TCCR1A:
006A 922A ST R2,-Y
006B 938A ST R24,-Y
006C 939A ST R25,-Y
006D B62F IN R2,0x3F
006E 922A ST R2,-Y
(0042) }
(0043)
(0044) /*定時器T1 TCCR1A組比較匹配中斷*/
(0045) #pragma interrupt_handler Int_TCCR1A: 7
(0046) void Int_TCCR1A(void) {
(0047)
(0048) static unsigned char i;
(0049)
(0050) if (i > 20) {
006F E184 LDI R24,0x14
0070 90200060 LDS R2,i
0072 1582 CP R24,R2
0073 F440 BCC 0x007C
(0051) PORTB ^= (1 << PB1);
0074 E082 LDI R24,2
0075 B228 IN R2,0x18
0076 2628 EOR R2,R24
0077 BA28 OUT 0x18,R2
(0052) i = 0;
0078 2422 CLR R2
0079 92200060 STS i,R2
(0053) }
007B C005 RJMP 0x0081
(0054) else {
(0055) i ++;
007C 91800060 LDS R24,i
007E 5F8F SUBI R24,0xFF
007F 93800060 STS i,R24
(0056) }
FILE: <library>
0081 9029 LD R2,Y+
0082 BE2F OUT 0x3F,R2
0083 9199 LD R25,Y+
0084 9189 LD R24,Y+
0085 9029 LD R2,Y+
0086 9518 RETI
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -