📄 q1.lst
字号:
__start:
__text_start:
002B E5CF LDI R28,0x5F
002C E0D4 LDI R29,4
002D BFCD OUT 0x3D,R28
002E BFDE OUT 0x3E,R29
002F 51C0 SUBI R28,0x10
0030 40D0 SBCI R29,0
0031 EA0A LDI R16,0xAA
0032 8308 STD Y+0,R16
0033 2400 CLR R0
0034 E6E1 LDI R30,0x61
0035 E0F0 LDI R31,0
0036 E010 LDI R17,0
0037 36E1 CPI R30,0x61
0038 07F1 CPC R31,R17
0039 F011 BEQ 0x003C
003A 9201 ST R0,Z+
003B CFFB RJMP 0x0037
003C 8300 STD Z+0,R16
003D E5E4 LDI R30,0x54
003E E0F0 LDI R31,0
003F E6A0 LDI R26,0x60
0040 E0B0 LDI R27,0
0041 E010 LDI R17,0
0042 35E5 CPI R30,0x55
0043 07F1 CPC R31,R17
0044 F021 BEQ 0x0049
0045 95C8 LPM
0046 9631 ADIW R30,1
0047 920D ST R0,X+
0048 CFF9 RJMP 0x0042
0049 940E008F CALL _main
_exit:
004B CFFF RJMP _exit
FILE: q1.c
(0001) #include "iom16v.h"
(0002) #define LOBYTE(a) ((BYTE)(a&0x0f))
(0003) #define HIBYTE(a) ((BYTE)((a)>>4))
(0004) #define _asm asm
(0005) #define WDR() asm("wdr")
(0006) #define SEI() asm("sei")
(0007) #define CLI() asm("cli")
(0008) #define NOP() asm("nop")
(0009) #define SLEEP() asm("sleep")
(0010) #define led_on() (PORTA =0x00)
(0011) #define led_off() (PORTA =0xff)
(0012) char i=0;
(0013) void delay_2us(int time)//微秒级延时程序
(0014) {
(0015) do
(0016) {
(0017) time--;
_delay_2us:
time --> R16
004C 5001 SUBI R16,1
004D 4010 SBCI R17,0
(0018) //WDR();
(0019) }
(0020) while (time>1);
004E E081 LDI R24,1
004F E090 LDI R25,0
0050 1780 CP R24,R16
0051 0791 CPC R25,R17
0052 F3CC BLT 0x004C
0053 9508 RET
_delay_ms:
time --> R20
0054 940E00A2 CALL push_gset1
0056 01A8 MOVW R20,R16
(0021) }
(0022) void delay_ms(unsigned int time)//毫秒级延时程序
(0023) {
0057 C005 RJMP 0x005D
(0024) while(time!=0)
(0025) {
(0026) delay_2us(500);
0058 EF04 LDI R16,0xF4
0059 E011 LDI R17,1
005A DFF1 RCALL _delay_2us
(0027) time--;
005B 5041 SUBI R20,1
005C 4050 SBCI R21,0
005D 3040 CPI R20,0
005E 0745 CPC R20,R21
005F F7C1 BNE 0x0058
0060 940E00A5 CALL pop_gset1
0062 9508 RET
(0028) }
(0029) //WDR();
(0030) }
(0031) void port_init(void)
(0032) {
(0033) DDRA = 0xff;
_port_init:
0063 EF8F LDI R24,0xFF
0064 BB8A OUT 0x1A,R24
(0034) PORTA = 0x00;
0065 2422 CLR R2
0066 BA2B OUT 0x1B,R2
0067 9508 RET
(0035) }
(0036) void T_init(void)
(0037) {
(0038) TCCR1A=0x00;
_T_init:
0068 2422 CLR R2
0069 BC2F OUT 0x2F,R2
(0039) TCCR1B=0x00; //停止定时器1
006A BC2E OUT 0x2E,R2
(0040)
(0041) TCNT1H=0xc2;
006B EC82 LDI R24,0xC2
006C BD8D OUT 0x2D,R24
(0042) TCNT1L=0xf7; //定时0.5s
006D EF87 LDI R24,0xF7
006E BD8C OUT 0x2C,R24
(0043)
(0044) TCCR1B=0x04; //256分频
006F E084 LDI R24,4
0070 BD8E OUT 0x2E,R24
0071 9508 RET
_timer1_ovf:
0072 922A ST R2,-Y
0073 938A ST R24,-Y
0074 B62F IN R2,0x3F
0075 922A ST R2,-Y
(0045)
(0046) }
(0047) #pragma interrupt_handler timer1_ovf:9
(0048) void timer1_ovf(void) //位闪动即修改
(0049) {
(0050) TCNT1H=0xc2;
0076 EC82 LDI R24,0xC2
0077 BD8D OUT 0x2D,R24
(0051) TCNT1L=0xf7;
0078 EF87 LDI R24,0xF7
0079 BD8C OUT 0x2C,R24
(0052) TCCR1B=0x04;
007A E084 LDI R24,4
007B BD8E OUT 0x2E,R24
(0053) if(i==1){i=0;led_on();}
007C 91800060 LDS R24,i
007E 3081 CPI R24,1
007F F429 BNE 0x0085
0080 2422 CLR R2
0081 92200060 STS i,R2
0083 BA2B OUT 0x1B,R2
0084 C005 RJMP 0x008A
(0054) else {i=1;led_off();}
0085 E081 LDI R24,1
0086 93800060 STS i,R24
0088 EF8F LDI R24,0xFF
0089 BB8B OUT 0x1B,R24
008A 9029 LD R2,Y+
008B BE2F OUT 0x3F,R2
008C 9189 LD R24,Y+
008D 9029 LD R2,Y+
008E 9518 RETI
(0055) }
(0056) void main(void)
(0057) {
(0058) port_init();
_main:
008F DFD3 RCALL _port_init
(0059) T_init();
0090 DFD7 RCALL _T_init
(0060) TIMSK=0X45;
0091 E485 LDI R24,0x45
0092 BF89 OUT 0x39,R24
(0061) SEI();
0093 9478 BSET 7
0094 C003 RJMP 0x0098
(0062) while(1)
(0063) {
(0064) delay_ms(1000);
FILE: <library>
0095 EE08 LDI R16,0xE8
0096 E013 LDI R17,3
0097 DFBC RCALL _delay_ms
0098 CFFC RJMP 0x0095
0099 9508 RET
push_gset5:
009A 92FA ST R15,-Y
009B 92EA ST R14,-Y
push_gset4:
009C 92DA ST R13,-Y
009D 92CA ST R12,-Y
push_gset3:
009E 92BA ST R11,-Y
009F 92AA ST R10,-Y
push_gset2:
00A0 937A ST R23,-Y
00A1 936A ST R22,-Y
push_gset1:
00A2 935A ST R21,-Y
00A3 934A ST R20,-Y
00A4 9508 RET
pop_gset1:
00A5 E0E1 LDI R30,1
pop:
00A6 9149 LD R20,Y+
00A7 9159 LD R21,Y+
00A8 FDE0 SBRC R30,0
00A9 9508 RET
00AA 9169 LD R22,Y+
00AB 9179 LD R23,Y+
00AC FDE1 SBRC R30,1
00AD 9508 RET
00AE 90A9 LD R10,Y+
00AF 90B9 LD R11,Y+
00B0 FDE2 SBRC R30,2
00B1 9508 RET
00B2 90C9 LD R12,Y+
00B3 90D9 LD R13,Y+
00B4 FDE3 SBRC R30,3
00B5 9508 RET
00B6 90E9 LD R14,Y+
00B7 90F9 LD R15,Y+
00B8 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -