⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 master.lis

📁 用两片AVR(ATmega16)单片机 实现双机通信(双向
💻 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 + -