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

📄 slaver.lst

📁 mega16 spi主从通信 测试通过(ICC)
💻 LST
字号:
__text_start:
__start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 36E0      CPI	R30,0x60
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E0077  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: C:\DOCUME~1\zhuji\桌面\新建文件夹\spi从\main.c
(0001) //再放上SPI从机通信程序
(0002) #include "iom16v.h"
(0003) #include "macros.h"
(0004) #define uchar unsigned char
(0005) #define uint  unsigned int
(0006) void uart0_init(void)
(0007) {
(0008)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
    004B 2422      CLR	R2
    004C B82A      OUT	0x0A,R2
(0009)  UCSRA = 0x00;
    004D B82B      OUT	0x0B,R2
(0010)  UCSRC = 0x0B;//
    004E E08B      LDI	R24,0xB
    004F BD80      OUT	0x20,R24
(0011)  UBRRL = 0x2F; //set baud rate lo
    0050 E28F      LDI	R24,0x2F
    0051 B989      OUT	0x09,R24
(0012)  UBRRH = 0x00; //set baud rate hi  fosc=7372800HZ,Baud=115200
    0052 BC20      OUT	0x20,R2
(0013)  UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);//0xD8;//发送接受使能 中断使能
    0053 ED88      LDI	R24,0xD8
    0054 B98A      OUT	0x0A,R24
(0014) }
    0055 9508      RET
(0015) void Uart0Send(uchar CData)
(0016) {
(0017)  while(!(UCSRA&0x20));
_Uart0Send:
  CData                --> R16
    0056 9B5D      SBIS	0x0B,5
    0057 CFFE      RJMP	_Uart0Send
(0018)  UDR = CData;
    0058 B90C      OUT	0x0C,R16
(0019) }
    0059 9508      RET
(0020) #define DDR_MISO  6
(0021) #define DDR_MOSI  5
(0022) #define DDR_SCK   7
(0023) #define DDR_SS    4
(0024) #define DDR_SPI   DDRB
(0025) /*-----------------------------------------------------------------
(0026) 函数名称: void SPISlaveInit(void)
(0027) 函数功能: SPI从机初始化
(0028) 参    数: 
(0029) 返 回 值: 无
(0030) -----------------------------------------------------------------*/
(0031) void SPISlaveInit(void)
(0032) {
(0033)     DDR_SPI &=~((1<<DDR_SCK)|(1<<DDR_MOSI));
_SPISlaveInit:
    005A B387      IN	R24,0x17
    005B 758F      ANDI	R24,0x5F
    005C BB87      OUT	0x17,R24
(0034)     DDR_SPI |= (1<<DDR_MISO);
    005D 9ABE      SBI	0x17,6
(0035)     SPCR = (1<<SPIE)|(1<<SPE)|(1<<SPR1)|(1<<SPR0);//使能接收中断|(1<<CPOL)|(1<<CPHA)
    005E EC83      LDI	R24,0xC3
    005F B98D      OUT	0x0D,R24
(0036) }
    0060 9508      RET
_spi_stc_isr:
    0061 922A      ST	R2,-Y
    0062 B62F      IN	R2,0x3F
    0063 922A      ST	R2,-Y
(0037) #pragma interrupt_handler spi_stc_isr:11
(0038) void spi_stc_isr(void)
(0039) {
(0040)  //byte in SPDR has been sent/received
(0041)  
(0042)  UDR = SPDR;
    0064 B02F      IN	R2,0x0F
    0065 B82C      OUT	0x0C,R2
(0043) }
    0066 9029      LD	R2,Y+
    0067 BE2F      OUT	0x3F,R2
    0068 9029      LD	R2,Y+
    0069 9518      RETI
(0044) 
(0045) /*-----------------------------------------------------------------
(0046) 函数名称: void SPIMasterTransmit(unsigned char i) 
(0047) 函数功能: SPI数据发送
(0048) 参    数: 
(0049) 返 回 值: 无
(0050) -----------------------------------------------------------------*/
(0051) uchar SPISlaveRead1Byte(void) 
(0052) { 
(0053)  while (!(SPSR & (1<<SPIF)));  // 等待传输结束 
_SPISlaveRead1Byte:
    006A 9B77      SBIS	0x0E,7
    006B CFFE      RJMP	_SPISlaveRead1Byte
(0054)  return SPDR;
    006C B10F      IN	R16,0x0F
    006D 9508      RET
(0055) }
(0056) void DeviceInit(void)
(0057) {
(0058)  CLI();
_DeviceInit:
    006E 94F8      BCLR	7
(0059)  uart0_init();
    006F DFDB      RCALL	_uart0_init
(0060)  SPISlaveInit();
    0070 DFE9      RCALL	_SPISlaveInit
(0061)  MCUCR = 0;
    0071 2422      CLR	R2
    0072 BE25      OUT	0x35,R2
(0062)  TIMSK = 0;
    0073 BE29      OUT	0x39,R2
(0063)  GICR  = 0;
    0074 BE2B      OUT	0x3B,R2
(0064)  SEI();
    0075 9478      BSET	7
(0065) }
    0076 9508      RET
(0066) void main(void)
(0067) {
(0068)  uchar temp;
(0069)  DDR_SPI &=~(1<<DDR_SS);
_main:
  temp                 --> Y+1
    0077 98BC      CBI	0x17,4
(0070)  DeviceInit();
    0078 DFF5      RCALL	_DeviceInit
(0071)  while(1)
    0079 CFFF      RJMP	0x0079
(0072)  {
(0073)  
(0074)   //UDR = SPISlaveRead1Byte();
(0075)   ;
(0076)   //Uart0Send(temp);
(0077)  }
(0078) }
FILE: <library>
    007A 9508      RET

⌨️ 快捷键说明

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