📄 master.lis
字号:
.module master.c
.area text(rom, con, rel)
0000 .dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\master.c
.area data(ram, con, rel)
0000 .dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\master.c
0000 _k::
0000 .blkb 1
.area idata
0000 01 .byte 1
.area data(ram, con, rel)
0001 .dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\master.c
0001 .dbsym e k _k c
.area text(rom, con, rel)
0000 .dbfile D:\MYDOCU~1\MYMCUW~1\AVR\spi\master.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R10,R11
0000 ; j -> R12,R13
0000 ; z -> R16,R17
.even
0000 _delay::
0000 0E940000 xcall push_xgset003C
0004 .dbline -1
0004 .dbline 20
0004 ; //包含所需头文件
0004 ; #include <ioM16v.h>
0004 ; #include <macros.h>
0004 ;
0004 ;
0004 ;
0004 ;
0004 ; /*------宏定义------*/
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ;
0004 ; uchar k=1;
0004 ;
0004 ; /*------函数定义------*/
0004 ; //SPI函数
0004 ; void spi_write(uchar sData);
0004 ; uchar spi_read(void);
0004 ;
0004 ; void delay(uint z)
0004 ; {
0004 .dbline 22
0004 ; uint i,j;
0004 ; for(i=0;i<z;i++)
0004 AA24 clr R10
0006 BB24 clr R11
0008 0EC0 xjmp L5
000A L2:
000A .dbline 23
000A ; for(j=0;j<1000;j++);
000A CC24 clr R12
000C DD24 clr R13
000E 03C0 xjmp L9
0010 L6:
0010 .dbline 23
0010 L7:
0010 .dbline 23
0010 C601 movw R24,R12
0012 0196 adiw R24,1
0014 6C01 movw R12,R24
0016 L9:
0016 .dbline 23
0016 C601 movw R24,R12
0018 883E cpi R24,232
001A E3E0 ldi R30,3
001C 9E07 cpc R25,R30
001E C0F3 brlo L6
0020 X0:
0020 L3:
0020 .dbline 22
0020 C501 movw R24,R10
0022 0196 adiw R24,1
0024 5C01 movw R10,R24
0026 L5:
0026 .dbline 22
0026 A016 cp R10,R16
0028 B106 cpc R11,R17
002A 78F3 brlo L2
002C X1:
002C .dbline -2
002C L1:
002C .dbline 0 ; func end
002C 0C940000 xjmp pop_xgset003C
0030 .dbsym r i 10 i
0030 .dbsym r j 12 i
0030 .dbsym r z 16 i
0030 .dbend
0030 .dbfunc e port_init _port_init fV
.even
0030 _port_init::
0030 .dbline -1
0030 .dbline 29
0030 ; }
0030 ;
0030 ;
0030 ; //端口初始化
0030 ; void port_init(void)
0030 ; {
0030 .dbline 30
0030 ; PORTA = 0x00;
0030 2224 clr R2
0032 2BBA out 0x1b,R2
0034 .dbline 31
0034 ; DDRA = 0x00;
0034 2ABA out 0x1a,R2
0036 .dbline 32
0036 ; PORTB = 0x00;
0036 28BA out 0x18,R2
0038 .dbline 33
0038 ; DDRB = 0x00;
0038 27BA out 0x17,R2
003A .dbline 34
003A ; PORTC = 0x00;
003A 25BA out 0x15,R2
003C .dbline 35
003C ; DDRC = 0x00;
003C 24BA out 0x14,R2
003E .dbline 36
003E ; PORTD = 0x00;
003E 22BA out 0x12,R2
0040 .dbline 37
0040 ; DDRD = 0x00;
0040 21BA out 0x11,R2
0042 .dbline -2
0042 L10:
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbend
0044 .dbfunc e spi_init _spi_init fV
.even
0044 _spi_init::
0044 .dbline -1
0044 .dbline 42
0044 ; }
0044 ;
0044 ;
0044 ; void spi_init(void)
0044 ; {
0044 .dbline 44
0044 ; //spi初始化
0044 ; PORTB |= (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7);
0044 88B3 in R24,0x18
0046 806F ori R24,240
0048 88BB out 0x18,R24
004A .dbline 45
004A ; DDRB|=BIT(PB7)|BIT(PB5)|BIT(PB4);
004A 87B3 in R24,0x17
004C 806B ori R24,176
004E 87BB out 0x17,R24
0050 .dbline 46
0050 ; SPCR = 0x50;
0050 80E5 ldi R24,80
0052 8DB9 out 0xd,R24
0054 .dbline 47
0054 ; SPSR = 0x00;
0054 2224 clr R2
0056 2EB8 out 0xe,R2
0058 .dbline -2
0058 L11:
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbend
005A .dbfunc e spi_write _spi_write fV
005A ; sData -> R16
.even
005A _spi_write::
005A .dbline -1
005A .dbline 53
005A ; }
005A ;
005A ;
005A ; //功能:使用SPI发送一个字节
005A ; void spi_write(uchar sData)
005A ; {
005A .dbline 55
005A ;
005A ; SPDR = sData;
005A 0FB9 out 0xf,R16
005C L13:
005C .dbline 56
005C ; while(!(SPSR & BIT(SPIF)));
005C L14:
005C .dbline 56
005C 779B sbis 0xe,7
005E FECF rjmp L13
0060 X2:
0060 .dbline -2
0060 L12:
0060 .dbline 0 ; func end
0060 0895 ret
0062 .dbsym r sData 16 c
0062 .dbend
0062 .dbfunc e spi_read _spi_read fc
.even
0062 _spi_read::
0062 .dbline -1
0062 .dbline 63
0062 ; //sData=SPDR;//读从机发回来的数据
0062 ; }
0062 ;
0062 ;
0062 ; //功能:使用SPI接收一个字节
0062 ; uchar spi_read(void)
0062 ; {
0062 .dbline 64
0062 ; SPDR = 0x00;
0062 2224 clr R2
0064 2FB8 out 0xf,R2
0066 L17:
0066 .dbline 65
0066 ; while(!(SPSR & BIT(SPIF)));
0066 L18:
0066 .dbline 65
0066 779B sbis 0xe,7
0068 FECF rjmp L17
006A X3:
006A .dbline 66
006A ; return SPDR;
006A 0FB1 in R16,0xf
006C .dbline -2
006C L16:
006C .dbline 0 ; func end
006C 0895 ret
006E .dbend
006E .dbfunc e init_devices _init_devices fV
.even
006E _init_devices::
006E .dbline -1
006E .dbline 71
006E ; }
006E ;
006E ;
006E ; void init_devices(void)
006E ; {
006E .dbline 72
006E ; CLI(); //禁止所有中断
006E F894 cli
0070 .dbline 73
0070 ; MCUCR = 0x00;
0070 2224 clr R2
0072 25BE out 0x35,R2
0074 .dbline 74
0074 ; MCUCSR = 0x80;//禁止JTAG
0074 80E8 ldi R24,128
0076 84BF out 0x34,R24
0078 .dbline 75
0078 ; GICR = 0x00;
0078 2BBE out 0x3b,R2
007A .dbline 76
007A ; port_init();
007A DADF xcall _port_init
007C .dbline 77
007C ; spi_init();
007C E3DF xcall _spi_init
007E .dbline 78
007E ; SEI();//开全局中断
007E 7894 sei
0080 .dbline -2
0080 L20:
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbend
0082 .dbfunc e main _main fV
0082 ; a -> R10,R11
.even
0082 _main::
0082 .dbline -1
0082 .dbline 82
0082 ; }
0082 ; //主函数
0082 ; void main(void)
0082 ; {
0082 .dbline 83
0082 ; uint a=1000;
0082 88EE ldi R24,1000
0084 93E0 ldi R25,3
0086 5C01 movw R10,R24
0088 .dbline 84
0088 ; init_devices();
0088 F2DF xcall _init_devices
008A L22:
008A .dbline 86
008A ; //在这继续添加你的代码
008A ; do{
008A .dbline 87
008A ; PORTB&=~BIT(PB4);
008A C498 cbi 0x18,4
008C .dbline 88
008C ; spi_write(k*25);
008C 20900000 lds R2,_k
0090 89E1 ldi R24,25
0092 829D mul R24,R2
0094 002D mov R16,R0
0096 E1DF xcall _spi_write
0098 .dbline 89
0098 ; PORTB|=BIT(PB4);
0098 C49A sbi 0x18,4
009A .dbline 90
009A ; delay(100);
009A 04E6 ldi R16,100
009C 10E0 ldi R17,0
009E B0DF xcall _delay
00A0 .dbline 91
00A0 ; k++;
00A0 80910000 lds R24,_k
00A4 8F5F subi R24,255 ; addi 1
00A6 80930000 sts _k,R24
00AA .dbline 92
00AA ; }
00AA L23:
00AA .dbline 93
00AA ; while(!(spi_read()==255));
00AA DBDF xcall _spi_read
00AC 0F3F cpi R16,255
00AE 69F7 brne L22
00B0 X4:
00B0 L25:
00B0 .dbline 95
00B0 ; while(1)
00B0 ; {
00B0 .dbline 96
00B0 ; ;
00B0 .dbline 97
00B0 ; }
00B0 L26:
00B0 .dbline 94
00B0 FFCF xjmp L25
00B2 X5:
00B2 .dbline -2
00B2 L21:
00B2 .dbline 0 ; func end
00B2 0895 ret
00B4 .dbsym r a 10 i
00B4 .dbend
00B4 ; }
00B4 ;
00B4 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -