📄 int0.s
字号:
.module INT0.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0/delay.h
.dbfunc e delay_1us _delay_1us fV
.even
_delay_1us::
.dbline -1
.dbline 5
; //ICC-AVR application builder : 2007-5-18 9:57:24
; // Target : M16
; // Crystal: 8.0000Mhz
;
; #include <iom16v.h>
.dbline 6
; #include <macros.h>
nop
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_nus _delay_nus fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nus::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 10
; #include"delay.h"
; #define uchar unsigned char
; #define uint unsigned int
;
.dbline 11
; uchar temp=0;
clr R20
clr R21
.dbline 12
; unsigned char abc[17]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,
xjmp L6
L3:
.dbline 13
xcall _delay_1us
L4:
.dbline 12
subi R20,255 ; offset = 1
sbci R21,255
L6:
.dbline 12
cp R20,R22
cpc R21,R23
brlo L3
.dbline -2
L2:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 17
; 0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x00};
;
;
; //----------------SPI初始化------------//
; void SPI_init(void)
.dbline 19
clr R16
clr R17
xjmp L11
L8:
.dbline 19
L9:
.dbline 19
subi R16,255 ; offset = 1
sbci R17,255
L11:
.dbline 19
; {
; DDRB&=0xbf;
cpi R16,116
ldi R30,4
cpc R17,R30
brlo L8
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay _delay fV
; i -> R20,R21
; n -> R22,R23
.even
_delay::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 23
; SPCR=(1<<SPE)|(1<<DORD)|(1<<MSTR)|(1<<SPR1);
; }
; //-------------------SPI发送数据-----------//
; void SPI_send(unsigned char i)
.dbline 24
; {
clr R20
clr R21
.dbline 25
; SPDR=i;
xjmp L16
L13:
.dbline 26
xcall _delay_1ms
L14:
.dbline 25
subi R20,255 ; offset = 1
sbci R21,255
L16:
.dbline 25
cp R20,R22
cpc R21,R23
brlo L13
.dbline -2
L12:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0/delay.h
_temp::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0/delay.h
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
.dbsym e temp _temp c
_abc::
.blkb 2
.area idata
.byte 252,96
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
.blkb 2
.area idata
.byte 218,242
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
.blkb 2
.area idata
.byte 'f,182
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
.blkb 2
.area idata
.byte 190,224
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
.blkb 2
.area idata
.byte 254,246
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
.blkb 2
.area idata
.byte 238,62
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
.blkb 2
.area idata
.byte 156,'z
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
.blkb 2
.area idata
.byte 158,142
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
.dbsym e abc _abc A[17:17]c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
.dbfunc e SPI_init _SPI_init fV
.even
_SPI_init::
.dbline -1
.dbline 18
.dbline 19
in R24,0x17
andi R24,191
out 0x17,R24
.dbline 20
ldi R24,114
out 0xd,R24
.dbline -2
L17:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SPI_send _SPI_send fV
; i -> R16
.even
_SPI_send::
.dbline -1
.dbline 24
.dbline 25
out 0xf,R16
L19:
.dbline 26
L20:
.dbline 26
; while((SPSR&0x80)==0x00);
sbis 0xe,7
rjmp L19
.dbline -2
L18:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 31
; }
;
;
; void port_init(void)
; {
.dbline 32
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 33
; DDRA = 0xFF;
ldi R24,255
out 0x1a,R24
.dbline 34
; PORTB = 0x00;
out 0x18,R2
.dbline 35
; DDRB = 0xFF;
out 0x17,R24
.dbline 36
; PORTC = 0x00; //m103 output only
out 0x15,R2
.dbline 37
; DDRC = 0x00;
out 0x14,R2
.dbline 38
; PORTD = 0x00;
out 0x12,R2
.dbline 39
; DDRD = 0x00;
out 0x11,R2
.dbline -2
L22:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 4
jmp _int0_isr
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
.dbfunc e int0_isr _int0_isr fV
; i -> R20
.even
_int0_isr::
xcall push_lset
xcall push_gset1
.dbline -1
.dbline 44
; }
;
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
.dbline 47
; uchar i;
;
; CLI();
cli
.dbline 48
; {
.dbline 49
; for(i=0;i<5;i++)
clr R20
xjmp L27
L24:
.dbline 50
; {
.dbline 51
; delay_nus(1000);
ldi R16,1000
ldi R17,3
xcall _delay_nus
.dbline 52
; if((PIND&0X04)==0X04)
in R24,0x10
andi R24,4
cpi R24,4
brne L28
.dbline 53
; {
.dbline 54
; return;
xjmp L23
L28:
.dbline 56
L25:
.dbline 49
inc R20
L27:
.dbline 49
cpi R20,5
brlo L24
L30:
.dbline 57
L31:
.dbline 57
; }
; }
; while((PIND&0X04)!=0X04);//等待高电平
in R24,0x10
andi R24,4
cpi R24,4
brne L30
.dbline 58
; delay_nus(2900);//延时4.8ms
ldi R16,2900
ldi R17,11
xcall _delay_nus
.dbline 59
; for(i=0;i<8;i++)
clr R20
xjmp L36
X0:
.dbline 60
; {
L37:
.dbline 61
L38:
.dbline 61
; while((PIND&0X04)!=0X04);//等待高电平
in R24,0x10
andi R24,4
cpi R24,4
brne L37
.dbline 62
; delay_nus(480);//延时480us
ldi R16,480
ldi R17,1
xcall _delay_nus
.dbline 63
; if(PIND&0X04)
sbis 0x10,2
rjmp L40
.dbline 64
; {
.dbline 65
; temp=temp>>1;
lds R2,_temp
lsr R2
sts _temp,R2
.dbline 66
; delay_nus(200);//
ldi R16,200
ldi R17,0
xcall _delay_nus
.dbline 67
; temp|=0x80; //数据写入1
lds R24,_temp
ori R24,128
sts _temp,R24
.dbline 68
; }
xjmp L41
L40:
.dbline 70
; else
; {
.dbline 71
; temp=temp>>1;
lds R2,_temp
lsr R2
sts _temp,R2
.dbline 72
; temp&=0x7f; //数据写入0
mov R24,R2
andi R24,127
sts _temp,R24
.dbline 73
; }
L41:
.dbline 74
L34:
.dbline 59
inc R20
L36:
.dbline 59
cpi R20,8
brlo L38
.dbline 76
; }
;
; }
L42:
.dbline 77
L43:
.dbline 77
; while((PIND&0X04)!=0X04);//等待高电平
in R24,0x10
andi R24,4
cpi R24,4
brne L42
.dbline 78
; delay_nus(480);//延时480us
ldi R16,480
ldi R17,1
xcall _delay_nus
.dbline 80
;
; if(!(PIND&0X04))
sbic 0x10,2
rjmp L45
.dbline 82
;
; {
.dbline 83
; return;
xjmp L23
L45:
.dbline 93
; }
; /*if(temp==0x06)
; {
; PORTA=temp;
; SPI_send(abc[temp]);
;
;
; }*/
; else
; {
.dbline 94
; PORTA=temp;
lds R2,_temp
out 0x1b,R2
.dbline 95
; SPI_send(abc[temp]);
ldi R24,<_abc
ldi R25,>_abc
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _SPI_send
.dbline 97
;
; }
.dbline 98
; SEI();
sei
.dbline -2
L23:
xcall pop_gset1
xcall pop_lset
.dbline 0 ; func end
reti
.dbsym r i 20 c
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 103
; }
;
; //call this routine to initialize all peripherals
; void main(void)
; {
.dbline 105
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 106
; port_init();
xcall _port_init
.dbline 107
; SPI_init();
xcall _SPI_init
.dbline 108
; MCUCR = 0x02;
ldi R24,2
out 0x35,R24
.dbline 109
; GICR = 0x40;
ldi R24,64
out 0x3b,R24
.dbline 110
; TIMSK = 0x00; //timer interrupt sources
clr R2
out 0x39,R2
.dbline 111
; SPI_send(abc[16]);
lds R16,_abc+16
xcall _SPI_send
.dbline 112
; SEI(); //re-enable interrupts
sei
L49:
.dbline 115
.dbline 118
L50:
.dbline 114
xjmp L49
X1:
.dbline -2
L47:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -