📄 int0.lst
字号:
__start:
__text_start:
0033 E5CF LDI R28,0x5F
0034 E0D4 LDI R29,4
0035 BFCD OUT 0x3D,R28
0036 BFDE OUT 0x3E,R29
0037 51C0 SUBI R28,0x10
0038 40D0 SBCI R29,0
0039 EA0A LDI R16,0xAA
003A 8308 STD Y+0,R16
003B 2400 CLR R0
003C E7E2 LDI R30,0x72
003D E0F0 LDI R31,0
003E E010 LDI R17,0
003F 37E2 CPI R30,0x72
0040 07F1 CPC R31,R17
0041 F011 BEQ 0x0044
0042 9201 ST R0,Z+
0043 CFFB RJMP 0x003F
0044 8300 STD Z+0,R16
0045 E5E4 LDI R30,0x54
0046 E0F0 LDI R31,0
0047 E6A0 LDI R26,0x60
0048 E0B0 LDI R27,0
0049 E010 LDI R17,0
004A 36E6 CPI R30,0x66
004B 07F1 CPC R31,R17
004C F021 BEQ 0x0051
004D 95C8 LPM
004E 9631 ADIW R30,1
004F 920D ST R0,X+
0050 CFF9 RJMP 0x004A
0051 940E00EC CALL _main
_exit:
0053 CFFF RJMP _exit
FILE: C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\delay.h
(0001) #include <iom16v.h>
(0002)
(0003)
(0004) void delay_1us(void)
(0005) {
(0006) asm("nop");
_delay_1us:
0054 0000 NOP
0055 9508 RET
_delay_nus:
i --> R20
n --> R22
0056 940E0104 CALL push_gset2
0058 01B8 MOVW R22,R16
(0007) }
(0008)
(0009) void delay_nus(unsigned int n)
(0010) {
(0011) unsigned int i=0;
0059 2744 CLR R20
005A 2755 CLR R21
(0012) for (i=0;i<n;i++)
005B C003 RJMP 0x005F
(0013) delay_1us();
005C DFF7 RCALL _delay_1us
005D 5F4F SUBI R20,0xFF
005E 4F5F SBCI R21,0xFF
005F 1746 CP R20,R22
0060 0757 CPC R21,R23
0061 F3D0 BCS 0x005C
0062 940E00FB CALL pop_gset2
0064 9508 RET
(0014) }
(0015)
(0016) void delay_1ms(void)
(0017) {
(0018) unsigned int i;
(0019) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
0065 2700 CLR R16
0066 2711 CLR R17
0067 C002 RJMP 0x006A
0068 5F0F SUBI R16,0xFF
0069 4F1F SBCI R17,0xFF
006A 3704 CPI R16,0x74
006B E0E4 LDI R30,4
006C 071E CPC R17,R30
006D F3D0 BCS 0x0068
006E 9508 RET
_delay:
i --> R20
n --> R22
006F 940E0104 CALL push_gset2
0071 01B8 MOVW R22,R16
(0020) }
(0021)
(0022) void delay(unsigned int n)
(0023) {
(0024) unsigned int i=0;
0072 2744 CLR R20
0073 2755 CLR R21
(0025) for (i=0;i<n;i++)
0074 C003 RJMP 0x0078
(0026) delay_1ms();
0075 DFEF RCALL _delay_1ms
0076 5F4F SUBI R20,0xFF
0077 4F5F SBCI R21,0xFF
0078 1746 CP R20,R22
0079 0757 CPC R21,R23
007A F3D0 BCS 0x0075
007B 940E00FB CALL pop_gset2
007D 9508 RET
FILE: C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
(0001) //ICC-AVR application builder : 2007-5-18 9:57:24
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) #include"delay.h"
(0008) #define uchar unsigned char
(0009) #define uint unsigned int
(0010)
(0011) uchar temp=0;
(0012) unsigned char abc[17]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,
(0013) 0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x00};
(0014)
(0015)
(0016) //----------------SPI初始化------------//
(0017) void SPI_init(void)
(0018) {
(0019) DDRB&=0xbf;
_SPI_init:
007E B387 IN R24,0x17
007F 7B8F ANDI R24,0xBF
0080 BB87 OUT 0x17,R24
(0020) SPCR=(1<<SPE)|(1<<DORD)|(1<<MSTR)|(1<<SPR1);
0081 E782 LDI R24,0x72
0082 B98D OUT 0x0D,R24
0083 9508 RET
(0021) }
(0022) //-------------------SPI发送数据-----------//
(0023) void SPI_send(unsigned char i)
(0024) {
(0025) SPDR=i;
_SPI_send:
i --> R16
0084 B90F OUT 0x0F,R16
(0026) while((SPSR&0x80)==0x00);
0085 9B77 SBIS 0x0E,7
0086 CFFE RJMP 0x0085
0087 9508 RET
(0027) }
(0028)
(0029)
(0030) void port_init(void)
(0031) {
(0032) PORTA = 0x00;
_port_init:
0088 2422 CLR R2
0089 BA2B OUT 0x1B,R2
(0033) DDRA = 0xFF;
008A EF8F LDI R24,0xFF
008B BB8A OUT 0x1A,R24
(0034) PORTB = 0x00;
008C BA28 OUT 0x18,R2
(0035) DDRB = 0xFF;
008D BB87 OUT 0x17,R24
(0036) PORTC = 0x00; //m103 output only
008E BA25 OUT 0x15,R2
(0037) DDRC = 0x00;
008F BA24 OUT 0x14,R2
(0038) PORTD = 0x00;
0090 BA22 OUT 0x12,R2
(0039) DDRD = 0x00;
0091 BA21 OUT 0x11,R2
0092 9508 RET
_int0_isr:
i --> R20
0093 940E011D CALL push_lset
0095 940E0106 CALL push_gset1
(0040) }
(0041)
(0042) #pragma interrupt_handler int0_isr:2
(0043) void int0_isr(void)
(0044) {
(0045) uchar i;
(0046)
(0047) CLI();
0097 94F8 BCLR 7
(0048) {
(0049) for(i=0;i<5;i++)
0098 2744 CLR R20
0099 C009 RJMP 0x00A3
(0050) {
(0051) delay_nus(1000);
009A EE08 LDI R16,0xE8
009B E013 LDI R17,3
009C DFB9 RCALL _delay_nus
(0052) if((PIND&0X04)==0X04)
009D B380 IN R24,0x10
009E 7084 ANDI R24,4
009F 3084 CPI R24,4
00A0 F409 BNE 0x00A2
(0053) {
(0054) return;
00A1 C045 RJMP 0x00E7
00A2 9543 INC R20
00A3 3045 CPI R20,5
00A4 F3A8 BCS 0x009A
(0055) }
(0056) }
(0057) while((PIND&0X04)!=0X04);//等待高电平
00A5 B380 IN R24,0x10
00A6 7084 ANDI R24,4
00A7 3084 CPI R24,4
00A8 F7E1 BNE 0x00A5
(0058) delay_nus(2900);//延时4.8ms
00A9 E504 LDI R16,0x54
00AA E01B LDI R17,0xB
00AB DFAA RCALL _delay_nus
(0059) for(i=0;i<8;i++)
00AC 2744 CLR R20
00AD C021 RJMP 0x00CF
(0060) {
(0061) while((PIND&0X04)!=0X04);//等待高电平
00AE B380 IN R24,0x10
00AF 7084 ANDI R24,4
00B0 3084 CPI R24,4
00B1 F7E1 BNE 0x00AE
(0062) delay_nus(480);//延时480us
00B2 EE00 LDI R16,0xE0
00B3 E011 LDI R17,1
00B4 DFA1 RCALL _delay_nus
(0063) if(PIND&0X04)
00B5 9B82 SBIS 0x10,2
00B6 C00E RJMP 0x00C5
(0064) {
(0065) temp=temp>>1;
00B7 90200060 LDS R2,temp
00B9 9426 LSR R2
00BA 92200060 STS temp,R2
(0066) delay_nus(200);//
00BC EC08 LDI R16,0xC8
00BD E010 LDI R17,0
00BE DF97 RCALL _delay_nus
(0067) temp|=0x80; //数据写入1
00BF 91800060 LDS R24,temp
00C1 6880 ORI R24,0x80
00C2 93800060 STS temp,R24
(0068) }
00C4 C009 RJMP 0x00CE
(0069) else
(0070) {
(0071) temp=temp>>1;
00C5 90200060 LDS R2,temp
00C7 9426 LSR R2
00C8 92200060 STS temp,R2
(0072) temp&=0x7f; //数据写入0
00CA 2D82 MOV R24,R2
00CB 778F ANDI R24,0x7F
00CC 93800060 STS temp,R24
00CE 9543 INC R20
00CF 3048 CPI R20,0x8
00D0 F2E8 BCS 0x00AE
(0073) }
(0074) }
(0075)
(0076) }
(0077) while((PIND&0X04)!=0X04);//等待高电平
00D1 B380 IN R24,0x10
00D2 7084 ANDI R24,4
00D3 3084 CPI R24,4
00D4 F7E1 BNE 0x00D1
(0078) delay_nus(480);//延时480us
00D5 EE00 LDI R16,0xE0
00D6 E011 LDI R17,1
00D7 DF7E RCALL _delay_nus
(0079)
(0080) if(!(PIND&0X04))
00D8 9982 SBIC 0x10,2
00D9 C001 RJMP 0x00DB
(0081)
(0082) {
(0083) return;
00DA C00C RJMP 0x00E7
(0084) }
(0085) /*if(temp==0x06)
(0086) {
(0087) PORTA=temp;
(0088) SPI_send(abc[temp]);
(0089)
(0090)
(0091) }*/
(0092) else
(0093) {
(0094) PORTA=temp;
00DB 90200060 LDS R2,temp
00DD BA2B OUT 0x1B,R2
(0095) SPI_send(abc[temp]);
00DE E681 LDI R24,0x61
00DF E090 LDI R25,0
00E0 2DE2 MOV R30,R2
00E1 27FF CLR R31
00E2 0FE8 ADD R30,R24
00E3 1FF9 ADC R31,R25
00E4 8100 LDD R16,Z+0
00E5 DF9E RCALL _SPI_send
(0096)
(0097) }
(0098) SEI();
00E6 9478 BSET 7
00E7 940E0109 CALL pop_gset1
00E9 940E0134 CALL pop_lset
00EB 9518 RETI
(0099) }
(0100)
(0101) //call this routine to initialize all peripherals
(0102) void main(void)
(0103) {
(0104) //stop errant interrupts until set up
(0105) CLI(); //disable all interrupts
_main:
00EC 94F8 BCLR 7
(0106) port_init();
00ED DF9A RCALL _port_init
(0107) SPI_init();
00EE DF8F RCALL _SPI_init
(0108) MCUCR = 0x02;
00EF E082 LDI R24,2
00F0 BF85 OUT 0x35,R24
(0109) GICR = 0x40;
00F1 E480 LDI R24,0x40
00F2 BF8B OUT 0x3B,R24
(0110) TIMSK = 0x00; //timer interrupt sources
00F3 2422 CLR R2
00F4 BE29 OUT 0x39,R2
(0111) SPI_send(abc[16]);
00F5 91000071 LDS R16,0x71
00F7 DF8C RCALL _SPI_send
(0112) SEI(); //re-enable interrupts
00F8 9478 BSET 7
(0113) //all peripherals are now initialized
(0114) while(1)
FILE: <library>
00F9 CFFF RJMP 0x00F9
00FA 9508 RET
pop_gset2:
00FB E0E2 LDI R30,2
00FC 940C010A JMP pop
push_gset5:
00FE 92FA ST R15,-Y
00FF 92EA ST R14,-Y
push_gset4:
0100 92DA ST R13,-Y
0101 92CA ST R12,-Y
push_gset3:
0102 92BA ST R11,-Y
0103 92AA ST R10,-Y
push_gset2:
0104 937A ST R23,-Y
0105 936A ST R22,-Y
push_gset1:
0106 935A ST R21,-Y
0107 934A ST R20,-Y
0108 9508 RET
pop_gset1:
0109 E0E1 LDI R30,1
pop:
010A 9149 LD R20,Y+
010B 9159 LD R21,Y+
010C FDE0 SBRC R30,0
010D 9508 RET
010E 9169 LD R22,Y+
010F 9179 LD R23,Y+
0110 FDE1 SBRC R30,1
0111 9508 RET
0112 90A9 LD R10,Y+
0113 90B9 LD R11,Y+
0114 FDE2 SBRC R30,2
0115 9508 RET
0116 90C9 LD R12,Y+
0117 90D9 LD R13,Y+
0118 FDE3 SBRC R30,3
0119 9508 RET
011A 90E9 LD R14,Y+
011B 90F9 LD R15,Y+
011C 9508 RET
push_lset:
011D 93FA ST R31,-Y
011E 93EA ST R30,-Y
011F 93BA ST R27,-Y
0120 93AA ST R26,-Y
0121 939A ST R25,-Y
0122 938A ST R24,-Y
0123 933A ST R19,-Y
0124 932A ST R18,-Y
0125 931A ST R17,-Y
0126 930A ST R16,-Y
0127 929A ST R9,-Y
0128 928A ST R8,-Y
0129 927A ST R7,-Y
012A 926A ST R6,-Y
012B 925A ST R5,-Y
012C 924A ST R4,-Y
012D 923A ST R3,-Y
012E 922A ST R2,-Y
012F 921A ST R1,-Y
0130 920A ST R0,-Y
0131 B60F IN R0,0x3F
0132 920A ST R0,-Y
0133 9508 RET
pop_lset:
0134 9009 LD R0,Y+
0135 BE0F OUT 0x3F,R0
0136 9009 LD R0,Y+
0137 9019 LD R1,Y+
0138 9029 LD R2,Y+
0139 9039 LD R3,Y+
013A 9049 LD R4,Y+
013B 9059 LD R5,Y+
013C 9069 LD R6,Y+
013D 9079 LD R7,Y+
013E 9089 LD R8,Y+
013F 9099 LD R9,Y+
0140 9109 LD R16,Y+
0141 9119 LD R17,Y+
0142 9129 LD R18,Y+
0143 9139 LD R19,Y+
0144 9189 LD R24,Y+
0145 9199 LD R25,Y+
0146 91A9 LD R26,Y+
0147 91B9 LD R27,Y+
0148 91E9 LD R30,Y+
0149 91F9 LD R31,Y+
014A 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -