📄 timer.lst
字号:
__text_start:
__start:
0047 EFCF LDI R28,0xFF
0048 E1D0 LDI R29,0x10
0049 BFCD OUT P3D,R28
004A BFDE OUT P3E,R29
004B 51C0 SUBI R28,0x10
004C 40D0 SBCI R29,0
004D EA0A LDI R16,0xAA
004E 8308 STD R16,0+Y
004F 2400 CLR R0
0050 E0E1 LDI R30,1
0051 E0F1 LDI R31,1
0052 E011 LDI R17,1
0053 30E1 CPI R30,1
0054 07F1 CPC R31,R17
0055 F011 BEQ 0x0058
0056 9201 ST R0,Z+
0057 CFFB RJMP 0x0053
0058 8300 STD R16,0+Z
0059 E8EC LDI R30,0x8C
005A E0F0 LDI R31,0
005B E0A0 LDI R26,0
005C E0B1 LDI R27,1
005D E010 LDI R17,0
005E 38ED CPI R30,0x8D
005F 07F1 CPC R31,R17
0060 F021 BEQ 0x0065
0061 95C8 LPM
0062 9631 ADIW R30,1
0063 920D ST R0,X+
0064 CFF9 RJMP 0x005E
0065 940E0068 CALL _main
_exit:
0067 CFFF RJMP _exit
FILE: G:\猛\avr实践\定时器中断\timer.c
(0001) #include <iom128.h>
(0002) #include <macros.h>
(0003)
(0004)
(0005) #define Red_LED_on PORTB&~BIT(0)
(0006) #define Red_LED_off PORTB|(1<<0)
(0007) #define Green_LED_on PORTB&(~(1<<1))
(0008) #define Green_LED_off PORTB|(1<<1)
(0009) #define Yellow_LED_on PORTB&(~(1<<2))
(0010) #define Yellow_LED_off PORTB|(1<<2)
(0011) #define Flag_H PORTB|(1<<3)
(0012) #define Flag_L PORTB&~(1<<3)
(0013)
(0014) #pragma interrupt_handler Timer_INT:15 //定时器中断
(0015)
(0016) void Port_initilaze(void);
(0017) void Timer_initilaze(void);
(0018)
(0019)
(0020) unsigned char flag = 0;
(0021)
(0022) void main(void)
(0023) {
(0024) unsigned char achar;
(0025) unsigned char i;
(0026)
(0027) Port_initilaze();
_main:
i --> Y+1
achar --> Y+1
0068 D00E RCALL _Port_initilaze
(0028) Timer_initilaze();
0069 D011 RCALL _Timer_initilaze
(0029)
(0030)
(0031)
(0032) PORTB = Red_LED_on;
006A 98C0 CBI P18,0
(0033) PORTB = Yellow_LED_on;
006B 98C2 CBI P18,2
(0034) //PORTB = Green_LED_on;
(0035)
(0036)
(0037) for(;;)
(0038) {
(0039) if (flag == 0)
006C 90200100 LDS R2,0x100
006E 2022 TST R2
006F F419 BNE 0x0073
(0040) {
(0041) PORTB = Flag_H;
0070 9AC3 SBI P18,3
(0042) PORTB = Green_LED_off;
0071 9AC1 SBI P18,1
(0043) }
0072 CFF9 RJMP 0x006C
(0044) else
(0045) {
(0046) PORTB = Flag_L;
0073 98C3 CBI P18,3
(0047) PORTB = Green_LED_on;
0074 98C1 CBI P18,1
0075 CFF6 RJMP 0x006C
0076 9508 RET
(0048) }
(0049) }
(0050)
(0051) }
(0052)
(0053) void Port_initilaze(void)
(0054) {
(0055) DDRB = 0xFF;
_Port_initilaze:
0077 EF8F LDI R24,0xFF
0078 BB87 OUT P17,R24
(0056) PORTB = 0xFF;
0079 BB88 OUT P18,R24
(0057) }
007A 9508 RET
(0058) void Timer_initilaze(void)
(0059) {
(0060) TCCR1A = 0x00; //普通方式,引脚作IO用
_Timer_initilaze:
007B 2422 CLR R2
007C BC2F OUT P2F,R2
(0061) TCCR1B = 0x02; //CK/1024
007D E082 LDI R24,2
007E BD8E OUT P2E,R24
(0062) TCCR1C = 0;
007F 9220007A STS 0x7A,R2
(0063) TCNT1 = 0x3d09;
0081 E089 LDI R24,0x9
0082 E39D LDI R25,0x3D
0083 9390004D STS 0x4D,R25
0085 9380004C STS 0x4C,R24
(0064) TIMSK = 0x04; //开放T1溢出中断
0087 E084 LDI R24,4
0088 BF87 OUT P37,R24
(0065)
(0066) SEI();
0089 9478 BSET 7
(0067)
(0068) }
008A 9508 RET
_Timer_INT:
008B 922A ST R2,-Y
008C 938A ST R24,-Y
008D 939A ST R25,-Y
008E B62F IN R2,P3F
008F 922A ST R2,-Y
(0069) void Timer_INT(void)
(0070) {
(0071) TCNT1 = 0x3d09;
0090 E089 LDI R24,0x9
0091 E39D LDI R25,0x3D
0092 9390004D STS 0x4D,R25
0094 9380004C STS 0x4C,R24
(0072) flag = ~flag;
0096 90200100 LDS R2,0x100
0098 9420 COM R2
0099 92200100 STS 0x100,R2
(0073) PORTB = Green_LED_on;
009B 98C1 CBI P18,1
(0074) }
FILE: <library>
009C 9029 LD R2,Y+
009D BE2F OUT P3F,R2
009E 9199 LD R25,Y+
009F 9189 LD R24,Y+
00A0 9029 LD R2,Y+
00A1 9518 RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -