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

📄 main.lis

📁 mega16 spi主从通信 测试通过(ICC)
💻 LIS
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\zhuji\桌面\新建文件夹\spi从\main.c
 0000                   .dbfunc e uart0_init _uart0_init fV
                        .even
 0000           _uart0_init::
 0000                   .dbline -1
 0000                   .dbline 7
 0000           ; //再放上SPI从机通信程序
 0000           ; #include "iom16v.h"
 0000           ; #include "macros.h"
 0000           ; #define uchar unsigned char
 0000           ; #define uint  unsigned int
 0000           ; void uart0_init(void)
 0000           ; {
 0000                   .dbline 8
 0000           ;  UCSRB = 0x00; //disable while setting baud rate
 0000 2224              clr R2
 0002 2AB8              out 0xa,R2
 0004                   .dbline 9
 0004           ;  UCSRA = 0x00;
 0004 2BB8              out 0xb,R2
 0006                   .dbline 10
 0006           ;  UCSRC = 0x0B;//
 0006 8BE0              ldi R24,11
 0008 80BD              out 0x20,R24
 000A                   .dbline 11
 000A           ;  UBRRL = 0x2F; //set baud rate lo
 000A 8FE2              ldi R24,47
 000C 89B9              out 0x9,R24
 000E                   .dbline 12
 000E           ;  UBRRH = 0x00; //set baud rate hi  fosc=7372800HZ,Baud=115200
 000E 20BC              out 0x20,R2
 0010                   .dbline 13
 0010           ;  UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);//0xD8;//发送接受使能 中断使能
 0010 88ED              ldi R24,216
 0012 8AB9              out 0xa,R24
 0014                   .dbline -2
 0014                   .dbline 14
 0014           ; }
 0014           L1:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbend
 0016                   .dbfunc e Uart0Send _Uart0Send fV
 0016           ;          CData -> R16
                        .even
 0016           _Uart0Send::
 0016                   .dbline -1
 0016                   .dbline 16
 0016           ; void Uart0Send(uchar CData)
 0016           ; {
 0016           L3:
 0016                   .dbline 17
 0016           L4:
 0016                   .dbline 17
 0016           ;  while(!(UCSRA&0x20));
 0016 5D9B              sbis 0xb,5
 0018 FECF              rjmp L3
 001A                   .dbline 18
 001A           ;  UDR = CData;
 001A 0CB9              out 0xc,R16
 001C                   .dbline -2
 001C                   .dbline 19
 001C           ; }
 001C           L2:
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbsym r CData 16 c
 001E                   .dbend
 001E                   .dbfunc e SPISlaveInit _SPISlaveInit fV
                        .even
 001E           _SPISlaveInit::
 001E                   .dbline -1
 001E                   .dbline 32
 001E           ; #define DDR_MISO  6
 001E           ; #define DDR_MOSI  5
 001E           ; #define DDR_SCK   7
 001E           ; #define DDR_SS    4
 001E           ; #define DDR_SPI   DDRB
 001E           ; /*-----------------------------------------------------------------
 001E           ; 函数名称: void SPISlaveInit(void)
 001E           ; 函数功能: SPI从机初始化
 001E           ; 参    数: 
 001E           ; 返 回 值: 无
 001E           ; -----------------------------------------------------------------*/
 001E           ; void SPISlaveInit(void)
 001E           ; {
 001E                   .dbline 33
 001E           ;     DDR_SPI &=~((1<<DDR_SCK)|(1<<DDR_MOSI));
 001E 87B3              in R24,0x17
 0020 8F75              andi R24,95
 0022 87BB              out 0x17,R24
 0024                   .dbline 34
 0024           ;     DDR_SPI |= (1<<DDR_MISO);
 0024 BE9A              sbi 0x17,6
 0026                   .dbline 35
 0026           ;     SPCR = (1<<SPIE)|(1<<SPE)|(1<<SPR1)|(1<<SPR0);//使能接收中断|(1<<CPOL)|(1<<CPHA)
 0026 83EC              ldi R24,195
 0028 8DB9              out 0xd,R24
 002A                   .dbline -2
 002A                   .dbline 36
 002A           ; }
 002A           L6:
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbend
                        .area vector(rom, abs)
                        .org 40
 0028 0C941600          jmp _spi_stc_isr
                        .area text(rom, con, rel)
 002C                   .dbfile C:\DOCUME~1\zhuji\桌面\新建文件夹\spi从\main.c
 002C                   .dbfunc e spi_stc_isr _spi_stc_isr fV
                        .even
 002C           _spi_stc_isr::
 002C 2A92              st -y,R2
 002E 2FB6              in R2,0x3f
 0030 2A92              st -y,R2
 0032                   .dbline -1
 0032                   .dbline 39
 0032           ; #pragma interrupt_handler spi_stc_isr:11
 0032           ; void spi_stc_isr(void)
 0032           ; {
 0032                   .dbline 42
 0032           ;  //byte in SPDR has been sent/received
 0032           ;  
 0032           ;  UDR = SPDR;
 0032 2FB0              in R2,0xf
 0034 2CB8              out 0xc,R2
 0036                   .dbline -2
 0036                   .dbline 43
 0036           ; }
 0036           L7:
 0036 2990              ld R2,y+
 0038 2FBE              out 0x3f,R2
 003A 2990              ld R2,y+
 003C                   .dbline 0 ; func end
 003C 1895              reti
 003E                   .dbend
 003E                   .dbfunc e SPISlaveRead1Byte _SPISlaveRead1Byte fc
                        .even
 003E           _SPISlaveRead1Byte::
 003E                   .dbline -1
 003E                   .dbline 52
 003E           ; 
 003E           ; /*-----------------------------------------------------------------
 003E           ; 函数名称: void SPIMasterTransmit(unsigned char i) 
 003E           ; 函数功能: SPI数据发送
 003E           ; 参    数: 
 003E           ; 返 回 值: 无
 003E           ; -----------------------------------------------------------------*/
 003E           ; uchar SPISlaveRead1Byte(void) 
 003E           ; { 
 003E           L9:
 003E                   .dbline 53
 003E           L10:
 003E                   .dbline 53
 003E           ;  while (!(SPSR & (1<<SPIF)));  // 等待传输结束 
 003E 779B              sbis 0xe,7
 0040 FECF              rjmp L9
 0042                   .dbline 54
 0042           ;  return SPDR;
 0042 0FB1              in R16,0xf
 0044                   .dbline -2
 0044           L8:
 0044                   .dbline 0 ; func end
 0044 0895              ret
 0046                   .dbend
 0046                   .dbfunc e DeviceInit _DeviceInit fV
                        .even
 0046           _DeviceInit::
 0046                   .dbline -1
 0046                   .dbline 57
 0046           ; }
 0046           ; void DeviceInit(void)
 0046           ; {
 0046                   .dbline 58
 0046           ;  CLI();
 0046 F894              cli
 0048                   .dbline 59
 0048           ;  uart0_init();
 0048 DBDF              xcall _uart0_init
 004A                   .dbline 60
 004A           ;  SPISlaveInit();
 004A E9DF              xcall _SPISlaveInit
 004C                   .dbline 61
 004C           ;  MCUCR = 0;
 004C 2224              clr R2
 004E 25BE              out 0x35,R2
 0050                   .dbline 62
 0050           ;  TIMSK = 0;
 0050 29BE              out 0x39,R2
 0052                   .dbline 63
 0052           ;  GICR  = 0;
 0052 2BBE              out 0x3b,R2
 0054                   .dbline 64
 0054           ;  SEI();
 0054 7894              sei
 0056                   .dbline -2
 0056                   .dbline 65
 0056           ; }
 0056           L12:
 0056                   .dbline 0 ; func end
 0056 0895              ret
 0058                   .dbend
 0058                   .dbfunc e main _main fV
 0058           ;           temp -> <dead>
                        .even
 0058           _main::
 0058                   .dbline -1
 0058                   .dbline 67
 0058           ; void main(void)
 0058           ; {
 0058                   .dbline 69
 0058           ;  uchar temp;
 0058           ;  DDR_SPI &=~(1<<DDR_SS);
 0058 BC98              cbi 0x17,4
 005A                   .dbline 70
 005A           ;  DeviceInit();
 005A F5DF              xcall _DeviceInit
 005C           L14:
 005C                   .dbline 72
 005C                   .dbline 75
 005C                   .dbline 77
 005C           L15:
 005C                   .dbline 71
 005C FFCF              xjmp L14
 005E           X0:
 005E                   .dbline -2
 005E                   .dbline 78
 005E           ;  while(1)
 005E           ;  {
 005E           ;  
 005E           ;   //UDR = SPISlaveRead1Byte();
 005E           ;   ;
 005E           ;   //Uart0Send(temp);
 005E           ;  }
 005E           ; }
 005E           L13:
 005E                   .dbline 0 ; func end
 005E 0895              ret
 0060                   .dbsym l temp 1 c
 0060                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -